

# Amazon S3 と RDS for Oracle を統合する IAM アクセス許可の設定
<a name="oracle-s3-integration.preparing"></a>

RDS for Oracle が Amazon S3 と統合するには、DB インスタンスが Amazon S3 バケットにアクセスできる必要があります。DB インスタンスで使用される Amazon VPC は Amazon S3 エンドポイントへのアクセスを提供する必要はありません。

RDS for Oracle は、あるアカウントの DB インスタンスと別のアカウントの Amazon S3 バケットの間のファイルの転送をサポートしています。追加のステップが必要な場合は、以下のセクションで説明します。

**Topics**
+ [ステップ 1: Amazon RDS ロール用の IAM ポリシーを作成する](#oracle-s3-integration.preparing.policy)
+ [ステップ 2: (オプション) Amazon S3 バケットの IAM ポリシーを作成する](#oracle-s3-integration.preparing.policy-bucket)
+ [ステップ 3: DB インスタンスの IAM ロールを作成し、ポリシーをアタッチする](#oracle-s3-integration.preparing.role)
+ [ステップ 4: IAM ロールを RDS for Oracle DB インスタンスに関連付ける](#oracle-s3-integration.preparing.instance)

## ステップ 1: Amazon RDS ロール用の IAM ポリシーを作成する
<a name="oracle-s3-integration.preparing.policy"></a>

このステップでは、Amazon S3 バケットと RDS DB インスタンスの間のファイル転送に必要なアクセス許可を持つ AWS Identity and Access Management (IAM) ポリシーを作成します。このステップは、S3 バケットが既に作成されていることを前提としています。

ポリシーを作成する前に、次の情報を書き留めます。
+ バケットの Amazon リソースネーム (ARN)
+ お客様の AWS KMS キーの ARN、バケットが SSE-KMS または SSE-S3 暗号化を使用している場合
**注記**  
RDS for Oracle DB インスタンスは、SSE-C で暗号化された Amazon S3 バケットにアクセスできません。

詳細については、「*Amazon Simple Storage Service ユーザーガイド*」の「[サーバー側の暗号化を使用したデータの保護](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html)」を参照してください。

### コンソール
<a name="oracle-s3-integration.preparing.policy.console"></a>

**Amazon S3 バケットへのアクセスを Amazon RDS に許可する IAM ポリシーを作成するには**

1. [IAM マネジメントコンソール](https://console.aws.amazon.com/iam/home?#home)を開きます。

1. [**Access management (アクセス管理)**] で、[**Policies (ポリシー)**] を選択します。

1. **[ポリシーを作成]** を選択します。

1. [**Visual editor**] タブで、[**Choose a service**] を選択し、[**S3**] を選択します。

1. [**Actions (アクション)**] で [**Expand all (すべて展開)**] を選択し、Amazon S3 バケットから Amazon RDS にファイルを転送するために必要なバケットのアクセス許可とオブジェクトのアクセス許可を選択します。例えば、以下を実行してください。
   + [**List (リスト)**] を展開し、[**ListBucket**] を選択します。
   + [**Read (読み取り)**] を展開し、[**GetObject**] を選択します。
   + **[Write (書き込み)]** を展開し、**[PutObject]**、**[DeleteObject]**、**[AbortMultipartUpload]**、**[ListMultipartUploadParts]** を選択します。マルチパートアップロードのアクセス許可は、大きなファイル (100 MB 以上) を Amazon S3 にアップロードするときに必要です。
   + **[Permissions management]** (アクセス許可の管理) を展開し、**PutObjectAcl** を選択します。このアクセス許可は、別のアカウントが所有するバケットにファイルをアップロードする予定で、このアカウントがバケットの内容を完全に制御する必要がある場合に必要です。

   *オブジェクトのアクセス許可*は、Amazon S3 のオブジェクトオペレーションのアクセス許可です。バケット自体ではなくバケット内のオブジェクトに付与する必要があります。詳細については、「[オブジェクトオペレーションに対するアクセス許可](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-objects)」を参照してください。

1. **[リソース]** を選択し、次の操作を行います。

   1. **[特定]** を選択します。

   1. **[バケット]** では、**[ARN を追加]** を選択します。バケット ARN を入力します。バケット名は自動的に入力されます。その後、**[Add]** (追加) を選択します。

   1. **[オブジェクト]** リソースが表示されている場合は、**[ARN を追加]** を選択してリソースを手動で追加するか、**[すべて]** を選択します。
**注記**  
Amazon S3 バケット内の特定のファイルやフォルダにのみアクセスすることを Amazon RDS に許可するには、[**Amazon リソースネーム (ARN)**] に、より具体的な ARN 値を設定します。Amazon S3 のアクセスポリシーの定義方法については、「[Amazon S3 リソースへのアクセス許可の管理](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html)」を参照してください。

1. (オプション) ポリシーにリソースを追加するには、[**Add addition permissions (アクセス許可を追加する)**] を選択します。例えば、以下を実行してください。

   1. バケットがカスタム KMS キーで暗号化されている場合は、サービスの **KMS** を選択します。

   1. **[手動アクション]** では、以下を選択します。
      + **暗号化**
      + **[ReEncrypt from]** および **[ReEncrypt to]**
      + **Decrypt**
      + **DescribeKey**
      + **GenerateDataKey**

   1. **[リソース]** で **[特定]** を選択します。

   1. **[キー]** では、**[ARN を追加]** を選択します。リソースとしてカスタムキーの ARN を入力し、**[追加]** を選択します。

      詳細については、*Amazon Simple Storage Service ユーザーガイド*の「[Protecting Data Using Server-Side Encryption with KMS keys Stored in AWS Key Management Service (SSE-KMS)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html)」を参照してください。

   1. Amazon RDS が他のバケットにアクセスするためにアクセスが必要な場合は、これらのバケットの ARN を追加します。オプションで、Amazon S3 内のすべてのバケットとオブジェクトへのアクセスを許可できます。

1. [**次へ: タグ**]、[**次へ: レビュー**] の順に選択します。

1. [** 名前**] に、IAM ポリシーの名前 (例: `rds-s3-integration-policy`) を設定します。この名前は、IAM ロールを作成して DB インスタンスに関連付ける際に使用します。オプションで [**Description**] 値を追加することもできます。

1. [**Create policy**] (ポリシーの作成) を選択します。

### AWS CLI
<a name="oracle-s3-integration.preparing.policy.CLI"></a>

Amazon S3 バケットに Amazon RDS へのアクセス許可を付与する AWS Identity and Access Management IAM ポリシーを作成します。ポリシーを作成したら、ポリシーの ARN を書き留めます。この ARN は、後のステップで必要になります。

必要なアクセスのタイプに基づき、適切なアクションをポリシーに含めます。
+ `GetObject` - Amazon S3 バケットから Amazon RDS へのファイルの転送に必要。
+ `ListBucket` - Amazon S3 バケットから Amazon RDS へのファイルの転送に必要。
+ `PutObject` - Amazon RDS から Amazon S3 バケットへのファイルの転送に必要。
+ `AbortMultipartUpload` – マルチパートアップロードで、大きなファイル (100 MB 以上) を Amazon RDS から Amazon S3 バケットに転送するときに必要です。
+ `ListMultipartUploadParts` – マルチパートアップロードで、大きなファイル (100 MB 以上) を Amazon RDS から Amazon S3 バケットに転送するときに必要です。

以下の AWS CLI コマンドでは、これらのオプションを指定して、`rds-s3-integration-policy` という名前の IAM ポリシーを作成します。このポリシーでは、`amzn-s3-demo-bucket` という名前のバケットへのアクセス権が付与されます。

**Example**  
Linux、macOS、Unix の場合:  

```
aws iam create-policy \
   --policy-name rds-s3-integration-policy \
   --policy-document '{
     "Version": "2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "s3integration",
         "Action": [
           "s3:GetObject",
           "s3:ListBucket",
           "s3:PutObject",
           "s3:AbortMultipartUpload",
           "s3:ListMultipartUploadParts"
         ],
         "Effect": "Allow",
         "Resource": [
           "arn:aws:s3:::amzn-s3-demo-bucket", 
           "arn:aws:s3:::amzn-s3-demo-bucket/*"
         ]
       }
     ]
   }'
```
次の例には、カスタム KMS キーのアクセス許可が含まれています。  

```
aws iam create-policy \
   --policy-name rds-s3-integration-policy \
   --policy-document '{
     "Version": "2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "s3integration",
         "Action": [
           "s3:GetObject",
           "s3:ListBucket",
           "s3:PutObject",
           "kms:Decrypt",
           "kms:Encrypt",
           "kms:ReEncrypt*",
           "kms:GenerateDataKey",
           "kms:DescribeKey",
         ],
         "Effect": "Allow",
         "Resource": [
           "arn:aws:s3:::amzn-s3-demo-bucket", 
           "arn:aws:s3:::amzn-s3-demo-bucket/*",
           "arn:aws:kms:::your-kms-arn"
         ]
       }
     ]
   }'
```
Windows の場合:  

```
aws iam create-policy ^
   --policy-name rds-s3-integration-policy ^
   --policy-document '{
     "Version": "2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "s3integration",
         "Action": [
           "s3:GetObject",
           "s3:ListBucket",
           "s3:PutObject",
           "s3:AbortMultipartUpload",
           "s3:ListMultipartUploadParts"
         ],
         "Effect": "Allow",
         "Resource": [
           "arn:aws:s3:::amzn-s3-demo-bucket", 
           "arn:aws:s3:::amzn-s3-demo-bucket/*"
         ]
       }
     ]
   }'
```
次の例には、カスタム KMS キーのアクセス許可が含まれています。  

```
aws iam create-policy ^
   --policy-name rds-s3-integration-policy ^
   --policy-document '{
     "Version": "2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "s3integration",
         "Action": [
           "s3:GetObject",
           "s3:ListBucket",
           "s3:PutObject",
           "kms:Decrypt",
           "kms:Encrypt",
           "kms:ReEncrypt",
           "kms:GenerateDataKey",
           "kms:DescribeKey",
         ],
         "Effect": "Allow",
         "Resource": [
           "arn:aws:s3:::amzn-s3-demo-bucket", 
           "arn:aws:s3:::amzn-s3-demo-bucket/*",
           "arn:aws:kms:::your-kms-arn"
         ]
       }
     ]
   }'
```

## ステップ 2: (オプション) Amazon S3 バケットの IAM ポリシーを作成する
<a name="oracle-s3-integration.preparing.policy-bucket"></a>

このステップは、次の条件でのみ必要です。
+ あるアカウント (アカウント A) から Amazon S3 バケットにファイルをアップロードし、別のアカウント (アカウント B) からファイルにアクセスする予定です。
+ アカウント B がバケットを所有しています。
+ アカウント B は、バケットにロードされたオブジェクトを完全に制御する必要があります。

上記の条件が適用されない場合は、[ステップ 3: DB インスタンスの IAM ロールを作成し、ポリシーをアタッチする](#oracle-s3-integration.preparing.role) に進みます。

バケットポリシーを作成するために、以下のものがあることを確認します。
+ アカウント A のアカウント ID
+ アカウント A のユーザー名
+ アカウント B の Amazon S3 バケットの ARN 値

### コンソール
<a name="oracle-s3-integration.preparing.policy-bucket.console"></a>

**バケットポリシーを作成または編集するには**

1. AWS マネジメントコンソール にサインインし、Amazon S3 コンソール ([https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)) を開きます。

1. [**Buckets (バケット)**] リストで、バケットポリシーを作成するバケットの名前、またはバケットポリシーを編集するバケットの名前を選択します。

1. [**Permissions (アクセス許可)**] を選択します。

1. **[バケットポリシー]** で **[編集]** を選択します。バケットポリシーの編集ページが開きます。

1. **[バケットポリシーを編集]** ページで、「*Amazon S3 ユーザーガイド*」の **[ポリシーの例]** を確認するか、**[ポリシージェネレーター]** を選択してポリシーを自動的に生成するか、**[ポリシー]** セクションで JSON を編集します。

   **ポリシージェネレーター**を選択すると、AWS ポリシージェネレーターが新しいウィンドウで開きます。

   1. **ポリシーの種類の選択**の **AWS ポリシーポリシージェネレータ**ページで、** S3 バケットポリシー**を選択します。

   1. 提供されたフィールドに情報を入力してステートメントを追加し、**ステートメントの追加**を選択します。追加するステートメントの数だけ繰り返します。ポリシーステートメントの詳細については、*IAM ユーザーガイド*の [IAM JSON ポリシーのエレメントのリファレンス](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html)を参照してください。
**注記**  
便宜上、**バケットポリシーの編集**ページでは、現在のバケットの**バケット ARN** (Amazonリソース名) が**ポリシー**テキストフィールドの上に表示されます。この ARN をコピーして、**AWSポリシージェネレータ**のステートメントで使用できます。

   1. ステートメントの追加が完了したら、**ポリシーの生成**を選択します。

   1. 生成されたポリシーテキストをコピーし、[**閉じる**] を選択すると、Amazon S3 コンソールの**バケットポリシーの編集**ページに戻ります。

1. 左 **ポリシー** ボックスで、既存のポリシーを編集するか、ポリシージェネレータからバケットポリシーを貼り付けます。ポリシーを保存する前に、セキュリティ警告、エラー、一般的な警告、および提案を解決してください。

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "ExamplePermissions",
         "Effect": "Allow",
         "Principal": {
           "AWS": "arn:aws:iam::123456789012:user/account-A-user"
         },
         "Action": [
           "s3:PutObject",
           "s3:PutObjectAcl"
         ],
         "Resource": [
           "arn:aws:s3:::amzn-s3-demo-destination-bucket",
           "arn:aws:s3:::amzn-s3-demo-destination-bucket/*"
         ]
       }
     ]
   }
   ```

------

1. **変更の保存**を選択すると、[バケット許可] のページへ戻ります。

## ステップ 3: DB インスタンスの IAM ロールを作成し、ポリシーをアタッチする
<a name="oracle-s3-integration.preparing.role"></a>

このステップは、IAM ポリシーを [ステップ 1: Amazon RDS ロール用の IAM ポリシーを作成する](#oracle-s3-integration.preparing.policy) で作成したことを前提としています。このステップでは、RDS for Oracle DB インスタンスのロールを作成し、ロールにポリシーをアタッチします。

### コンソール
<a name="oracle-s3-integration.preparing.role.console"></a>

**Amazon S3 バケットへのアクセスを Amazon RDS に許可する IAM ロールを作成するには**

1. [IAM マネジメントコンソール](https://console.aws.amazon.com/iam/home?#home)を開きます。

1. ナビゲーションペインで **Roles (ロール) ** を選択してください。

1. [**ロールの作成**] を選択してください。

1. **[AWS サービス]** を選択してください。

1. **[他の AWS サービスのユースケース]** で、**[RDS]** を選択し、次に **[RDS — データベースにロールを追加]** を選択します。次に、**[次へ]** を選択します。

1. **[アクセス許可ポリシー]** の **[検索]** に、[ステップ 1: Amazon RDS ロール用の IAM ポリシーを作成する](#oracle-s3-integration.preparing.policy) で作成した IAM ポリシーの名前を入力し、リストに表示されたポリシーを選択します。次に、**[次へ]** を選択します。

1. **[ロール名]** に、`rds-s3-integration-role` などの IAM ロール名を入力します。オプションで [**Description**] 値を追加することもできます。

1. [**ロールの作成**] を選択してください。

### AWS CLI
<a name="integration.preparing.role.CLI"></a>

**ロールを作成してポリシーをアタッチするには**

1. Amazon S3 バケットにアクセスするには、お客様に代わって Amazon RDS が引き受けることのできる IAM ロールを作成します。

   リソースベースの信頼関係では [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn) および [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount) のグローバル条件コンテキストキーを使用して、サービスに付与する特定のリソースへのアクセス許可を制限することをお勧めします。これは、[混乱した使節の問題](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)に対する最も効果的な保護方法です。

   両方のグローバル条件コンテキストキーを使用し、`aws:SourceArn` 値にアカウント ID を含めます。この場合は、`aws:SourceAccount` 値と `aws:SourceArn` 値のアカウントは、同じステートメントで使用する場合、同じアカウント ID を使用する必要があります。
   + 単一リソースに対するクロスサービスアクセスが必要な場合は `aws:SourceArn` を使用します。
   + そのアカウント内の任意のリソースをクロスサービス使用に関連付けることを許可する場合、`aws:SourceAccount`を使用します。

   信頼関係では、`aws:SourceArn` グローバル条件コンテキストキーに、必ず、ロールにアクセスするリソースの完全な Amazon リソースネーム (ARN) を使用します。

   次の AWS CLI コマンドでは、この目的で `rds-s3-integration-role` という名前のロールを作成します。  
**Example**  

   Linux、macOS、Unix の場合:

   ```
   aws iam create-role \
      --role-name rds-s3-integration-role \
      --assume-role-policy-document '{
        "Version": "2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
               "Service": "rds.amazonaws.com"
             },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "my_account_ID",
                    "aws:SourceArn": "arn:aws:rds:Region:my_account_ID:db:dbname"
                }
            }
          }
        ]
      }'
   ```

   Windows の場合:

   ```
   aws iam create-role ^
      --role-name rds-s3-integration-role ^
      --assume-role-policy-document '{
        "Version": "2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
               "Service": "rds.amazonaws.com"
             },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "my_account_ID",
                    "aws:SourceArn": "arn:aws:rds:Region:my_account_ID:db:dbname"
                }
            }
          }
        ]
      }'
   ```

   詳細については、*IAM ユーザーガイド*の「[IAM ユーザーにアクセス許可を委任するロールの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html)」を参照してください。

1. ロールが作成されたら、このロールの ARN を書き留めます。この ARN は、後のステップで必要になります。

1. 作成したポリシーを、作成したロールにアタッチします。

   以下の AWS CLI コマンドでは、`rds-s3-integration-role` という名前のロールにこのポリシーをアタッチします。  
**Example**  

   Linux、macOS、Unix の場合:

   ```
   aws iam attach-role-policy \
      --policy-arn your-policy-arn \
      --role-name rds-s3-integration-role
   ```

   Windows の場合:

   ```
   aws iam attach-role-policy ^
      --policy-arn your-policy-arn ^
      --role-name rds-s3-integration-role
   ```

   `your-policy-arn` を、以前のステップで書き留めたポリシー ARN に置き換えます。

## ステップ 4: IAM ロールを RDS for Oracle DB インスタンスに関連付ける
<a name="oracle-s3-integration.preparing.instance"></a>

Amazon S3 統合のアクセス許可を設定する最後のステップは、IAM ロールを DB インスタンスに関連付けることです。次の要件に注意してください。
+ 必須の Amazon S3 アクセス許可ポリシーがアタッチされた IAM ロールへのアクセスが許可されている必要があります。
+ RDS for Oracle DB インスタンスには、一度に 1 つの IAM ロールのみを関連付けることができます。
+ DB インスタンスは、**[使用可能]** の状態である必要があります。

### コンソール
<a name="oracle-s3-integration.preparing.instance.console"></a>

**IAM ロールを RDS for Oracle DB インスタンスに関連付けるには**

1. AWS マネジメントコンソール にサインインし、Amazon RDS コンソール ([https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)) を開きます。

1. ナビゲーションペインから [**Databases (データベース)**] を選択します。

1. 詳細を表示する RDS for Oracle DB インスタンスの名前を選択します。

1. 「**接続性とセキュリティ**」 タブで、ページ下部の**IAM ロールを管理する** セクションまでスクロールダウンします。

1. **[このインスタンスに IAM ロールを追加]** で、[ステップ 3: DB インスタンスの IAM ロールを作成し、ポリシーをアタッチする](#oracle-s3-integration.preparing.role) で作成したロールを選択します。

1. [**機能**] で、[**S3\$1INTEGRATION**] を選択します。  
![\[S3_INTEGRATION ロールの追加\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/ora-s3-integration-role.png)

1. [**Add role**] を選択します。

### AWS CLI
<a name="oracle-s3-integration.preparing.instance.CLI"></a>

以下の AWS CLI コマンドでは、`mydbinstance` という名前の Oracle DB インスタンスにこのロールを追加します。

**Example**  
Linux、macOS、Unix の場合:  

```
aws rds add-role-to-db-instance \
   --db-instance-identifier mydbinstance \
   --feature-name S3_INTEGRATION \
   --role-arn your-role-arn
```
Windows の場合:  

```
aws rds add-role-to-db-instance ^
   --db-instance-identifier mydbinstance ^
   --feature-name S3_INTEGRATION ^
   --role-arn your-role-arn
```

`your-role-arn` を、以前のステップで書き留めたロール ARN に置き換えます。`S3_INTEGRATION` オプションには `--feature-name` が指定されている必要があります。