

# RDS for SQL Server を S3 と統合するための前提条件
<a name="Appendix.SQLServer.Options.S3-integration.preparing"></a>

開始する前に、使用するS3バケットを選択してください。また、許可を追加してRDS DBインスタンスがS3バケットにアクセスできるようにしてください。このアクセスを設定するには、IAMポリシーとIAMロールの両方を作成します。

## コンソール
<a name="Appendix.SQLServer.Options.S3-integration.preparing.console"></a>

**Amazon S3にアクセスするための IAM ポリシーを作成します。**

1. [IAMマネジメントコンソール](https://console.aws.amazon.com/iam/home?#home)のナビゲーションペインで、**ポリシー** を選択します。

1. 新しいポリシーを作成し、**ビジュアルエディタ**タブを使用して以下の手順を行ってください。

1. **サービス**のため、**S3**を入力して**S3**サービスを選択します。

1. **実行**のため，以下を選択してDBインスタンス要件にアクセスできるようにします。
   + `ListAllMyBuckets` – 必須
   + `ListBucket` – 必須
   + `GetBucketAcl` – 必須
   + `GetBucketLocation` – 必須
   + `GetObject` – S3 から にファイルをダウンロードする際に必須`D:\S3\`
   + `PutObject` – `D:\S3\` から S3 にファイルをアップロードする際に必須
   + `ListMultipartUploadParts` – `D:\S3\` から S3 にファイルをアップロードする際に必須
   + `AbortMultipartUpload` – `D:\S3\` から S3 にファイルをアップロードする際に必須

1. [**リソース**] では、表示されるオプションは、前の手順で選択した内容により異なります。[**バケット**]、[**オブジェクト**]、またはその両方に対するオプションが表示されます。それぞれ、適切な Amazon リソースネーム (ARN) を加えてください。

   [**バケット**] は、使用したいバケットに対する ARN を追加します。例えば、バケットの名前が *amzn-s3-demo-bucket* の場合、ARN を `arn:aws:s3:::amzn-s3-demo-bucket` に設定します。

   [**オブジェクト**] は、バケットの ARN を入力してから以下のいずれかを選択します。
   + 特定のバケット内のすべてのファイルへのアクセスを許可するには、[**バケット名**] および [**オブジェクト名**] の両方に対して [**すべて**] を選択してください。
   + バケット内の特定のファイルやフォルダへのアクセスを許可する場合は、SQL Server からのアクセスを希望する特定のバケットやオブジェクトに、ARN を提供します。

1. ポリシーの作成が完了するまで、コンソール内の指示に従ってください。

   前述の部分は、ポリシーの簡略設定ガイドです。IAM ポリシーを作成する詳細な手順については、*IAM ユーザーガイド*の [IAM ポリシーの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)を参照してください。

**前の手順からの IAM ポリシーを使用する IAM ロールを作成します。**

1. [[IAM 管理コンソール](https://console.aws.amazon.com/iam/home?#home)] で、ナビゲーションペインから [**ロール**] を選択します。

1. 新しい IAM ロールを作成し、コンソール内に表示された以下のオプションを選択してください。
   + **AWS サービス**
   + **RDS**
   + **RDS – ロールをデータベースに加える**

   次に、下部の [**次: 許可**] を選択します。

1. **アクセス権限ポリシーをアタッチする** で、事前に作成した IAM ポリシーの名前を入力してください。次にリストからポリシーを選択します。

1. ロールの作成が完了するまで、コンソール内の指示に従ってください。

   前述の部分は、ロールの簡略設定ガイドです。ロールを作成する詳細な手順については、*IAM ユーザーガイド*の [IAM ロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)を参照してください。

## AWS CLI
<a name="Appendix.SQLServer.Options.S3-integration.preparing.CLI"></a>

Amazon RDS に Amazon S3 バケットへのアクセスを付与するには、次のプロセスを使用します。

1. S3 バケットに Amazon RDS アクセスを付与する IAM ポリシーを作成します。

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

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

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

**IAM ポリシーを作成するには**

DB インスタンスが必要とするアクセスを付与するための適切なアクションが含まれるようにしてください。
+ `ListAllMyBuckets` – 必須
+ `ListBucket` – 必須
+ `GetBucketAcl` – 必須
+ `GetBucketLocation` – 必須
+ `GetObject` – S3 から にファイルをダウンロードする際に必須`D:\S3\`
+ `PutObject` – `D:\S3\` から S3 にファイルをアップロードする際に必須
+ `ListMultipartUploadParts` – `D:\S3\` から S3 にファイルをアップロードする際に必須
+ `AbortMultipartUpload` – `D:\S3\` から S3 にファイルをアップロードする際に必須

1. 以下の 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": [
   	            {
   	                "Effect": "Allow",
   	                "Action": "s3:ListAllMyBuckets",
   	                "Resource": "*"
   	            },
   	            {
   	                "Effect": "Allow",
   	                "Action": [
   	                    "s3:ListBucket",
   	                    "s3:GetBucketAcl",
   	                    "s3:GetBucketLocation"
   	                ],
   	                "Resource": "arn:aws:s3:::amzn-s3-demo-bucket"
   	            },
   	            {
   	                "Effect": "Allow",
   	                "Action": [
   	                    "s3:GetObject",
   	                    "s3:PutObject",
   	                    "s3:ListMultipartUploadParts",
   	                    "s3:AbortMultipartUpload"
   	                ],
   	                "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/key_prefix/*"
   	            }
   	        ]
   	    }'
   ```

   Windows の場合:

   インターフェイスでサポートされた改行コードに、必ず変更してください (`^`ではなく`\`)。また Windows では、すべてのダブルクオテーションを `\` にエスケープしてください。JSON のクオーツをエスケープしなくても済むようにするには、代わりにファイルに保存し、パラメータとしてパスします。

   最初に、以下の許可ポリシーで `policy.json` ファイルを作成してください。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "s3:ListAllMyBuckets",
               "Resource": "*"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "s3:ListBucket",
                   "s3:GetBucketACL",
                   "s3:GetBucketLocation"
               ],
               "Resource": "arn:aws:s3:::amzn-s3-demo-bucket"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "s3:GetObject",
                   "s3:PutObject",
                   "s3:ListMultipartUploadParts",
                   "s3:AbortMultipartUpload"
               ],
               "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/key_prefix/*"
           }
       ]
   }
   ```

------

   次のコマンドを使用してポリシーを作成します。

   ```
   aws iam create-policy ^
        --policy-name rds-s3-integration-policy ^
        --policy-document file://file_path/assume_role_policy.json
   ```

1. ポリシーが作成されたら、そのポリシーの Amazon リソースネーム (ARN) を書き留めます。この ARN は、後のステップで必要になります。

**IAM ロールを作成するには**
+ 次の AWS CLI コマンドでは、この目的で `rds-s3-integration-role` IAM ロールを作成します。  
**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"
  	       }
  	     ]
  	   }'
  ```

  Windows の場合:

  インターフェイスでサポートされた改行コードに、必ず変更してください (`^`ではなく`\`)。また Windows では、すべてのダブルクオテーションを `\` にエスケープしてください。JSON のクオーツをエスケープしなくても済むようにするには、代わりにファイルに保存し、パラメータとしてパスします。

  最初に、次のポリシーで、`assume_role_policy.json` ファイルを作成します。

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Principal": {
                  "Service": [
                      "rds.amazonaws.com"
                  ]
              },
              "Action": "sts:AssumeRole"
          }
      ]
  }
  ```

------

  次に、以下のコマンドを使用して IAM ロールを作成します。

  ```
  aws iam create-role ^
       --role-name rds-s3-integration-role ^
       --assume-role-policy-document file://file_path/assume_role_policy.json
  ```  
**Example グローバル条件コンテキストキーを使用した 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`を使用します。

  ポリシーでは、ロールにアクセスするリソースの完全な ARN を持つ `aws:SourceArn` グローバル条件コンテキストキーを必ず使用してください。S3 統合の場合、次の例に示すように DB インスタンスの ARN を必ず含めてください。

  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:SourceArn":"arn:aws:rds:Region:my_account_ID:db:db_instance_identifier"
                      }
                  }
  	       }
  	     ]
  	   }'
  ```

  Windows の場合:

  `assume_role_policy.json` にグローバル条件コンテキストキーを追加します。

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Principal": {
                  "Service": [
                      "rds.amazonaws.com"
                  ]
              },
              "Action": "sts:AssumeRole",
              "Condition": {
                  "StringEquals": {
                      "aws:SourceArn":"arn:aws:rds:Region:my_account_ID:db:db_instance_identifier"
                  }
              }
          }
      ]
  }
  ```

------

**IAM ポリシーを IAM ロールにアタッチするには**
+ 以下の AWS CLI コマンドでは、`rds-s3-integration-role` という名前のロールにこのポリシーをアタッチします。`your-policy-arn` を、以前のステップで書き留めたポリシー ARN に置き換えます。  
**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
  ```