

# Athena에서 Amazon S3 버킷에 대한 크로스 계정 액세스 구성
<a name="cross-account-permissions"></a>

일반적인 Amazon Athena 시나리오는 버킷 소유자와 다른 계정의 사용자가 쿼리를 수행할 수 있도록 액세스 권한을 부여하는 것입니다. 이 경우 버킷 정책을 사용하여 액세스를 부여합니다.

**참고**  
Athena에서 AWS Glue 데이터 카탈로그에 대해 계정 간 액세스를 적용하는 방법에 관한 자세한 내용은 [AWS Glue 데이터 카탈로그에 대한 크로스 계정 액세스 구성](security-iam-cross-account-glue-catalog-access.md) 단원을 참조하세요.

버킷 소유자가 생성하여 버킷 `s3://amzn-s3-demo-bucket`에 적용한 다음 예제 버킷 정책은 이와 다른 계정인 계정 `123456789123`의 모든 사용자에게 액세스를 부여합니다.

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Id": "MyPolicyID",
   "Statement": [
      {
          "Sid": "MyStatementSid",
          "Effect": "Allow",
          "Principal": {
             "AWS": "arn:aws:iam::123456789123:root"
          },
          "Action": [
             "s3:GetBucketLocation",
             "s3:GetObject",
             "s3:ListBucket",
             "s3:ListBucketMultipartUploads",
             "s3:ListMultipartUploadParts",
             "s3:AbortMultipartUpload"
          ],
          "Resource": [
             "arn:aws:s3:::amzn-s3-demo-bucket",
             "arn:aws:s3:::amzn-s3-demo-bucket/*"
          ]
       }
    ]
 }
```

------

계정의 특정 사용자에게 액세스를 부여하려면, `root` 대신 사용자를 지정하는 키로 `Principal` 키를 바꿉니다. 예를 들어 사용자 프로필 `Dave`의 경우 `arn:aws:iam::123456789123:user/Dave`를 사용합니다.

## 사용자 지정 AWS KMS 키로 암호화된 버킷에 대한 크로스 계정 액세스 구성
<a name="cross-account-permissions-kms"></a>

사용자 지정 AWS Key Management Service(AWS KMS) 키로 암호화된 Amazon S3 버킷이 있는 경우, 다른 Amazon Web Services 계정의 사용자에게 해당 버킷에 대한 액세스 권한을 부여해야 할 수 있습니다.

계정 A의 AWS KMS로 암호화된 버킷에 대한 액세스 권한을 계정 B의 사용자에게 부여하려면 다음 권한이 필요합니다.
+ 계정 A의 버킷 정책은 계정 B가 맡은 역할에 액세스 권한을 부여해야 합니다.
+ 계정 A의 AWS KMS 키 정책은 계정 B의 사용자가 맡은 역할에 액세스 권한을 부여해야 합니다.
+ 계정 B가 맡은 AWS Identity and Access Management(IAM) 역할은 계정 A의 버킷과 키 모두에 대한 액세스 권한을 부여해야 합니다.

다음 절차에서는 이러한 각 권한을 부여하는 방법에 대해 설명합니다.

**계정 A의 버킷에 대한 액세스 권한을 계정 B의 사용자에게 부여하려면**
+ 계정 A에서 [S3 버킷 정책을 검토하고](https://docs.aws.amazon.com/AmazonS3/latest/userguide/add-bucket-policy.html) 계정 B의 계정 ID에서 액세스할 수 있도록 허용하는 문이 있는지 확인합니다.

  예를 들어 다음 버킷 정책은 `s3:GetObject`에 계정 ID `111122223333`에 대한 액세스를 허용합니다.

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

****  

  ```
  {
    "Id": "ExamplePolicy1",
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Sid": "ExampleStmt1",
        "Action": [
          "s3:GetObject"
        ],
        "Effect": "Allow",
        "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
        "Principal": {
          "AWS": [
            "111122223333"
          ]
        }
      }
    ]
  }
  ```

------

**계정 A의 AWS KMS 키 정책에서 계정 B의 사용자에게 액세스 권한을 부여하려면**

1. 계정 A의 AWS KMS 키 정책에서 계정 B가 맡은 역할에 다음 작업에 대한 권한을 부여합니다.
   +  `kms:Encrypt` 
   +  `kms:Decrypt` 
   +  `kms:ReEncrypt*` 
   +  `kms:GenerateDataKey*` 
   +  `kms:DescribeKey` 

   다음 예제에서는 하나의 IAM 역할에만 키 액세스 권한을 부여합니다.

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "AllowUseOfTheKey",
               "Effect": "Allow",
               "Principal": {
                   "AWS": "arn:aws:iam::111122223333:role/role_name"
               },
               "Action": [
                   "kms:Encrypt",
                   "kms:Decrypt",
                   "kms:ReEncrypt*",
                   "kms:GenerateDataKey*",
                   "kms:DescribeKey"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------

1. 계정 A에서 [AWS Management Console 정책 보기](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying.html#key-policy-modifying-how-to-console-policy-view)를 사용하여 키 정책을 검토합니다.

1. 키 정책에서 다음 문에 계정 B가 보안 주체로 나열되어 있는지 확인합니다.

   ```
   "Sid": "Allow use of the key" 
   ```

1. `"Sid": "Allow use of the key"` 문이 없으면 다음 단계를 수행하세요.

   1. [콘솔 기본 보기를 사용하여](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying.html#key-policy-modifying-how-to-console-default-view) 키 정책을 보도록 전환합니다.

   1.  계정 B의 계정 ID를 키에 대한 액세스 권한이 있는 외부 계정으로 추가합니다.

**계정 B가 맡은 IAM 역할에서 계정 A의 버킷 및 키에 대한 액세스 권한을 부여하려면**

1. 계정 B에서 IAM 콘솔을 엽니다([https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)).

1. 계정 B에서 사용자와 연결된 IAM 역할을 엽니다.

1. IAM 역할에 적용된 권한 정책 목록을 검토합니다.

1. 버킷에 대한 액세스 권한을 부여하는 정책이 적용되었는지 확인합니다.

   다음 예제 문은 IAM 역할에 버킷 `amzn-s3-demo-bucket`의 `s3:GetObject` 및 `s3:PutObject` 작업에 대한 액세스 권한을 부여합니다.

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "ExampleStmt2",
         "Action": [
           "s3:GetObject",
           "s3:PutObject"
         ],
         "Effect": "Allow",
         "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*"
       }
     ]
   }
   ```

------

1. 키에 대한 액세스 권한을 부여하는 정책이 적용되었는지 확인합니다.
**참고**  
계정 B가 맡은 IAM 역할에 이미 [관리자 액세스](https://docs.aws.amazon.com/IAM/latest/UserGuide/getting-started_create-admin-group.html) 권한이 있으면 사용자의 IAM 정책에서 키에 대한 액세스 권한을 부여할 필요가 없습니다.

   다음 예제 문은 IAM 역할에 `arn:aws:kms:us-west-2:123456789098:key/111aa2bb-333c-4d44-5555-a111bb2c33dd` 키를 사용할 수 있는 액세스 권한을 부여합니다.

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "ExampleStmt3",
         "Action": [
           "kms:Decrypt",
           "kms:DescribeKey",
           "kms:Encrypt",
           "kms:GenerateDataKey",
           "kms:ReEncrypt*"
         ],
         "Effect": "Allow",
         "Resource": "arn:aws:kms:us-west-2:123456789098:key/111aa2bb-333c-4d44-5555-a111bb2c33dd"
       }
     ]
   }
   ```

------

## 버킷 객체에 대한 크로스 계정 액세스 구성
<a name="cross-account-permissions-objects"></a>

버킷의 소유 계정(계정 A) 이외의 계정(계정 C)에서 업로드한 객체에는 쿼리 계정(계정 B)에 읽기 액세스 권한을 부여하는 명시적인 객체 수준 ACL이 필요할 수 있습니다. 이러한 요구 사항을 피하려면 계정 C가 계정 A의 버킷에 객체를 배치하기 전에 계정 A의 역할을 맡아야 합니다. 자세한 내용은 [Amazon S3 버킷에 있는 객체에 대한 교차 계정 액세스 권한을 제공하려면 어떻게 해야 합니까?](https://aws.amazon.com/premiumsupport/knowledge-center/cross-account-access-s3/)를 참조하세요.