Oracle Cloud Infrastructure（OCI）の Object Storage の事前認証リクエストを使ってファイルを共有してみる

### はじめに

社外の人などにファイルを共有する際にはメールへのファイル添付を利用することが多いですが、ファイルのサイズが大きかったり、セキュリティの問題が気になったり、ドキュメントとしてきちんと整理しておくような要求があったりして、ドキュメント管理ソリューションを利用するケースも増えています。

Oracle Cloud Infrastructure（OCI）にも、Oracle Content and Experience（OCE）というサービスがあり、社内外でのドキュメント管理をセキュアに効率よく実施することができます。

今回は「そこまでの機能はいらないけど、メール添付はちょっと....」というような方のために、OCIのObject Storageの事前認証リクエストを利用したファイル共有方法について記載してみます。

### 1.Object Storageに置いたファイルをOCIアカウントを持たない人に共有する

Object Storageに置いたファイルに対して、事前認証リクエストを作成して、そのURLを共有することで、OCIアカウントを持たない人に対してファイルを共有することができます。

#### 1-1.バケットの作成

OCIコンソールの左上三本線メニューより、オブジェクト・ストレージ＞オブジェクト・ストレージを選択し、「バケットの作成」ボタンを押す。

バケットの名前を指定し、「バケットの作成」ボタンを押す

![bucket_create.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/694576/ab410167-01e3-43a2-4263-4305b263d9d5.png)

#### 1-2.ファイルのアップロード

作成したバケット名をクリックし、オブジェクト・セクションにある「アップロード」ボタンを押す。

共有したいファイルを選択し、「アップロード」ボタンを押す。

![upload.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/694576/50087757-5d57-0916-5e35-96deadf5502f.png)

#### 1-3.事前認証リクエストの作成

アップロードしたファイルの右端にある３つの点を押したメニューより「事前認証リクエストの作成」を選択。

![jizen_menu.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/694576/a101ea95-aaac-6a6f-bdcd-6c69e284e09f.png)

以下の項目を設定して、「事前認証リクエストの作成」ボタンを押す。

・名前：任意の名前
・事前認証済リクエスト・ターゲット：今回はファイルが対象なので「オブジェクト」を指定
・アクセス・タイプ：今回はファイル共有が目的なので「オブジェクトに対する読取りを許可」を指定
　※書込みについては、後半に記載
・有効期限：ファイルにアクセスできる期限を指定

![jizen.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/694576/5ed89b69-da61-4c69-fbd1-31b14c59e2f4.png)

事前認証リクエストの詳細画面が表示されるので、事前認証リクエストのURLをコピーして、メモ帳などに控えておく。
※このURLは一度しか表示されないため、必ず控えておいてください。

![jizen2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/694576/0e711aa1-1e96-41f7-a159-31b76a8fe67e.png)

#### 1-4.事前認証されたURLを共有

1-3.で控えたURLをメールなどで共有することで、OCIアカウントを持たない社外の人などにオブジェクト・ストレージ上のファイルを共有することができます。

### 2.Object Storageを介して、OCIアカウントを持たない人と相互にファイル共有する

前述の書き込み権限を利用することで、Object Storageを介した、相互のファイル共有が実現できます。
ただし、こちらの手順を利用するには、cURLコマンドが使用できるなどのITスキルが必要となるため、どなたでも利用できるものではありません。

#### 2-1.バケットへの事前認証リクエストの作成

今回はバケットに対する事前認証リクエストを作成してみます。
※「1-3.事前認証リクエストの作成」手順で書き込み権限を付与することで、ファイルに対しても同じことができます。
※ファイルに対しては読み込み/書き込みが可能、バケットに対しては書き込みのみ可能です。

OCIコンソールの左上三本線メニューより、オブジェクト・ストレージ＞オブジェクト・ストレージを選択します。

ファイル共有を行うバケットの右端にある３つの点を押したメニューより「事前認証リクエストの作成」を選択。

![bucket_jizen_menu.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/694576/e2c3424d-eadb-8251-e112-8e20f78d268c.png)

以下の項目を設定して、「事前認証リクエストの作成」ボタンを押す。

・名前：任意の名前
・事前認証済リクエスト・ターゲット：今回はバケットが対象なので「バケット」を指定
・有効期限：バケットにアクセスできる期限を指定

![jizen_b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/694576/34c47c95-262b-4d88-c043-47ba7fb34c1a.png)

事前認証リクエストの詳細画面が表示されるので、事前認証リクエストのURLをコピーして、メモ帳などに控えておく。
※このURLは一度しか表示されないため、必ず控えておいてください。

![jizen_b2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/694576/c3af7816-3646-31f4-bcf6-8f847fae5b0e.png)

#### 2-2.事前認証されたURLを使ったファイルの共有

2-1.で控えたURLをメールなどで共有することで、OCIアカウントを持たない社外の人などとオブジェクト・ストレージのバケットを介して、ファイルを相互に共有できます。

バケットへの書き込みには、以下のようなcURLコマンドを実行します。

`curl -X PUT --data-binary @[送信元ファイル名] -H "Content-Type: application/json" [2-1.で控えた事前認証リクエストのURL/送信先ファイル名]`

※ファイルに対して書き込み権限を付与した場合は、[送信先ファイル名]が固定されます。

具体的には、以下のような感じです。

`curl -X PUT --data-binary @uploadtest.txt -H "Content-Type: application/json" https://objectstorage.ap-tokyo-1.oraclecloud.com/p/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/n/ssssssssss/b/file_share/o/uploadtest.txt`

### 3.まとめ

本来のオブジェクト・ストレージの利用目的は、バックアップや大量ファイルの安価な保管場所といった使い方が多いかと思います。
冒頭にも書いたとおり、セキュリティを伴った効率的なファイル管理を行いたい場合は、Oracle Content and Experience（OCE）などのドキュメント管理ソリューションがおすすめです。
ただ、そこまでの機能は必要ではなく、安価に片方向の特定ファイルの共有や、ITスキルがある方の間でのファイルの受け渡し場所として利用したい場合は、オブジェクト・ストレージを工夫次第で利用することができるかなと思います。

参考マニュアル：
https://docs.cloud.oracle.com/ja-jp/iaas/Content/Object/Tasks/usingpreauthenticatedrequests.htm