[OCI]Object Storage Objectを別テナンシへコピーしてみた

### この記事でやっていること
- Oracle Cloud Infrastructure のObject Storageのobjectを別のテナンシのObject Storageへコピー
- 同一リージョン内での操作例

## 作業手順
1. オブジェクトのコピーに必要なIAMポリシーの設定・確認
2. 別のテナンシのObject Storageにアクセス・操作するためのIAMポリシーの設定・確認
3. objectのコピー


### 1. オブジェクトのコピーに必要なIAMポリシーの設定・確認
#### サービス権限
コピー操作を実行する各リージョンにて「オブジェクト・ストレージ」サービスを認可する必要があります。
(コピー元、コピー先双方のテナンシで設定)
指定したリージョンのサービスを認可するポリシーを作成して、
テナンシ内のすべてのコンパートメントのオブジェクト・ストレージのネームスペース、バケットおよび関連オブジェクトを管理できる権限：

```
Allow service objectstorage-<region_name> to manage object-family in tenancy
```

操作を限定して許可する権限：

```
テナンシー全体
Allow service objectstorage-<region_name> to {OBJECT_READ, OBJECT_INSPECT, OBJECT_CREATE, OBJECT_OVERWRITE, OBJECT_DELETE} in tenancy
コンパートメント指定
Allow service objectstorage-<region_name> to {OBJECT_READ, OBJECT_INSPECT, OBJECT_CREATE, OBJECT_OVERWRITE, OBJECT_DELETE} in compartment <compartment_name>
```

#### ユーザ権限
コピー元、コピー先双方のテナンシでオブジェクトのコピーを実行するのに必要なアクセス権が必要です。
双方のバケットでオブジェクトを管理する権限も必要です。

管理者の場合:
指定したIAMグループがオブジェクト・ストレージのネームスペース、バケットおよび関連オブジェクトをテナンシ内のすべてのコンパートメントで管理するポリシーを作成できます:

```
Allow group <IAM_group_name> to manage object-family in tenancy
```

指定したグループにテナンシの特定コンパートメントのバケットおよびオブジェクトのみを管理させるポリシー

```
Allow group <IAM_group_name> to manage buckets in compartment <compartment_name>
```

### 2. 別のテナンシのObject Storageにアクセス・操作するためのIAMポリシーの設定・確認
テナンシ間でコピー操作を許可する権限の設定
#### コピー元テナンシ
コピー元テナンシのIAMグループ名とコピー先のテナンシのOCIDを取得し、以下のポリシーを作成

```
define tenancy CopyDestinationTenancy as <OCID_for_destination_tenancy>
endorse group <group_name_in_source_tenancy> to {OBJECT_READ, OBJECT_CREATE, OBJECT_OVERWRITE, OBJECT_INSPECT, OBJECT_DELETE} in tenancy CopyDestinationTenancy }}}
```
![image02.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108635/96c1109c-baa6-6cf3-8dc6-2b110e972f0e.jpeg)

#### コピー先テナンシ
コピー元のテナンシのOCIDとコピー元のIAMグループのOCIDを取得し、以下のポリシーを作成

```
define tenancy CopySourceTenancy as <OCID_for_source_tenancy>
define group CopySourceGroup as <OCID_for_group_in_source_tenancy>
admit group CopySourceGroup of tenancy CopySourceTenancy to {OBJECT_READ, OBJECT_CREATE, OBJECT_OVERWRITE, OBJECT_INSPECT, OBJECT_DELETE} in tenancy }}}
```

![image03.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108635/cfed839d-92ae-3d4f-05bb-190600a928bd.jpeg)
### 3. objectのコピー

コピー元バケット画面
ネームスペース、バケット名、オブジェクト名を確認
![image09.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108635/abaaa7da-521b-7285-38de-b21444e8977c.jpeg)

コピー先バケット画面
ネームスペース、バケット名を確認
![image08.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108635/7ae5f82d-95a0-8397-cf9a-14e3cd1b3d44.jpeg)

#### Webコンソールの例
コピー元オブジェクトを選択し、メニューからコピーを選択
![image07.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108635/b3d27465-5839-897a-2bf9-77fceb8df50c.jpeg)
コピー先のネームスペース名、リージョン、バケット名を指定し、「オブジェクトのコピー」を押下
![image04.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108635/e4d0e575-2528-78a7-e188-0bbaedaf3e22.jpeg)
コピーの完了
![image06.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108635/5b8d51a8-c2e9-86da-bef6-55285386524b.jpeg)


#### CLIの例

```
oci os object copy --namespace-name nr9kylwk --bucket-name CrossTenancyRead --source-object-name crosstenancy.txt --destination-namespace nrdoltfd --destination-region ap-tokyo-1 --destination-bucket CrossTenancyCopy --destination-object-name crosstenancy.txt
```

### さいごに
権限付与ができれば、通常操作でテナンシ間でのオブジェクトコピーができた。

### 参考情報
- [オブジェクトのコピー](https://docs.oracle.com/cd/E97706_01/Content/Object/Tasks/copyingobjects.htm)
- [Copy Objects Across Tenancies Within a Region](https://blogs.oracle.com/cloud-infrastructure/copy-objects-across-tenancies-within-a-region)
- [【総まとめ】Oracle Cloud Infrastructure オブジェクト・ストレージ・サービスの機能概要](https://qiita.com/ksonoda/items/dc12792c99a962f932f9)