

# S3 Tables SSE-KMS 암호화에 대한 권한 요구 사항
<a name="s3-tables-kms-permissions"></a>

S3 테이블 버킷의 테이블에 대해 AWS Key Management Service(AWS KMS) 키(SSE-KMS)를 통한 서버 측 암호화를 사용하는 경우 계정의 다양한 ID에 권한을 부여해야 합니다. 최소한 액세스 ID와 S3 Tables 유지 관리 위탁자가 키에 대한 액세스 권한을 가져야 하며 사용 사례에 따라 다른 권한도 필요합니다.

**필수 권한**   
KMS 키로 암호화된 테이블에 액세스하려면 해당 키에 대한 다음 권한이 필요합니다.  
+ `kms:GenerateDataKey`
+ `kms:Decrypt`
테이블에서 SSE-KMS를 사용하려면 Amazon S3 Tables 유지 관리 서비스 위탁자(`maintenance.s3tables.amazonaws.com`)에게 키에 대한 `kms:GenerateDataKey` 및 `kms:Decrypt` 권한이 필요합니다.

**추가 권한**  
사용 사례에 따라 다음과 같은 추가 권한이 필요합니다.  
+ **AWS 분석 서비스 및 직접 액세스 권한** - AWS 분석 서비스 또는 S3 테이블에 직접 액세스하는 타사 엔진을 통해 SSE-KMS 암호화된 테이블로 작업하는 경우 사용하는 IAM 역할에 KMS 키를 사용할 수 있는 권한이 필요합니다.
+ **Lake Formation이 활성화된 권한** - 액세스 제어를 위해 AWS Lake Formation에 옵트인한 경우 Lake Formation 서비스 역할에 KMS 키를 사용할 수 있는 권한이 필요합니다.
+ **S3 Metadata 테이블에 대한 권한** - S3 Metadata 테이블에 SSE-KMS 암호화를 사용하는 경우 S3 Metadata 서비스 위탁자(`metadata.s3.amazonaws.com`)에게 KMS 키에 대한 액세스 권한을 제공해야 합니다. 이렇게 하면 S3 Metadata가 암호화된 테이블을 업데이트하여 최신 데이터 변경 사항을 반영할 수 있습니다.

**참고**  
교차 계정 KMS 키의 경우 IAM 역할에 키 액세스 권한과 키 정책 내 명시적 권한 부여가 모두 필요합니다. KMS 키의 교차 계정 권한에 대한 자세한 내용은 *AWS Key Management Service 서비스 개발자 안내서*의 [외부 AWS 계정에서 KMS 키를 사용하도록 허용](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying-external-accounts.html#cross-account-console)을 참조하세요.

**Topics**
+ [S3 Tables 유지 관리 서비스 위탁자에게 KMS 키 권한 부여](#tables-kms-maintenance-permissions)
+ [IAM 위탁자에게 통합 AWS 분석 서비스에서 암호화된 테이블에 대한 작업을 수행할 수 있는 권한 부여](#tables-kms-integration-permissions)
+ [Lake Formation이 활성화된 경우 암호화된 테이블을 사용할 수 있도록 IAM 위탁자에게 권한을 부여합니다.](#tables-kms-lf-permissions)
+ [S3 Metadata 서비스 위탁자에게 KMS 키를 사용할 수 있는 권한 부여](#tables-kms-metadata-permissions)

## S3 Tables 유지 관리 서비스 위탁자에게 KMS 키 권한 부여
<a name="tables-kms-maintenance-permissions"></a>

이 권한은 SSE-KMS로 암호화된 테이블을 생성하고 암호화된 테이블에서 압축, 스냅샷 관리 및 참조되지 않은 파일 제거와 같은 자동 테이블 유지 관리를 수행할 수 있도록 하는 데 필요합니다.

**참고**  
SSE-KMS로 암호화된 테이블을 생성하도록 요청할 때마다 S3 Tables는 `maintenance.s3tables.amazonaws.com` 위탁자에게 KMS 키에 대한 액세스 권한이 있는지 확인합니다. 이 확인을 수행하기 위해 테이블 버킷에 0바이트 객체가 일시적으로 생성되며, 이 객체는 [참조되지 않은 파일 제거](s3-table-buckets-maintenance.md#s3-table-bucket-maintenance-unreferenced) 유지 관리 작업에 의해 자동으로 제거됩니다. 암호화를 위해 지정한 KMS 키에 유지 관리 액세스 권한이 없는 경우 createTable 작업이 실패합니다.

SSE-KMS로 암호화된 테이블에 대한 유지 관리 액세스 권한을 부여하려면 다음 예제 키 정책을 사용할 수 있습니다. 이 정책에서는 `maintenance.s3tables.amazonaws.com` 서비스 위탁자에게 특정 테이블 버킷의 테이블 암호화 및 복호화에 특정 KMS 키를 사용할 수 있는 권한이 부여되어 있습니다. 이 정책을 사용하려면 {{사용자 입력 자리 표시자}}를 실제 정보로 바꿉니다.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "EnableKeyUsage",
            "Effect": "Allow",
            "Principal": {
                "Service": "maintenance.s3tables.amazonaws.com"            
            },
            "Action": [
                "kms:GenerateDataKey",
                "kms:Decrypt"
            ],
            "Resource": "arn:aws:kms:{{us-east-1}}:{{111122223333}}:key/{{key-id}}",
            "Condition": {
                "StringLike": {
                    "kms:EncryptionContext:aws:s3:arn":"{{<table-or-table-bucket-arn>}}/*"
                }
            }
        }
    ]
}
```

------

## IAM 위탁자에게 통합 AWS 분석 서비스에서 암호화된 테이블에 대한 작업을 수행할 수 있는 권한 부여
<a name="tables-kms-integration-permissions"></a>

AWS 분석 서비스에서 S3 테이블을 사용하려면 테이블 버킷을 통합해야 합니다. 이 통합을 통해 AWS 분석 서비스가 테이블 데이터를 자동으로 검색하고 액세스할 수 있습니다. 통합에 대한 자세한 내용은 [AWS 분석 서비스와 Amazon S3 Tables 통합](s3-tables-integrating-aws.md) 섹션을 참조하세요.

AWS 분석 서비스 또는 S3 테이블에 직접 액세스하는 타사 및 오픈 소스 엔진을 통해 SSE-KMS 암호화된 테이블로 작업하는 경우 사용하는 IAM 역할에는 암호화 작업에 AWS KMS 키를 사용할 수 있는 권한이 필요합니다.

역할에 연결된 IAM 정책 또는 KMS 키 정책을 통해 KMS 키 액세스 권한을 부여할 수 있습니다.

------
#### [ IAM policy ]

KMS 키 액세스를 허용하려면 쿼리에 사용하는 IAM 역할에 이 인라인 정책을 연결합니다. KMS 키 ARN을 본인의 ARN으로 바꿉니다.

```
{
    "Version":"2012-10-17",		 	 	 ,                    
    "Statement": [
        {
            "Sid": "AllowKMSKeyUsage",
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt",
                "kms:GenerateDataKey"
            ],
            "Resource": "arn:aws:kms:us-west-2:{{111122223333}}:key/{{1234abcd-12ab-34cd-56ef-1234567890ab}}"
        }
    ]
}
```

------
#### [ KMS key policy ]

또는 지정된 IAM 역할이 키를 사용할 수 있도록 이 명령을 KMS 키 정책에 추가하세요. 역할 ARN을 쿼리에 사용하는 IAM 역할로 바꿉니다.

```
{
    "Sid": "Allow use of the key",
    "Effect": "Allow",
    "Principal": {
        "AWS": [
            "arn:aws:iam::{{<catalog-account-id>}}:role/{{<role-name>}}"
        ]
    },
    "Action": [
        "kms:Decrypt",
        "kms:GenerateDataKey",
    ],
    "Resource": "*"
}
```

------

## Lake Formation이 활성화된 경우 암호화된 테이블을 사용할 수 있도록 IAM 위탁자에게 권한을 부여합니다.
<a name="tables-kms-lf-permissions"></a>

S3 Tables 통합에 대한 액세스 제어를 위해 AWS Lake Formation에 옵트인한 경우 Lake Formation 서비스 역할에는 암호화 작업에 AWS KMS 키를 사용할 수 있는 권한이 필요합니다. Lake Formation은 이 역할을 사용하여 테이블에 액세스하는 위탁자를 대신하여 자격 증명을 제공합니다.

다음 KMS 키 정책 예시는 Lake Formation 서비스 역할에 사용자 계정의 특정 KMS 키를 암호화 작업에 사용할 수 있는 권한을 부여합니다. 자리 표시자 값을 해당 값으로 바꿉니다.

```
{
  "Sid": "AllowTableRoleAccess",
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::{{111122223333}}:role/service-role/S3TablesRoleForLakeFormation"
  },
  "Action": [
      "kms:GenerateDataKey", 
      "kms:Decrypt"
  ],
  "Resource": "{{<kms-key-arn>}}"
}
```

## S3 Metadata 서비스 위탁자에게 KMS 키를 사용할 수 있는 권한 부여
<a name="tables-kms-metadata-permissions"></a>

Amazon S3가 SSE-KMS로 암호화된 메타데이터 테이블을 업데이트하고 해당 메타데이터 테이블에 대한 유지 관리를 수행하도록 허용하려면 다음 예제 키 정책을 사용할 수 있습니다. 이 정책에서는 `metadata.s3.amazonaws.com` 및 `maintenance.s3tables.amazonaws.com` 서비스 위탁자가 특정 키를 사용하여 특정 테이블 버킷의 테이블을 암호화하고 복호화하도록 허용합니다. 이 정책을 사용하려면 {{사용자 입력 자리 표시자}}를 실제 정보로 바꿉니다.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "EnableKeyUsage",
            "Effect": "Allow",
            "Principal": {
                "Service": [
                    "maintenance.s3tables.amazonaws.com",
                    "metadata.s3.amazonaws.com"
                ]           
            },
            "Action": [
                "kms:GenerateDataKey",
                "kms:Decrypt"
            ],
            "Resource": "{{arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab}}",
            "Condition": {
                "StringLike": {
                    "kms:EncryptionContext:aws:s3:arn":"{{<table-or-table-bucket-arn>}}/*"
                }
            }
        }
    ]
}
```

------