

# 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 Management Console](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 Management Console](https://console.aws.amazon.com/iam/home?#home)의 탐색 창에서 **역할**을 선택합니다.

1. 새 IAM 역할을 생성하고 콘솔에 표시되는 다음 옵션을 선택하십시오.
   + **AWS 서비스**
   + **RDS**
   + **RDS – Add Role to Database(데이터베이스에 역할 추가**

   그런 다음 하단의 **다음: 권한**을 선택합니다.

1. **Attach permissions policies(권한 정책 연결)**에 이전에 생성한 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. Amazon RDS에 S3 버킷 액세스 권한을 부여하는 IAM 정책을 생성합니다.

1. Amazon RDS가 S3 버킷에 액세스하기 위해 사용자 대신 가정할 수 있는 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**  

   대상 LinuxmacOS, 또는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**  

  대상 LinuxmacOS, 또는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`를 사용하세요.

  정책에서는 역할에 액세스하는 리소스의 전체 Amazon 리소스 이름(ARN)이 포함된 `aws:SourceArn` 전역 조건 컨텍스트 키를 사용해야 합니다. S3 통합의 경우 다음 예와 같이 DB 인스턴스 ARN을 포함해야 합니다.

  대상 LinuxmacOS, 또는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**  

  대상 LinuxmacOS, 또는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
  ```