

# Amazon S3 バケットへのアクセスを設定する
<a name="postgresql-s3-export-access-bucket"></a>

データを Amazon S3 にエクスポートするには、PostgreSQL DB インスタンスに、ファイルが入る Amazon S3 バケットに対するアクセス許可を付与します。

これには、以下の手順を使用します。

**IAM ロールを介して PostgreSQLDB のインスタンスに Amazon S3 へのアクセスを許可するには**

1. IAM ポリシーを作成します。

   このポリシーは、PostgreSQL DB インスタンスに、Amazon S3 のバケットとオブジェクトに対するアクセス許可を付与します。

   このポリシーの作成の一環として、次のステップを実行します。

   1. ポリシーに、PostgreSQL DB インスタンスから Amazon S3 バケットへのファイル転送を許可するための以下の必須アクションを含めます。
      + `s3:PutObject`
      + `s3:AbortMultipartUpload`

   1. Amazon S3 バケットとバケット内のオブジェクトを識別する Amazon リソースネーム (ARN) を含めます。Amazon S3 アクセス用の ARN 形式は `arn:aws:s3:::amzn-s3-demo-bucket/*` です。

   Amazon RDS for PostgreSQL の IAM ポリシーの作成の詳細については、[IAM データベースアクセス用の IAM ポリシーの作成と使用](UsingWithRDS.IAMDBAuth.IAMPolicy.md) を参照してください。*IAM ユーザーガイド*の「[チュートリアル: はじめてのカスタマー管理ポリシーの作成とアタッチ](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_managed-policies.html)」も参照してください。

   以下の AWS CLI コマンドでは、これらのオプションを指定して、`rds-s3-export-policy` という名前の IAM ポリシーを作成します。*amzn-s3-demo-bucket* という名前のバケットへのアクセスを許可します。
**警告**  
特定のバケットにアクセスするようにエンドポイントポリシーが設定されているプライベート VPC 内にデータベースをセットアップすることをお勧めします。詳細については、Amazon VPC ユーザーガイドの「[Amazon S3 のエンドポイントポリシーの使用](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints-s3.html#vpc-endpoints-policies-s3)」を参照してください。  
すべてのリソースへのアクセスを持つポリシーを作成しないことを強くお勧めします。このアクセスは、データセキュリティにとって脅威になる可能性があります。`S3:PutObject` を使用してすべてのリソースへのアクセスを `"Resource":"*"` に許可するポリシーを作成すると、エクスポート権限を持つユーザーはアカウント内のすべてのバケットにデータをエクスポートできます。さらに、ユーザーは *AWS リージョン内のパブリックに書き込み可能なバケットにデータをエクスポートできます*。

   ポリシーを作成したら、そのポリシーの Amazon リソースネーム (ARN) を書き留めます。ポリシーを IAM ロールにアタッチする場合、後続のステップで ARN が必要です。

   ```
   aws iam create-policy  --policy-name rds-s3-export-policy  --policy-document '{
        "Version": "2012-10-17",		 	 	 
        "Statement": [
          {
            "Sid": "s3export",
            "Action": [
              "s3:PutObject*",
              "s3:ListBucket",
              "s3:GetObject*",
              "s3:DeleteObject*",
              "s3:GetBucketLocation",
              "s3:AbortMultipartUpload"
            ],
            "Effect": "Allow",
            "Resource": [
              "arn:aws:s3:::amzn-s3-demo-bucket/*"
            ] 
          }
        ] 
      }'
   ```

1. IAM ロールを作成します。

   これを行うと、Amazon RDS がユーザーに代わってこの IAM ロールを引き受け、Amazon S3 バケットにアクセスできます。詳細については、*IAM ユーザーガイド*の「[IAM ユーザーにアクセス許可を委任するロールの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html)」を参照してください。

   リソースポリシー内では `[aws:SourceArn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn)` および `[aws: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:SourceArn` の値と `aws:SourceAccount` の値のアカウントでは同じアカウント ID を使用する必要があります。
   + 単一リソースに対するクロスサービスアクセスが必要な場合は `aws:SourceArn` を使用します。
   + そのアカウント内の任意のリソースをクロスサービス使用に関連付けることを許可する場合、`aws:SourceAccount`を使用します。

    ポリシーでは、必ずリソースの完全な ARN を持つ `aws:SourceArn` グローバル条件コンテキストキーを使用してください。以下の例は、AWS CLI コマンドを使用して、`rds-s3-export-role` という名前のロールを作成する方法を示しています。  
**Example**  

   Linux、macOS、Unix の場合:

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

   Windows の場合:

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

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

   次の AWS CLI コマンドは、先ほど作成したポリシーを `rds-s3-export-role.` という名前のロールにアタッチします。`your-policy-arn` を前のステップでメモしたポリシー ARN に置き換えます。

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

1. DB インスタンスに IAM ロールを追加します。これを行うには、以下で説明するように、AWS マネジメントコンソール または AWS CLI を使用します。

## コンソール
<a name="collapsible-section-1"></a>

**コンソールを使用して PostgreSQL DB インスタンスの IAM ロールを追加するには**

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

1. 詳細を表示するには、PostgreSQL DB インスタンスの名前を選択します。

1. [**接続とセキュリティ**] タブの [**IAM ロールの管理**] セクションで、[**このインスタンスに IAM ロールを追加**] で追加するロールを選択します。

1. [**Feature**] で、[**s3Export**] を選択します。

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

## AWS CLI
<a name="collapsible-section-2"></a>

**CLI を使用して PostgreSQL DB インスタンスの IAM ロールを追加するには**
+ 次のコマンドを使用して、`my-db-instance` という名前の PostgreSQL DB インスタンスにロールを追加します。*`your-role-arn`* を、以前のステップで書き留めたロール ARN に置き換えます。`s3Export` オプションの値に `--feature-name` を使用します。  
**Example**  

  Linux、macOS、Unix の場合:

  ```
  aws rds add-role-to-db-instance \
     --db-instance-identifier my-db-instance \
     --feature-name s3Export \
     --role-arn your-role-arn   \
     --region your-region
  ```

  Windows の場合:

  ```
  aws rds add-role-to-db-instance ^
     --db-instance-identifier my-db-instance ^
     --feature-name s3Export ^
     --role-arn your-role-arn ^
     --region your-region
  ```