

# S3 Tables의 보안
<a name="s3-tables-security-overview"></a>

 Amazon S3은 다양한 보안 기능 및 도구를 제공합니다. 다음은 S3 Tables에서 지원하는 이러한 기능 및 도구의 목록입니다. 이러한 도구를 올바르게 적용하면 리소스를 보호하고 의도한 사용자만 리소스에 액세스하도록 할 수 있습니다.

**ID 기반 정책**  
[자격 증명 기반 정책](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_identity-vs-resource.html)은 IAM 사용자, 그룹 또는 역할에 연결됩니다. ID 기반 정책을 사용하여 테이블 버킷이나 테이블에 대한 IAM ID 액세스 권한을 부여할 수 있습니다. 기본적으로 사용자 및 역할에는 테이블 및 테이블 버킷을 생성하고 수정할 수 있는 권한이 없습니다. 이들은 S3 콘솔, AWS CLI 또는 Amazon S3 REST API를 사용해서도 작업을 수행할 수 없습니다. 내 계정으로 IAM 사용자, 그룹, 역할을 만들고 액세스 정책을 연결할 수 있습니다. 그런 다음 리소스에 대한 액세스 권한을 부여할 수 있습니다. 테이블 버킷 및 테이블을 생성하고 액세스하려면 IAM 관리자가 AWS Identity and Access Management(IAM) 역할 또는 사용자에게 필요한 권한을 부여해야 합니다. 자세한 내용은 [Access management for S3 Tables](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-setting-up.html)을 참조하세요.

**리소스 기반 정책**  
[리소스 기반 정책](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_identity-vs-resource.html)은 리소스에 연결됩니다. 테이블 버킷 및 테이블에 대한 리소스 기반 정책을 생성할 수 있습니다. 테이블 버킷 정책을 사용하여 테이블 버킷 및 네임스페이스 수준 API 액세스 권한을 제어할 수 있습니다. 또한 테이블 버킷 정책을 사용하여 버킷의 여러 테이블에 대한 테이블 수준 API 권한을 제어할 수 있습니다. 정책 정의에 따라 버킷에 연결된 권한이 버킷의 모든 테이블 또는 특정 테이블에 적용될 수 있습니다. 또한 테이블 정책을 사용하여 버킷의 개별 테이블에 테이블 수준 API 액세스 권한을 부여할 수 있습니다.

S3 Tables이 테이블 버킷 작업 또는 테이블 작업을 수행하기 위한 요청을 수신하면 먼저 요청자에게 필요한 권한이 있는지 확인합니다. 요청을 승인할지 결정할 때 모든 관련 액세스 정책, 사용자 정책 및 리소스 기반 정책(IAM 사용자 정책, IAM 역할 정책, 테이블 버킷 정책 및 테이블 정책)을 평가합니다. 테이블 버킷 정책 및 테이블 정책을 사용하면 리소스에 대한 액세스를 개인 맞춤화하여 승인한 ID만 리소스에 액세스하고 해당 리소스에 대한 작업을 수행할 수 있도록 할 수 있습니다. 자세한 내용은 [Access management for S3 Tables](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-setting-up.html)을 참조하세요.

**S3 Tables에 대한 AWS Organizations 서비스 제어 정책(SCP)**  
서비스 제어 정책(SCP)에서 Amazon S3 Tables을 사용하여 조직의 사용자에 대한 권한을 관리할 수 있습니다. IAM 및 리소스 정책과 마찬가지로 모든 테이블 및 버킷 수준 작업은 정책에서 `s3tables` 네임스페이스의 일부로 참조됩니다. 자세한 내용은 *AWS Organizations 사용 설명서*의 [서비스 제어 정책(SCP)](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html)을 참조하세요.

**Topics**
+ [암호화로 S3 테이블 데이터 보호](s3-tables-encryption.md)
+ [S3 Tables의 액세스 관리](s3-tables-setting-up.md)
+ [S3 Tables의 VPC 연결](s3-tables-VPC.md)
+ [S3 Tables의 보안 고려 사항 및 제한 사항](s3-tables-restrictions.md)

# 암호화로 S3 테이블 데이터 보호
<a name="s3-tables-encryption"></a>

# 테이블 버킷에서 AWS KMS 키(SSE-KMS)를 사용한 서버 측 암호화 사용
<a name="s3-tables-kms-encryption"></a>

**Topics**
+ [테이블 및 테이블 버킷에서 SSE-KMS의 작동 방식](#kms-tables-how)
+ [테이블 및 테이블 버킷에 대한 SSE-KMS 사용 적용 및 범위 지정](tables-require-kms.md)
+ [테이블 및 테이블 버킷에 대한 SSE-KMS 암호화 모니터링 및 감사](#kms-tables-audit)
+ [S3 Tables SSE-KMS 암호화에 대한 권한 요구 사항](s3-tables-kms-permissions.md)
+ [테이블 버킷에서 AWS KMS 키(SSE-KMS)를 사용한 서버 측 암호화 지정](s3-tables-kms-specify.md)

테이블 버킷에는 Amazon S3 관리형 키(SSE-S3)를 통한 서버 측 암호화를 사용하여 테이블을 자동으로 암호화하는 기본 암호화 구성이 있습니다. 이 암호화는 S3 테이블 버킷의 모든 객체에 적용되며 무료로 제공됩니다.

키 교체 및 액세스 정책 권한 부여 관리와 같이 암호화 키를 더 세밀하게 제어해야 하는 경우 AWS Key Management Service(AWS KMS) 키(SSE-KMS)를 통한 서버 측 암호화를 사용하도록 테이블 버킷을 구성할 수 있습니다. AWS KMS 내 보안 관리가 암호화 관련 규정 준수 요구 사항을 충족하는 데 도움이 될 수 있습니다. SSE-KMS에 대한 자세한 내용은 [AWS KMS 키를 사용한 서버 측 암호화(SSE-KMS) 사용](UsingKMSEncryption.md) 단원을 참조하십시오.

## 테이블 및 테이블 버킷에서 SSE-KMS의 작동 방식
<a name="kms-tables-how"></a>

테이블 버킷의 SSE-KMS는 다음과 같은 측면에서 범용 버킷의 SSE-KMS와 다릅니다.
+ 테이블 버킷 및 개별 테이블에 대해 암호화 설정을 지정할 수 있습니다.
+ SSE-KMS에서는 고객 관리형 키만 사용할 수 있습니다. AWS 관리형 키는 지원되지 않습니다.
+ 특정 역할 및 AWS 서비스 위탁자에게 AWS KMS 키에 액세스할 수 있는 권한을 부여해야 합니다. 자세한 내용은 [S3 Tables SSE-KMS 암호화에 대한 권한 요구 사항](s3-tables-kms-permissions.md) 섹션을 참조하세요. 여기에는 다음과 같은 권한 부여가 포함됩니다.
  + S3 유지 관리 위탁자 - 암호화된 테이블 유지 관리
  + S3 Tables 통합 역할 - AWS 분석 서비스에서 암호화된 테이블에 대한 작업 수행
  + 클라이언트 액세스 역할 - Apache Iceberg 클라이언트에서 암호화된 테이블에 직접 액세스
  + S3 메타데이터 위탁자 - 암호화된 S3 메타데이터 테이블 업데이트
+ 암호화된 테이블은 SSE-KMS로 암호화된 테이블을 더 비용 효율적으로 사용하기 위해 AWS KMS에 대한 요청 수를 최소화하는 테이블 수준 키를 사용합니다.

**테이블 버킷에 대한 SSE-KMS 암호화**  
테이블 버킷을 생성할 때 SSE-KMS를 기본 암호화 유형으로 선택하고 암호화에 사용할 특정 KMS 키를 선택할 수 있습니다. 해당 버킷 내에 생성된 모든 테이블은 테이블 버킷에서 이러한 암호화 설정을 자동으로 상속합니다. AWS CLI, S3 API 또는 AWS SDK를 사용하여 언제든지 테이블 버킷의 기본 암호화 설정을 수정하거나 제거할 수 있습니다. 테이블 버킷의 암호화 설정을 수정할 때 그러한 설정은 해당 버킷에서 생성된 새 테이블에만 적용됩니다. 기존 테이블에 대한 암호화 설정은 변경되지 않습니다. 자세한 내용은 [테이블 버킷에 대한 암호화 지정](s3-tables-kms-specify.md#specify-kms-table-bucket) 섹션을 참조하세요.

**테이블에 대한 SSE-KMS 암호화**  
버킷의 기본 암호화 구성에 관계없이 다른 KMS 키로 개별 테이블을 암호화하는 옵션도 있습니다. 개별 테이블에 대한 암호화를 설정하려면 테이블 생성 시 원하는 암호화 키를 지정해야 합니다. 기존 테이블의 암호화를 변경하려면 원하는 키로 테이블을 생성하고 이전 테이블에서 새 테이블로 데이터를 복사해야 합니다. 자세한 내용은 [테이블에 대한 암호화 지정](s3-tables-kms-specify.md#specify-kms-table) 섹션을 참조하세요.

AWS KMS 암호화를 사용하는 경우 S3 Tables는 각 테이블과 연결된 새 객체를 암호화하는 고유한 테이블 수준 데이터 키를 자동으로 생성합니다. 이러한 키는 제한된 기간 동안 사용되므로 암호화 작업 중 추가 AWS KMS 요청의 필요성이 최소화되고 암호화 비용이 절감됩니다. 이는 [SSE-KMS용 S3 버킷 키](bucket-key.md#bucket-key-overview)와 비슷합니다.

# 테이블 및 테이블 버킷에 대한 SSE-KMS 사용 적용 및 범위 지정
<a name="tables-require-kms"></a>

S3 Tables 리소스 기반 정책, KMS 키 정책, IAM ID 기반 정책 또는 이들의 조합을 사용하여 S3 테이블 및 테이블 버킷에 대한 SSE-KMS 사용을 적용할 수 있습니다. 테이블의 ID 및 리소스 정책에 대한 자세한 내용은 [S3 Tables의 액세스 관리](s3-tables-setting-up.md) 섹션을 참조하세요. 키 정책 작성에 대한 자세한 내용은 *AWS Key Management Service 개발자 안내서*의 [키 정책](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html)을 참조하세요. 다음 예제에서는 정책을 사용하여 SSE-KMS를 적용하는 방법을 보여줍니다.

## 테이블 버킷 정책을 통해 모든 테이블에 SSE-KMS 사용 적용
<a name="w2aac20c35c15b3c11b5b1"></a>

이는 사용자가 특정 AWS KMS 키로 테이블을 암호화하지 않는 한 특정 테이블 버킷에 테이블을 생성하지 못하도록 하는 테이블 버킷 정책의 예입니다. 이 정책을 사용하려면 *사용자 입력 자리 표시자*를 실제 정보로 바꿉니다.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "EnforceKMSEncryption",
      "Effect": "Deny",
      "Principal": "*",
      "Action": [
        "s3tables:CreateTable"
      ],
      "Resource": [
        "arn:aws:s3tables:us-west-2:111122223333:bucket/example-table-bucket/*"
      ],
      "Condition": {
        "StringNotEquals": {
          "s3tables:sseAlgorithm": "aws:kms",
          "s3tables:kmsKeyArn": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
        }
      }
    }
  ]
}
```

------

## IAM 정책을 사용하여 사용자에게 SSE-KMS 암호화 사용 요구
<a name="w2aac20c35c15b3c11b7b1"></a>

이 IAM ID 정책은 사용자가 S3 Tables 리소스를 생성하거나 구성할 때 암호화에 특정 AWS KMS 키를 사용하도록 요구합니다. 이 정책을 사용하려면 *사용자 입력 자리 표시자*를 실제 정보로 바꿉니다.

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "RequireKMSKeyOnTables",
      "Action": [
          "s3tables:CreateTableBucket",
          "s3tables:PutTableBucketEncryption",
          "s3tables:CreateTable"
      ]
      "Effect": "Deny",
      "Resource": "*",
      "Condition": {
        "StringNotEquals": {
            "s3tables:sseAlgorithm": "aws:kms",
            "s3tables:kmsKeyArn": "<key_arn>"
        }
      }
    }
  ]
}
```

## KMS 키 정책을 사용하여 키 사용을 특정 테이블 버킷으로 제한
<a name="w2aac20c35c15b3c11b9b1"></a>

이 예제 KMS 키 정책은 특정 사용자가 특정 테이블 버킷의 암호화 작업에만 키를 사용할 수 있도록 허용합니다. 이 유형의 정책은 교차 계정 시나리오에서 키에 대한 액세스를 제한하는 데 유용합니다. 이 정책을 사용하려면 *사용자 입력 자리 표시자*를 실제 정보로 바꿉니다.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Id": "Id",
  "Statement": [
    {
      "Sid": "AllowPermissionsToKMS",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:root"
      },
      "Action": [
        "kms:GenerateDataKey",
        "kms:Decrypt"
      ],
      "Resource": "*",
      "Condition": {
        "StringLike": {
          "kms:EncryptionContext:aws:s3:arn": "<table-bucket-arn>/*"
        }
      }
    }
  ]
}
```

------

## 테이블 및 테이블 버킷에 대한 SSE-KMS 암호화 모니터링 및 감사
<a name="kms-tables-audit"></a>

AWS CloudTrail 로그를 사용하여 SSE-KMS 암호화 데이터의 AWS KMS 키 사용을 감사할 수 있습니다. `GenerateDataKey` 및 `Decrypt`와 같은 [암호화 작업](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#cryptographic-operations)에 대한 인사이트를 얻을 수 있습니다. CloudTrail은 이벤트 이름, 사용자 이름, 이벤트 소스 등 검색 필터링을 위한 다양한 [속성 값](https://docs.aws.amazon.com/awscloudtrail/latest/APIReference/API_LookupEvents.html)을 지원합니다.

CloudTrail 이벤트를 사용하여 Amazon S3 테이블 및 테이블 버킷에 대한 기본 암호화 구성 요청을 추적할 수 있습니다. CloudTrail 로그에 사용되는 API 이벤트 이름은 다음과 같습니다.
+ `s3tables:PutTableBucketEncryption`
+ `s3tables:GetTableBucketEncryption`
+ `s3tables:DeleteTableBucketEncryption`
+ `s3tables:GetTableEncryption`
+ `s3tables:CreateTable`
+ `s3tables:CreateTableBucket`

**참고**  
테이블 버킷에는 EventBridge가 지원되지 않습니다.

# 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 분석 서비스에서 SSE-KMS로 암호화된 테이블에 대한 작업을 수행하는 경우 통합 역할에 KMS 키를 사용할 수 있는 권한이 필요합니다.
+ **직접 액세스 권한** - Amazon S3 Tables Iceberg REST 엔드포인트 또는 Amazon S3 Tables Catalog for Apache Iceberg와 같은 방법을 통해 SSE-KMS로 암호화된 테이블로 직접 작업하는 경우 클라이언트가 사용하는 IAM 역할에 키에 대한 액세스 권한을 부여해야 합니다.
+ **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)
+ [IAM 위탁자에게 암호화된 테이블로 직접 작업할 수 있는 권한 부여](#tables-kms-direct-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 테이블에 대한 작업을 수행하려면 테이블 버킷을 Amazon SageMaker Lakehouse와 통합하세요. 이 통합을 통해 AWS 분석 서비스가 테이블 데이터를 자동으로 검색하고 액세스할 수 있습니다. 통합에 대한 자세한 내용은 [AWS 분석 서비스와 Amazon S3 Tables 통합](s3-tables-integrating-aws.md) 섹션을 참조하세요.

이러한 서비스에서 SSE-KMS로 암호화된 테이블에 대한 작업을 수행하려면 사용하는 역할이 암호화 작업에 AWS KMS 키를 사용할 수 있는 권한을 가져야 합니다. 이러한 권한을 통합 중에 생성된 `S3TablesRoleForLakeFormation` 역할 또는 자체 IAM 역할에 적용할 수 있습니다.

다음 인라인 IAM 정책 예제는 계정에서 암호화 작업에 특정 KMS 키를 사용할 수 있는 권한을 `S3TablesRoleForLakeFormation` 서비스 역할에 부여하는 데 사용할 수 있습니다. 이 정책을 사용하려면 *입력 자리 표시자 값*을 실제 값으로 바꿉니다.

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

## IAM 위탁자에게 암호화된 테이블로 직접 작업할 수 있는 권한 부여
<a name="tables-kms-direct-permissions"></a>

서드파티 또는 직접 액세스 방법을 사용하여 암호화된 테이블로 작업하는 경우 사용하는 역할에 KMS 키에 대한 액세스 권한을 부여해야 합니다. 다음 예제에서는 IAM 정책 또는 KMS 키 정책을 통해 액세스 권한을 부여하는 방법을 보여줍니다.

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

이 인라인 정책을 IAM 역할에 연결하여 KMS 키 액세스를 허용합니다. 이 정책을 사용하려면 *입력 자리 표시자 값*을 실제 KMS 키 ARN으로 바꿉니다.

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

****  

```
{
    "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 ]

지정된 AWS KMS 역할이 키를 사용할 수 있도록 이 인라인 정책을 KMS 키에 연결합니다. 이 정책을 사용하려면 *입력 자리 표시자 값*을 실제 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": "*"
}
```

------

## 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>/*"
                }
            }
        }
    ]
}
```

------

# 테이블 버킷에서 AWS KMS 키(SSE-KMS)를 사용한 서버 측 암호화 지정
<a name="s3-tables-kms-specify"></a>

모든 Amazon S3 테이블 버킷에는 기본적으로 암호화가 구성되어 있으며, 테이블 버킷에 생성된 새 테이블은 모두 저장 시 자동으로 암호화됩니다. Amazon S3 관리형 키(SSE-S3)를 사용한 서버 측 암호화가 모든 테이블 버킷의 기본 암호화 구성입니다. 다른 암호화 유형을 지정하려는 경우 AWS Key Management Service(AWS KMS) 키(SSE-KMS)를 통한 서버 측 암호화를 사용할 수 있습니다.

 `CreateTableBucket` 또는 `CreateTable` 요청에서 SSE-KMS 암호화를 지정하거나 `PutTableBucketEncryption` 요청의 테이블 버킷에서 기본 암호화 구성을 설정할 수 있습니다.

**중요**  
SSE-KMS로 암호화된 테이블 및 테이블 버킷에 대한 자동 유지 관리를 허용하려면 maintenance.s3tables.amazonaws.com 서비스 위탁자에게 KMS 키를 사용할 수 있는 권한을 부여해야 합니다. 자세한 내용은 [S3 Tables SSE-KMS 암호화에 대한 권한 요구 사항](s3-tables-kms-permissions.md) 섹션을 참조하세요.

## 테이블 버킷에 대한 암호화 지정
<a name="specify-kms-table-bucket"></a>

새 테이블 버킷을 생성할 때 SSE-KMS를 기본 암호화 유형으로 지정할 수 있습니다. 관련 예제는 [테이블 버킷 생성](s3-tables-buckets-create.md) 섹션을 참조하세요. 테이블 버킷을 생성한 후 REST API 작업, AWS SDK 및 AWS Command Line Interface(AWS CLI)를 사용하여 SSE-KMS 사용을 기본 암호화 설정으로 지정할 수 있습니다.

**참고**  
 SSE-KMS를 기본 암호화 유형으로 지정하는 경우 암호화에 사용하는 키가 S3 Tables 유지 관리 서비스 위탁자에게 액세스를 허용해야 합니다. 유지 관리 서비스 위탁자에게 액세스 권한이 없는 경우 해당 테이블 버킷에 테이블을 생성할 수 없습니다. 자세한 내용은 [S3 Tables 유지 관리 서비스 위탁자에게 KMS 키 권한 부여](s3-tables-kms-permissions.md#tables-kms-maintenance-permissions) 섹션을 참조하세요.

### AWS CLI 사용
<a name="w2aac20c35c15b3c17b9b9b1"></a>

다음 예제 AWS CLI 명령을 사용하려면 *사용자 입력 자리 표시자*를 실제 정보로 바꿉니다.

```
aws s3tables put-table-bucket-encryption \
    --table-bucket-arn arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-table-bucket; \
    --encryption-configuration '{
        "sseAlgorithm": "aws:kms",
        "kmsKeyArn": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
    }' \
    --region us-east-1
```

[DeleteTableBucketEncryption](https://docs.aws.amazon.com/AmazonS3/latest/API/API_s3TableBuckets_DeleteTableBucketEncryption.html) API 작업을 사용하여 테이블 버킷의 기본 암호화 설정을 제거할 수 있습니다. 암호화 설정을 제거하면 테이블 버킷에 생성된 새 테이블이 기본 SSE-S3 암호화를 사용합니다.

## 테이블에 대한 암호화 지정
<a name="specify-kms-table"></a>

쿼리 엔진, REST API 작업, AWS SDK 및 AWS Command Line Interface(AWS CLI)를 사용하여 새 테이블을 생성할 때 새 테이블에 SSE-KMS 암호화를 적용할 수 있습니다. 테이블을 생성할 때 지정하는 암호화 설정이 테이블 버킷의 기본 암호화 설정보다 우선합니다.

**참고**  
테이블에 SSE-KMS 암호화를 사용하는 경우 암호화에 사용하는 키가 S3 Tables 유지 관리 서비스 위탁자에게 키에 대한 액세스를 허용해야 합니다. 유지 관리 서비스 위탁자에게 액세스 권한이 없으면 테이블을 생성할 수 없습니다. 자세한 내용은 [S3 Tables 유지 관리 서비스 위탁자에게 KMS 키 권한 부여](s3-tables-kms-permissions.md#tables-kms-maintenance-permissions) 섹션을 참조하세요.

****필요한 권한****

암호화된 테이블을 생성하려면 다음 권한이 필요합니다.
+ `s3tables:CreateTable`
+ `s3tables:PutTableEncryption`

## AWS CLI 사용
<a name="w2aac20c35c15b3c17c13b1"></a>

다음 AWS CLI 예제에서는 기본 스키마를 사용하여 새 테이블을 생성하고 고객 관리형 AWS KMS 키로 암호화합니다. 명령을 사용하려면 *사용자 입력 자리 표시자*를 사용자의 정보로 대체합니다.

```
aws s3tables create-table \
  --table-bucket-arn "arn:aws:s3tables:Region:ownerAccountId:bucket/amzn-s3-demo-table-bucket" \
  --namespace "mydataset" \
  --name "orders" \
  --format "ICEBERG" \
  --encryption-configuration '{
    "sseAlgorithm": "aws:kms",
    "kmsKeyArn": "arn:aws:kms:Region:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
  }' \
  --metadata '{
    "iceberg": {
      "schema": {
        "fields": [
          {
            "name": "order_id",
            "type": "string",
            "required": true
          },
          {
            "name": "order_date",
            "type": "timestamp",
            "required": true
          },
          {
            "name": "total_amount",
            "type": "decimal(10,2)",
            "required": true
          }
        ]
      }
    }
  }'
```

데이터 보호란 전송 중(Amazon S3 안팎으로 데이터가 이동 중)과 저장 시(Amazon S3 데이터 센터의 디스크에 데이터가 저장된 동안) 데이터를 보호하는 것을 말합니다. S3 Tables는 항상 HTTPS를 통해 전송 계층 보안(1.2 이상)을 사용하여 전송 중 데이터를 보호합니다. S3 테이블 버킷에서 저장 데이터를 보호하는 데는 다음과 같은 옵션이 있습니다.

**Amazon S3 관리형 키를 사용한 서버 측 암호화(SSE-S3)**  
모든 Amazon S3 테이블 버킷에는 기본적으로 암호화가 구성되어 있습니다. 서버 측 암호화의 기본 옵션은 Amazon S3 관리형 키(SSE-S3)를 사용하는 것입니다. 이 암호화는 무료로 제공되며 다른 형태의 암호화를 지정하지 않는 한 S3 테이블 버킷의 모든 테이블에 적용됩니다. 각 객체가 고유한 키로 암호화됩니다. 또한 추가 보안 조치로 SSE-S3는 주기적으로 교체되는 루트 키를 사용하여 키 자체를 암호화합니다. SSE-S3는 가장 강력한 블록 암호 중 하나인 256비트 Advanced Encryption Standard(AES-256)를 사용하여 데이터를 암호화합니다.

**AWS KMS 키를 사용한 서버 측 암호화(SSE-KMS)**  
AWS Key Management Service(AWS KMS) 키(SSE-KMS)를 통한 서버 측 암호화를 사용하도록 테이블 버킷 또는 테이블을 구성할 수도 있습니다. AWS KMS 내 보안 관리가 암호화 관련 규정 준수 요구 사항을 충족하는 데 도움이 될 수 있습니다. SSE-KMS를 사용하면 다음 작업을 수행할 수 있어 암호화 키를 더 효과적으로 제어할 수 있습니다.  
+ KMS 키를 생성, 조회, 편집, 모니터링, 활성화/비활성화, 교체, 예약 삭제합니다.
+ KMS 키를 사용할 수 있는 방법 및 주체를 제어하는 정책을 정의합니다.
+ AWS CloudTrail에서 키 사용을 추적하여 KMS 키가 올바르게 사용되고 있는지 확인합니다.
S3 Tables는 SSE-KMS에서 고객 관리형 키를 사용하여 테이블을 암호화하도록 지원합니다. AWS 관리형 키는 지원되지 않습니다. S3 테이블 및 테이블 버킷에 SSE-KMS를 사용하는 방법에 대한 자세한 내용은 [테이블 버킷에서 AWS KMS 키(SSE-KMS)를 사용한 서버 측 암호화 사용](s3-tables-kms-encryption.md) 섹션을 참조하세요.

# S3 Tables의 액세스 관리
<a name="s3-tables-setting-up"></a>

S3 Tables 리소스에는 테이블 버킷과 여기에 들어 있는 테이블이 포함됩니다. 리소스를 생성한 AWS 계정의 루트 사용자(리소스 소유자)와 해당 계정 내에서 필요한 권한을 가진 AWS Identity and Access Management IAM 사용자는 자신이 생성한 리소스에 액세스할 수 있습니다. 리소스 소유자는 리소스에 액세스할 수 있는 다른 사용자와 리소스에서 이들이 수행할 수 있는 작업을 지정합니다. Amazon S3에는 다른 사람에게 내 S3 리소스에 대한 액세스 권한을 부여하는 데 사용할 수 있는 다양한 액세스 관리 도구가 있습니다. 테이블을 AWS Amazon SageMaker Lakehouse와 통합한 경우 Lake Formation을 사용하여 테이블 및 네임스페이스에 대한 세분화된 액세스를 관리할 수도 있습니다. 다음 주제에서는 S3 Tables의 리소스, IAM 작업 및 조건 키에 대한 개요를 제공합니다. 또한 S3 Tables용 리소스 기반 정책 및 ID 기반 정책 모두에 대한 예시도 제공합니다.

**Topics**
+ [리소스](#s3-tables-resources)
+ [S3 Tables에 대한 작업](#s3-tables-actions)
+ [S3 Tables의 조건 키](#s3-tables-conditionkeys)
+ [S3 Tables의 IAM ID 기반 정책](s3-tables-identity-based-policies.md)
+ [S3 Tables의 리소스 기반 정책](s3-tables-resource-based-policies.md)
+ [S3 Tables에 대한 AWS 관리형 정책](s3-tables-security-iam-awsmanpol.md)
+ [SQL 의미 체계를 사용하여 액세스 권한 부여](s3-tables-sql.md)
+ [Lake Formation을 사용하여 테이블 또는 데이터베이스에 대한 액세스 관리](grant-permissions-tables.md)

## 리소스
<a name="s3-tables-resources"></a>

S3 Tables 리소스에는 테이블 버킷과 여기에 들어 있는 테이블이 포함됩니다.
+ 테이블 버킷 - 테이블 버킷은 테이블을 위해 특별히 설계되었으며 범용 S3 버킷의 자체 관리형 테이블에 비해 초당 트랜잭션 수(TPS)가 높고 쿼리 처리량이 더 우수합니다. 테이블 버킷은 Amazon S3 범용 버킷과 동일한 내구성, 가용성, 확장성 및 성능 특성을 제공합니다.
+ 테이블 - 테이블 버킷의 테이블은 Apache Iceberg 형식으로 저장됩니다. Iceberg를 지원하는 쿼리 엔진에서 표준 SQL을 사용하여 이러한 테이블을 쿼리할 수 있습니다.

테이블 및 테이블 버킷의 Amazon 리소스 이름(ARN)에는 `s3tables` 네임스페이스, AWS 리전, AWS 계정 ID 및 버킷 이름이 포함됩니다. 테이블 및 테이블 버킷에 액세스하고 작업을 수행하려면 다음 ARN 형식을 사용해야 합니다.
+ 표 ARN 형식:

  `arn:aws:s3tables:us-west-2:111122223333:bucket/amzn-s3-demo-bucket/table/demo-tableID`

## S3 Tables에 대한 작업
<a name="s3-tables-actions"></a>

ID 기반 정책 또는 리소스 기반 정책에서 특정 IAM 위탁자에 대해 어떤 S3 Tables 작업을 허용 또는 거부할지 정의합니다. 테이블 작업은 버킷 및 테이블 수준 API 작업에 해당합니다. 모든 작업은 고유한 IAM 네임스페이스인 `s3tables`의 일부입니다.

정책에서 작업을 사용하면 일반적으로 이름이 같은 API 작업에 대한 액세스를 허용하거나 거부합니다. 그러나 경우에 따라 하나의 API 작업으로 둘 이상의 작업에 대한 액세스가 제어됩니다. 예를 들어 `s3tables:GetTableData` 작업에 `GetObject`, `ListParts` 및 `ListMultiparts` API 작업에 대한 권한이 포함됩니다.

다음은 테이블 버킷에 지원되는 작업입니다. IAM 정책 또는 리소스 정책의 `Action` 요소에서 다음 작업을 지정할 수 있습니다.


| 작업 | 설명 | 액세스 레벨 | 크로스 계정 액세스 | 
| --- | --- | --- | --- | 
| s3tables:CreateTableBucket | 테이블 버킷을 생성할 수 있는 권한을 부여합니다. | Write | 아니요 | 
| s3tables:GetTableBucket | 테이블 버킷 ARN, 테이블 버킷 이름 및 생성 날짜를 검색할 수 있는 권한을 부여합니다. | Write | 예 | 
| s3tables:ListTableBuckets | 이 계정의 모든 테이블 버킷을 나열할 수 있는 권한을 부여합니다. | Read | 아니요 | 
| s3tables:CreateNamespace | 테이블 버킷에 네임스페이스를 생성할 수 있는 권한을 부여합니다. | Write | 예 | 
| s3tables:GetNamespace | 네임스페이스 세부 정보를 검색할 수 있는 권한을 부여합니다. | Read | 예 | 
| s3tables:ListNamespaces | 테이블 버킷의 모든 네임스페이스를 나열할 수 있는 권한을 부여합니다. | Read | 예 | 
| s3tables:DeleteNamespace | 테이블 버킷에서 네임스페이스를 삭제할 수 있는 권한을 부여합니다. | Write | 예 | 
| s3tables:DeleteTableBucket | 버킷을 삭제할 수 있는 권한을 부여합니다. | Write | 예  | 
| s3tables:PutTableBucketPolicy | 버킷 정책을 추가하거나 교체할 수 있는 권한을 부여합니다. | Permissions Management | 아니요 | 
| s3tables:GetTableBucketPolicy | 버킷 정책을 검색할 수 있는 권한을 부여합니다. | Read | 아니요 | 
| s3tables:DeleteTableBucketPolicy | 버킷 정책을 삭제할 수 있는 권한을 부여합니다. | Permissions Management | 아니요 | 
| s3tables:GetTableBucketMaintenanceConfiguration | 테이블 버킷에 대한 유지 관리 구성을 검색할 수 있는 권한을 부여합니다. | Read | 예  | 
| s3tables:PutTableBucketMaintenanceConfiguration | 테이블 버킷에 대한 유지 관리 구성을 추가하거나 교체할 수 있는 권한을 부여합니다. | Write | 예 | 
| s3tables:PutTableBucketEncryption | 테이블 버킷에 대한 암호화 구성을 추가하거나 교체할 수 있는 권한을 부여합니다. | Write | 아니요 | 
| s3tables:GetTableBucketEncryption | 테이블 버킷에 대한 암호화 구성을 검색할 수 있는 권한을 부여합니다. | Read | 아니요 | 
| s3tables:DeleteTableBucketEncryption | 테이블 버킷에 대한 암호화 구성을 삭제할 수 있는 권한을 부여합니다. | Write | 아니요 | 

테이블에 다음 작업이 지원됩니다.


| 작업 | 설명 | 액세스 레벨 | 크로스 계정 액세스 | 
| --- | --- | --- | --- | 
| s3tables:GetTableMaintenanceConfiguration | 테이블에 대한 유지 관리 구성을 검색할 수 있는 권한을 부여합니다. | Read | 예 | 
| s3tables:PutTableMaintenanceConfiguration |  테이블에 대한 유지 관리 구성을 추가하거나 교체할 수 있는 권한을 부여합니다. | Write | 예 | 
| s3tables:PutTablePolicy | 테이블 정책을 추가하거나 교체할 수 있는 권한을 부여합니다. | Permissions Management | 아니요 | 
| s3tables:GetTablePolicy | 테이블 정책을 검색할 수 있는 권한을 부여합니다. | Read | 아니요 | 
| s3tables:DeleteTablePolicy | 테이블 정책을 삭제할 수 있는 권한을 부여합니다. | Permissions management | 아니요 | 
| s3tables:CreateTable | 테이블 버킷에 테이블을 생성할 수 있는 권한을 부여합니다. | Write | 예 | 
| s3tables:GetTable | 테이블 정보를 검색할 수 있는 권한을 부여합니다. | Read | 예 | 
| s3tables:GetTableMetadataLocation | 테이블 루트 포인터(메타데이터 파일)를 검색할 수 있는 권한을 부여합니다. | Read | 예  | 
| s3tables:ListTables | 테이블 버킷의 모든 테이블을 나열할 수 있는 권한을 부여합니다. | Read | 예  | 
| s3tables:RenameTable | 테이블 이름을 변경할 수 있는 권한을 부여합니다. | Write | 예  | 
| s3tables:UpdateTableMetadataLocation | 테이블 루트 포인터(메타데이터 파일)를 업데이트할 수 있는 권한을 부여합니다. | Write | 예  | 
| s3tables:GetTableData | 테이블 버킷에 저장된 테이블 메타데이터 및 데이터 객체를 읽을 수 있는 권한을 부여합니다. | Read | 예 | 
| s3tables:PutTableData | 테이블 버킷에 저장된 테이블 메타데이터 및 데이터 객체를 쓸 수 있는 권한을 부여합니다. | Write | 예 | 
| s3tables:GetTableEncryption  | 테이블에 대한 암호화 설정을 검색할 수 있는 권한을 부여합니다. | Write | 아니요 | 
| s3tables:PutTableEncryption  | 테이블에 암호화를 추가할 수 있는 권한을 부여합니다. | Write | 아니요 | 
| s3tables:DeleteTable | 테이블 버킷에서 테이블을 삭제하기 위한 권한 부여 | Write | 예 | 

테이블 수준 읽기 및 쓰기 작업을 수행하기 위해 S3 Tables은 `GetObject` 및 `PutObject`와 같은 Amazon S3 API 작업을 지원합니다. 다음 표에는 객체 수준 작업 목록이 나와 있습니다. 테이블에 읽기 및 쓰기 권한을 부여할 때 다음 작업을 사용합니다.


| 작업 | S3 객체 API | 
| --- | --- | 
| s3tables:GetTableData | GetObject, ListParts, HeadObject | 
| s3tables:PutTableData | PutObject, CreateMultipartUpload, CompleteMultipartUpload,  UploadPart, AbortMultipartUpload | 

예를 들어 사용자에게 `GetTableData` 권한이 있는 경우 메타데이터 파일, 매니페스트, 매니페스트 목록 파일, 파켓 데이터 파일 등 테이블과 연결된 모든 파일을 읽을 수 있습니다.

## S3 Tables의 조건 키
<a name="s3-tables-conditionkeys"></a>

S3 Tables은 [AWS 전역 조건 컨텍스트 키](https://docs.aws.amazon.com//IAM/latest/UserGuide/reference_policies_condition-keys.html)를 지원합니다.

또한 S3 Tables은 액세스 정책에 사용할 수 있는 다음과 같은 조건 키를 정의합니다.


| 조건 키 | 설명 | 형식 | 
| --- | --- | --- | 
|  s3tables:tableName |  테이블 버킷의 테이블 이름을 기준으로 액세스를 필터링합니다.`s3tables:tableName` 조건 키를 사용하여 이 이름 조건을 충족하는 테이블로만 사용자 또는 애플리케이션 액세스를 제한하는 IAM 또는 테이블 버킷 정책을 작성할 수 있습니다.  `s3tables:tableName` 조건 키를 사용하여 액세스를 제어하는 경우 테이블 이름을 변경하면 이러한 정책에 영향을 미칠 수 있습니다. 예시 값: "s3tables:tableName":"department\$1"  | String | 
|  s3tables:namespace |  테이블 버킷에 생성된 네임스페이스를 기준으로 액세스를 필터링합니다. `s3tables:namespace` 조건 키를 사용하여 특정 네임스페이스의 일부인 테이블로 사용자 또는 애플리케이션 액세스를 제한하는 IAM, 테이블 또는 테이블 버킷 정책을 작성할 수 있습니다. *예시 값:* `"s3tables:namespace":"hr" `  `s3tables:namespace` 조건 키를 사용하여 액세스를 제어하는 경우 네임스페이스를 변경하면 이러한 정책에 영향을 미칠 수 있습니다.  | String | 
|  s3tables:SSEAlgorithm |  테이블을 암호화하는 데 사용되는 서버 측 암호화 알고리즘을 기준으로 액세스를 필터링합니다. `s3tables:SSEAlgorithm` 조건 키를 사용하여 특정 암호화 유형으로 암호화된 테이블로 사용자 또는 애플리케이션 액세스를 제한하는 IAM, 테이블 또는 테이블 버킷 정책을 작성할 수 있습니다. *예시 값:* `"s3tables:SSEAlgorithm":"aws:kms" `  `s3tables:SSEAlgorithm` 조건 키를 사용하여 액세스를 제어하는 경우 암호화를 변경하면 이러한 정책에 영향을 미칠 수 있습니다.  | String | 
|  s3tables:KMSKeyArn |  테이블을 암호화하는 데 사용되는 키의 AWS KMS 키 ARN을 기준으로 액세스를 필터링합니다. `s3tables:KMSKeyArn` 조건 키를 사용하여 특정 KSM 키를 통해 암호화된 테이블로 사용자 또는 애플리케이션 액세스를 제한하는 IAM, 테이블 또는 테이블 버킷 정책을 작성할 수 있습니다. `s3tables:KMSKeyArn` 조건 키를 사용하여 액세스를 제어하는 경우 KSM 키를 변경하면 이러한 정책에 영향을 미칠 수 있습니다.  | ARN | 

# S3 Tables의 IAM ID 기반 정책
<a name="s3-tables-identity-based-policies"></a>

기본적으로 사용자 및 역할에는 테이블 및 테이블 버킷을 생성하거나 수정할 수 있는 권한이 없습니다. 이들은 S3 콘솔, AWS Command Line Interface(AWS CLI) 또는 Amazon S3 REST API를 사용해서도 작업을 수행할 수 없습니다. 테이블 버킷 및 테이블을 생성하고 액세스하려면 AWS Identity and Access Management(IAM) 관리자가 IAM 역할 또는 사용자에게 필요한 권한을 부여해야 합니다. 이러한 예제 JSON 정책 문서를 사용하여 IAM ID 기반 정책을 생성하는 방법을 알아보려면 *IAM 사용 설명서*의 [IAM 정책 생성](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html)을 참조하세요.

다음 주제에는 IAM ID 기반 정책의 예가 포함되어 있습니다. 다음 예시 정책을 사용하려면 *사용자 입력 자리 표시자*를 실제 정보로 바꾸세요.

**Topics**
+ [예시 1: 테이블 버킷 생성 및 사용에 대한 액세스 허용](#example-1-s3-tables-identity-based-policies)
+ [예시 2: 테이블 버킷에서 테이블 생성 및 사용에 대한 액세스 허용](#example-2-s3-tables-identity-based-policies)

## 예시 1: 테이블 버킷 생성 및 사용에 대한 액세스 허용
<a name="example-1-s3-tables-identity-based-policies"></a>

**.**

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowBucketActions",
            "Effect": "Allow",
            "Action": [
                "s3tables:CreateTableBucket",
                "s3tables:PutTableBucketPolicy",
                "s3tables:GetTableBucketPolicy",
                "s3tables:ListTableBuckets",
                "s3tables:GetTableBucket"
            ],
            "Resource": "arn:aws:s3tables:us-east-1:111122223333:bucket/*"
        }
    ]
}
```

------

## 예시 2: 테이블 버킷에서 테이블 생성 및 사용에 대한 액세스 허용
<a name="example-2-s3-tables-identity-based-policies"></a>

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowBucketActions",
            "Effect": "Allow",
            "Action": [
                "s3tables:GetTableBucket",
                "s3tables:ListTables",
                "s3tables:CreateTable",
                "s3tables:PutTableData",
                "s3tables:GetTableData",
                "s3tables:GetTable",
                "s3tables:GetTableMetadataLocation",
                "s3tables:UpdateTableMetadataLocation",
                "s3tables:GetNamespace",
                "s3tables:CreateNamespace",
                "s3tables:ListNamespaces"
            ],
            "Resource": [
                "arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-bucket",
                "arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-bucket/table/*"
            ]
        }
    ]
}
```

------

# S3 Tables의 리소스 기반 정책
<a name="s3-tables-resource-based-policies"></a>

S3 Tables은 테이블 버킷 및 테이블에 대한 액세스를 관리하기 위한 리소스 기반 정책, 즉 테이블 버킷 정책 및 테이블 정책을 제공합니다. 테이블 버킷 정책을 사용하여 테이블 버킷, 네임스페이스 또는 테이블 수준에서 API 액세스 권한을 부여할 수 있습니다. 테이블 버킷에 연결된 권한은 정책 정의에 따라 버킷의 모든 테이블 또는 버킷의 특정 테이블에 적용될 수 있습니다. 테이블 정책을 사용하여 테이블 수준에서 권한을 부여할 수 있습니다.

S3 Tables이 요청을 수신하면 먼저 요청자에게 필요한 권한이 있는지 확인합니다. 요청을 승인할지 결정할 때 모든 관련 액세스 정책, 사용자 정책 및 리소스 기반 정책(IAM 사용자 정책, IAM 역할 정책, 테이블 버킷 정책 및 테이블 정책)을 평가합니다. 예를 들어 테이블 버킷 정책이 버킷의 테이블(`DeleteTable` 포함)에서 모든 작업을 수행할 수 있는 권한을 사용자에게 부여하지만 개별 테이블에 모든 사용자에 대해 `DeleteTable` 작업을 거부하는 테이블 정책이 있는 경우 사용자는 테이블을 삭제할 수 없습니다.

다음 주제에는 테이블 및 테이블 버킷 정책의 예가 포함되어 있습니다. 이러한 정책을 사용하려면 *사용자 입력 자리 표시자*를 실제 정보로 바꾸세요.

**참고**  
테이블을 수정할 수 있는 권한을 부여하는 모든 정책에는 `GetTableMetadataLocation`이 테이블 루트 파일에 액세스할 수 있는 권한이 포함되어야 합니다. [자세한 내용은 `GetTableMetadataLocation` 단원을 참조하세요.](https://docs.aws.amazon.com/AmazonS3/latest/API/API_s3TableBuckets_GetTableMetadataLocation.html)
테이블에서 쓰기 또는 삭제 활동을 수행할 때마다 액세스 정책에 `UpdateTableMetadataLocation`에 대한 권한을 포함합니다.
버킷 수준 작업에 대한 액세스를 관리하기 위해서는 테이블 버킷 정책을 사용하고 테이블 수준 작업에 대한 액세스를 관리하기 위해서는 테이블 정책을 사용하는 것이 좋습니다. 여러 테이블에서 동일한 권한 세트를 정의하려는 경우 테이블 버킷 정책을 사용하는 것이 좋습니다.

**Topics**
+ [예 1: 계정의 버킷에서 `PutBucketMaintenanceConfiguration`에 대한 액세스를 허용하는 테이블 버킷 정책](#table-bucket-policy-1)
+ [예 2: `hr` 네임스페이스에 저장된 테이블에 대한 읽기(SELECT) 액세스를 허용하는 테이블 버킷 정책](#table-bucket-policy-2)
+ [예 3: 사용자가 테이블을 삭제하도록 허용하는 테이블 정책](#table-bucket-policy-3)

## 예 1: 계정의 버킷에서 `PutBucketMaintenanceConfiguration`에 대한 액세스를 허용하는 테이블 버킷 정책
<a name="table-bucket-policy-1"></a>

다음 테이블 버킷 정책 예시는 `PutBucketMaintenanceConfiguration`에 대한 액세스를 허용하여 IAM `data steward`가 계정의 모든 버킷에서 참조되지 않은 객체를 삭제할 수 있도록 허용합니다.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:role/datasteward"
            },
            "Action": [
                "s3tables:PutTableBucketMaintenanceConfiguration"
            ],
            "Resource": "arn:aws:s3tables:us-east-1:111122223333:bucket/*"
        }
    ]
}
```

------

## 예 2: `hr` 네임스페이스에 저장된 테이블에 대한 읽기(SELECT) 액세스를 허용하는 테이블 버킷 정책
<a name="table-bucket-policy-2"></a>

다음 테이블 버킷 정책 예시에서는 AWS 계정 ID `123456789012`의 사용자인 Jane이 테이블 버킷의 `hr` 네임스페이스에 저장된 테이블에 액세스할 수 있도록 허용합니다.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:user/Jane"
            },
            "Action": [
                "s3tables:GetTableData",
                "s3tables:GetTableMetadataLocation"
            ],
            "Resource": "arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-table-bucket/table/*",
            "Condition": {
                "StringLike": {
                    "s3tables:namespace": "hr"
                }
            }
        }
    ]
}
```

------

## 예 3: 사용자가 테이블을 삭제하도록 허용하는 테이블 정책
<a name="table-bucket-policy-3"></a>

다음 테이블 정책 예시는 IAM 역할 `data steward`가 테이블을 삭제하도록 허용합니다.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "DeleteTable",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:role/datasteward"
            },
            "Action": [
                "s3tables:DeleteTable",
                "s3tables:UpdateTableMetadataLocation",
                "s3tables:PutTableData",
                "s3tables:GetTableMetadataLocation"
            ],
            "Resource": "arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-bucket/table/tableUUID"
        }
    ]
}
```

------

# S3 Tables에 대한 AWS 관리형 정책
<a name="s3-tables-security-iam-awsmanpol"></a>

AWS 관리형 정책은 AWS에 의해 생성되고 관리되는 독립 실행형 정책입니다. AWS 관리형 정책은 사용자, 그룹 및 역할에 권한 할당을 시작할 수 있도록 많은 일반 사용 사례에 대한 권한을 제공하도록 설계되었습니다.

AWS 관리형 정책은 모든 AWS 고객이 사용할 수 있기 때문에 특정 사용 사례에 대해 최소 권한을 부여하지 않을 수 있습니다. 사용 사례에 고유한 [고객 관리형 정책](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#customer-managed-policies)을 정의하여 권한을 줄이는 것이 좋습니다.

AWS 관리형 정책에서 정의한 권한은 변경할 수 없습니다. 만약 AWS가 AWS 관리형 정책에 정의된 권한을 업데이트할 경우 정책이 연결되어 있는 모든 보안 주체 ID(사용자, 그룹 및 역할)에도 업데이트가 적용됩니다. 새 AWS 서비스을(를) 시작하거나 새 API 작업을 기존 서비스에 이용하는 경우, AWS가 AWS 관리형 정책을 업데이트할 가능성이 높습니다.

자세한 내용은 *IAM 사용자 설명서*의 [AWS 관리형 정책](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies)을 참조하세요.

## AWS 관리형 정책:AmazonS3TablesFullAccess .
<a name="s3-tables-security-iam-awsmanpol-amazons3tablesfullaccess"></a>

`AmazonS3TablesFullAccess` 정책을 IAM ID에 연결할 수 있습니다. 이 정책은 Amazon S3 Tables에 대한 전체 액세스를 허용하는 권한을 부여합니다. 이 정책에 대한 자세한 내용은 [https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonS3TablesFullAccess.html](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonS3TablesFullAccess.html) 섹션을 참조하세요.

## AWS 관리형 정책:AmazonS3TablesReadOnlyAccess .
<a name="s3-tables-security-iam-awsmanpol-amazons3readonlyaccess"></a>

`AmazonS3TablesReadOnlyAccess` 정책을 IAM ID에 연결할 수 있습니다. 이 정책은 Amazon S3 Tables에 대한 읽기 전용 액세스를 허용하는 권한을 부여합니다. 이 정책에 대한 자세한 내용은 [https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonS3TablesReadOnlyAccess.html](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonS3TablesReadOnlyAccess.html) 섹션을 참조하세요.

## AWS 관리형 정책:AmazonS3TablesLakeFormationServiceRole .
<a name="s3-tables-security-iam-awsmanpol-amazons3tableslakeformationservicerole"></a>

`AmazonS3TablesLakeFormationServiceRole` 정책을 IAM ID에 연결할 수 있습니다. 이 정책은 AWS Lake Formation 서비스 역할이 S3 Tables에 액세스할 수 있는 권한을 부여합니다. AWS KMS 권한은 Lake Formation이 암호화된 테이블에 액세스할 수 있도록 하는 데 사용됩니다. 이 정책에 대한 자세한 내용은 [https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonS3TablesLakeFormationServiceRole.html](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonS3TablesLakeFormationServiceRole.html) 섹션을 참조하세요.

## AWS 관리형 정책에 대한 Amazon S3 Tables 업데이트
<a name="s3-tables-security-iam-awsmanpol-updates"></a>

S3 Tables에서 이러한 변경 내용을 추적하기 시작한 이후부터 Amazon S3 Tables의 AWS 관리형 정책 업데이트에 대한 세부 정보를 봅니다.


| 변경 | 설명 | 날짜 | 
| --- | --- | --- | 
|  Amazon S3 Tables가 `AmazonS3TablesFullAccess`를 업데이트했습니다.  |  S3 Tables에서 `AmazonS3TablesFullAccess`라는 AWS 관리형 정책이 업데이트되었습니다. 이 업데이트는 S3 Tables 복제 서비스에 역할을 전달할 수 있는 권한을 부여합니다.  |  2025년 12월 2일  | 
|  Amazon S3 Tables에 `AmazonS3TablesLakeFormationServiceRole`를 추가했습니다.  |  S3 Tables에 `AmazonS3TablesLakeFormationServiceRole`라는 새로운 AWS 관리형 정책을 추가했습니다. 이 정책은 Lake Formation 서비스 역할이 S3 Tables에 액세스할 수 있는 권한을 부여합니다.  | 2025년 5월 19일 | 
|  Amazon S3 Tables에 `AmazonS3TablesFullAccess`를 추가했습니다.  |  S3 Tables에 `AmazonS3TablesFullAccess`라는 새로운 AWS 관리형 정책을 추가했습니다. 이 정책은 Amazon S3 Tables에 대한 전체 액세스를 허용하는 권한을 부여합니다.  | 2024년 12월 3일 | 
|  Amazon S3 Tables에 `AmazonS3TablesReadOnlyAccess`를 추가했습니다.  |  S3 Tables에 `AmazonS3TablesReadOnlyAccess`라는 새로운 AWS 관리형 정책을 추가했습니다. 이 정책은 Amazon S3 Tables에 대한 읽기 전용 액세스를 허용하는 권한을 부여합니다.  | 2024년 12월 3일 | 
|  Amazon S3 Tables에서 변경 사항 추적을 시작했습니다.  |  Amazon S3 Tables에서 AWS 관리형 정책에 대한 변경 사항 추적을 시작했습니다.  | 2024년 12월 3일 | 

# SQL 의미 체계를 사용하여 액세스 권한 부여
<a name="s3-tables-sql"></a>

테이블 및 테이블 버킷 정책에서 SQL 의미 체계를 사용하여 테이블에 권한을 부여할 수 있습니다. 사용할 수 있는 SQL 의미 체계의 예로는 `CREATE`, `INSERT`, `DELETE`, `UPDATE` 및 `ALTER`가 있습니다. 다음 표에는 사용자에게 권한을 부여하는 데 사용할 수 있는 SQL 의미 체계와 관련된 API 작업 목록이 나와 있습니다.

S3 Tables은 SQL 의미 체계를 사용하는 권한을 부분적으로 지원합니다. 예를 들어 `CreateTable` API는 테이블 버킷에 빈 테이블만 생성합니다. 테이블 스키마를 설정하려면 `UpdateTableMetadata`, `PutTableData` 및 `GetTableMetadataLocation`과 같은 추가 권한이 필요합니다. 또한 이러한 추가 권한을 제공한다는 것은 사용자에게 테이블에 행을 삽입할 수 있는 액세스 권한도 부여한다는 뜻입니다. SQL 의미 체계만을 기반으로 액세스를 제어하려면 S3 Tables과 통합된 [AWS Lake Formation](https://docs.aws.amazon.com/lake-formation/latest/dg/what-is-lake-formation.html) 또는 서드 파티 솔루션을 사용하는 것이 좋습니다.


| 테이블 수준 활동 | IAM 작업 | 
| --- | --- | 
| SELECT | s3tables:GetTableData, s3tables:GetTableMetadataLocation | 
| CREATE | s3tables:CreateTable, s3tables:UpdateTableMetadataLocation, s3tables:PutTableData, s3tables:GetTableMetadataLocation,  | 
| INSERT | s3tables:UpdateTableMetadataLocation, s3tables:PutTableData, s3tables:GetTableMetadataLocation | 
| UPDATE | s3tables:UpdateTableMetadataLocation, s3tables:PutTableData, s3tables:GetTableMetadataLocation | 
| ALTER,RENAME | s3tables:UpdateTableMetadataLocation, s3tables:PutTableData, s3tables:GetTableMetadataLocation, s3tables:RenameTable  | 
| DELETE,DROP | s3tables:DeleteTable, s3tables:UpdateTableMetadataLocation, s3tables:PutTableData, s3tables:GetTableMetadataLocation  | 

**참고**  
테이블 버킷에서 테이블을 삭제하려면 `s3tables:DeleteTable` 권한이 필요합니다. 이 권한을 사용하면 테이블과 연결된 모든 데이터 및 메타데이터를 영구적으로 제거할 수 있습니다. 삭제 작업은 취소할 수 없으므로 이 권한을 주의해서 사용하세요.

# Lake Formation을 사용하여 테이블 또는 데이터베이스에 대한 액세스 관리
<a name="grant-permissions-tables"></a>

테이블 버킷이 AWS 분석 서비스와 통합되면 Lake Formation은 테이블에 대한 액세스를 관리하고 각 IAM 보안 주체(사용자 또는 역할)에게 작업을 수행할 수 있는 권한을 부여해야 합니다. Lake Formation은 Data Catalog 리소스에 대한 세분화된 액세스 제어를 활성화하는 자체 권한 모델(Lake Formation 권한)을 사용합니다.

자세한 내용은 *AWS Lake Formation 개발자 안내서*의 [Lake Formation 권한 개요](https://docs.aws.amazon.com//lake-formation/latest/dg/lf-permissions-overview.html)를 참조하십시오.

AWS Lake Formation에는 다음과 같은 두 가지 주요 권한 유형이 있습니다.

1. 메타데이터 액세스 권한은 Data Catalog에서 메타데이터 데이터베이스 및 테이블을 생성하고, 읽고, 업데이트하고, 삭제할 수 있는 기능을 제어합니다.

1. 기본 데이터 액세스 권한은 Data Catalog 리소스가 가리키는 기본 Amazon S3 위치에 데이터를 읽고 쓰는 기능을 제어합니다.

Lake Formation은 자체 권한 모델과 IAM 권한 모델의 조합을 사용하여 Data Catalog 리소스 및 기본 데이터에 대한 액세스를 제어합니다.
+ Data Catalog 리소스 또는 기본 데이터에 대한 액세스 요청이 성공하려면 요청이 IAM과 Lake Formation의 권한 검사를 모두 통과해야 합니다.
+ IAM 권한은 Lake Formation 및 AWS Glue API 및 리소스에 대한 액세스를 제어하는 반면, Lake Formation 권한은 Data Catalog 리소스, Amazon S3 위치 및 기본 데이터에 대한 액세스를 제어합니다.

Lake Formation 권한은 권한이 부여된 리전에서만 적용되며, 위탁자는 Lake Formation 권한을 부여받으려면 필요한 권한이 있는 데이터 레이크 관리자 또는 다른 위탁자의 승인을 받아야 합니다.

**참고**  
테이블 버킷 통합을 수행한 사용자인 경우 테이블에 대한 Lake Formation 권한이 이미 있습니다. 테이블에 액세스할 유일한 위탁자인 경우 이 단계를 건너뛸 수 있습니다. 테이블에 대한 Lake Formation 권한을 다른 IAM 위탁자에게 부여하기만 하면 됩니다. 이렇게 하면 다른 위탁자가 쿼리를 실행할 때 테이블에 액세스할 수 있습니다. 자세한 내용은 [테이블 또는 데이터베이스에 대한 Lake Formation 권한 부여](#grant-lf-table) 섹션을 참조하세요.

## 테이블 또는 데이터베이스에 대한 Lake Formation 권한 부여
<a name="grant-lf-table"></a>

Lake Formation 콘솔 또는 AWS CLI를 통해 위탁자에게 테이블 버킷의 테이블 또는 데이터베이스에 대한 Lake Formation 권한을 부여할 수 있습니다.

**참고**  
데이터 카탈로그 리소스에 대한 Lake Formation 권한을 외부 계정에 부여하거나 다른 계정의 IAM 보안 주체에 직접 부여하면 Lake Formation은 AWS Resource Access Manager(AWS RAM) 서비스를 사용하여 리소스를 공유합니다. 피부여자 계정이 부여자 계정과 동일한 조직에 속해 있는 경우, 피부여자는 공유 리소스를 즉시 사용할 수 있습니다. 피부여자 계정이 같은 조직에 속해 있지 않은 경우, AWS RAM은 피부여자 계정에 리소스 부여를 수락하거나 거부하라는 초대를 보냅니다. 그런 다음 공유 리소스를 사용할 수 있게 하려면 피부여자 계정의 데이터 레이크 관리자가 AWS RAM 콘솔 또는 AWS CLI를 사용하여 초대를 수락해야 합니다. 계정 간 데이터 공유에 대한 자세한 내용은 *AWS Lake Formation개발자 안내서*의 [Lake Formation에서의 계정 간 데이터 공유](https://docs.aws.amazon.com/lake-formation/latest/dg/cross-account-permissions.html)를 참조하세요.

------
#### [ Console ]

1. [https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)에서 AWS Lake Formation 콘솔을 열고 데이터 레이크 관리자로 로그인합니다. 데이터 레이크 관리자 생성 방법에 대한 자세한 내용은 *AWS Lake Formation 개발자 안내서*의 [데이터 레이크 관리자 생성](https://docs.aws.amazon.com/lake-formation/latest/dg/initial-lf-config.html#create-data-lake-admin)을 참조하세요.

1. 탐색 창에서 **데이터 권한**을 선택한 다음 **권한 부여**를 선택합니다.

1. **권한 부여** 페이지의 **주체**에서 다음 중 하나를 수행합니다.
   + Amazon Athena 또는 Amazon Redshift에서 **IAM 사용자 및 역할**을 선택하고 쿼리에 사용하는 IAM 위탁자를 선택합니다.
   + Amazon Data Firehose에서 **IAM 사용자 및 역할**을 선택하고 테이블로 스트리밍하기 위해 생성한 서비스 역할을 선택합니다.
   + Quick에서 **SAML 사용자 및 그룹**을 선택하고 Quick 관리자 사용자의 Amazon 리소스 이름(ARN)을 입력합니다.
   + AWS Glue Iceberg REST 엔드포인트 액세스에 대해 **IAM 사용자 및 역할**을 선택한 다음 클라이언트용으로 만든 IAM 역할을 선택합니다. 자세한 내용은 [클라이언트에 대한 IAM 역할 생성](s3-tables-integrating-glue-endpoint.md#glue-endpoint-create-iam-role) 섹션을 참조하세요.

1. **LF 태그 또는 카탈로그 리소스**에서 **명명된 데이터 카탈로그 리소스**를 선택합니다.

1. **카탈로그**에서 테이블 버킷을 통합할 때 생성한 하위 카탈로그를 선택합니다. 예를 들어, `account-id:s3tablescatalog/amzn-s3-demo-bucket`입니다.

1. **데이터베이스**에서 생성한 S3 테이블 버킷 네임스페이스를 선택합니다.

1. (옵션) **테이블**에서 테이블 버킷에서 생성한 S3 테이블을 선택합니다.
**참고**  
Athena 쿼리 편집기에서 새 테이블을 생성하는 경우 테이블을 선택하지 마세요.

1. 다음 중 하나를 수행하세요.
   + 이전 단계에서 테이블을 지정한 경우 **테이블 권한**에서 **슈퍼**를 선택합니다.
   + 이전 단계에서 테이블을 지정하지 않은 경우 **데이터베이스 권한**으로 이동합니다. 교차 계정 데이터 공유의 경우 **슈퍼**를 선택하여 다른 위탁자에게 데이터베이스에 대한 모든 권한을 부여할 수 없습니다. 대신 **설명**과 같이 더 세분화된 권한을 선택합니다.

1. **권한 부여**를 선택합니다.

------
#### [ CLI ]

1. 데이터 레이크 관리자로서 다음 AWS CLI 명령을 실행 중인지 확인합니다. 자세한 내용은 *AWS Lake Formation 개발자 안내서*의 [데이터 레이크 관리자 생성](https://docs.aws.amazon.com//lake-formation/latest/dg/initial-lf-config.html#create-data-lake-admin)을 참조하세요.

1. 다음 명령을 실행하여 S3 테이블 버킷의 테이블에 대한 Lake Formation 권한을 테이블에 액세스할 IAM 위탁자에 부여합니다. 이 예제를 사용하려면 *`user input placeholders`*를 사용자의 정보로 대체합니다.

   ```
   aws lakeformation grant-permissions \
   --region us-east-1 \
   --cli-input-json \
   '{
       "Principal": {
           "DataLakePrincipalIdentifier": "user or role ARN, for example, arn:aws:iam::account-id:role/example-role"
       },
       "Resource": {
           "Table": {
               "CatalogId": "account-id:s3tablescatalog/amzn-s3-demo-bucket",
               "DatabaseName": "S3 table bucket namespace, for example, test_namespace",
               "Name": "S3 table bucket table name, for example test_table"
           }
       },
       "Permissions": [
           "ALL"
       ]
   }'
   ```

------

# S3 Tables의 VPC 연결
<a name="s3-tables-VPC"></a>

S3 Tables의 모든 테이블은 Apache Iceberg 형식이며 두 가지 유형의 S3 객체로 구성됩니다. 이러한 두 가지 유형의 객체는 데이터를 저장하는 데이터 파일, 그리고 서로 다른 시점의 데이터 파일에 대한 정보를 추적하는 메타데이터 파일입니다. 모든 테이블 버킷, 네임스페이스 및 테이블 작업(예: `CreateNamespace`, `CreateTable` 등)은 S3 Tables 엔드포인트(`s3tables.region.amazonaws.com`)를 통해 라우팅되며 데이터 및 메타데이터 파일을 읽거나 쓰는 모든 객체 수준 작업은 S3 서비스 엔드포인트(`s3.region.amazonaws.com`)를 통해 계속 라우팅됩니다.

S3 Tables에 액세스하기 위해 Amazon S3는 AWS PrivateLink를 사용하여 두 가지 유형의 VPC 엔드포인트, 즉 게이트웨이 엔드포인트와 인터페이스 엔드포인트를 지원합니다. 게이트웨이 엔드포인트는 AWS 네트워크를 통해 VPC에서 S3에 액세스하기 위해 라우팅 테이블에 지정하는 게이트웨이입니다. 인터페이스 엔드포인트는 프라이빗 IP 주소를 통해 VPC 내에서, 온프레미스에서 또는 VPC 피어링이나 AWS Transit Gateway를 사용하여 다른 AWS 리전의 VPC에서 Amazon S3로 요청을 라우팅함으로써 게이트웨이 엔드포인트의 기능을 확장합니다.

VPC에서 S3 Tables에 액세스하려면 두 개의 VPC 엔드포인트(S3용 엔드포인트와 S3 Tables용 엔드포인트)를 생성하는 것이 좋습니다. 게이트웨이 또는 인터페이스 엔드포인트를 생성하여 파일(객체) 수준 작업을 S3로 라우팅하고 인터페이스 엔드포인트를 생성하여 버킷 및 테이블 수준 작업을 S3 Tables로 라우팅할 수 있습니다. S3를 사용하여 파일 수준 요청에 VPC 엔드포인트를 생성하고 사용할 수 있습니다. 자세한 내용은 *AWS PrivateLink* 사용 설명서의 [Gateway endpoints](https://docs.aws.amazon.com/vpc/latest/privatelink/gateway-endpoints.html)를 참조하세요.

AWS PrivateLink를 사용하여 S3 Tables용 엔드포인트를 생성하고 작업하는 방법에 대한 자세한 내용은 다음 주제를 참조하세요. VPC 인터페이스 엔드포인트를 생성하려면 *AWS PrivateLink 설명서*의 [ VPC 엔드포인트 생성](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html#create-interface-endpoint-aws)을 참조하십시오.

**Topics**
+ [S3 Tables용 VPC 엔드포인트 생성](#s3-tables-endpoints)
+ [AWS CLI를 사용하여 엔드포인트를 통해 테이블 버킷 및 테이블에 액세스](#s3-tables-endpoints-cli-sdks)
+ [쿼리 엔진을 사용할 때 VPC 네트워크 구성](#s3-tables-query-engine)
+ [듀얼 스택 엔드포인트를 사용하여 테이블 및 테이블 버킷 액세스](#s3-tables-dual-stack-endpoints)
+ [VPC 네트워크 내에서 S3 Tables에 대한 액세스 제한](#s3-tables-VPC-policy)

## S3 Tables용 VPC 엔드포인트 생성
<a name="s3-tables-endpoints"></a>

VPC 엔드포인트를 생성할 때 S3 Tables에서는 두 가지 유형의 엔드포인트별 DNS 이름, 즉 리전용과 영역용 DNS 이름을 생성합니다.
+ 리전 DNS 이름은 `VPCendpointID.s3tables.AWSregion.vpce.amazonaws.com` 형식입니다. 예를 들어, VPC 엔드포인트 ID `vpce-1a2b3c4d`의 경우, 생성된 DNS 이름은 `vpce-1a2b3c4d-5e6f.s3tables.us-east-1.vpce.amazonaws.com`과 비슷합니다.
+ 영역 DNS 이름은 `VPCendpointID-AvailabilityZone.s3tables.AWSregion.vpce.amazonaws.com` 형식입니다. 예를 들어, VPC 엔드포인트 ID `vpce-1a2b3c4d-5e6f.`의 경우, 생성된 DNS 이름은 `vpce-1a2b3c4d-5e6f-us-east-1a.s3tables.us-east-1.vpce.amazonaws.com`과 비슷합니다.

   영역 DNS 이름에는 가용 영역이 포함됩니다. 아키텍처가 가용 영역을 분리하는 경우 영역 DNS 이름을 사용할 수 있습니다. 엔드포인트별 S3 DNS 이름은 S3 퍼블릭 DNS 도메인에서 확인할 수 있습니다.

프라이빗 DNS 옵션을 사용하여 VPC 엔드포인트를 통한 S3 트래픽 라우팅을 단순화하고 애플리케이션에서 사용할 수 있는 가장 저렴한 네트워크 경로를 활용할 수도 있습니다. 프라이빗 DNS는 S3 Tables의 퍼블릭 엔드포인트, 예를 들어 `s3tables.region.amazonaws.com`을 VPC의 프라이빗 IP에 매핑합니다. 프라이빗 DNS 옵션을 사용하면 인터페이스 엔드포인트의 엔드포인트별 DNS 이름을 사용하도록 S3 클라이언트를 업데이트하지 않고도 리전 S3 트래픽을 라우팅할 수 있습니다.

## AWS CLI를 사용하여 엔드포인트를 통해 테이블 버킷 및 테이블에 액세스
<a name="s3-tables-endpoints-cli-sdks"></a>

AWS Command Line Interface(AWS CLI)를 사용하여 인터페이스 엔드포인트를 통해 테이블 버킷 및 테이블에 액세스할 수 있습니다. AWS CLI를 사용하면 `aws s3` 명령이 Amazon S3 엔드포인트를 통해 트래픽을 라우팅합니다. `aws s3tables` AWS CLI 명령은 Amazon S3 Tables 엔드포인트를 사용합니다.

`s3tables` VPC 엔드포인트의 예는 `vpce-0123456afghjipljw-nmopsqea.s3tables.region.vpce.amazonaws.com`입니다.

`s3tables` VPC 엔드포인트에는 버킷 이름이 포함되지 않습니다. `aws s3tables` AWS CLI 명령을 사용하여 `s3tables` VPC 엔드포인트에 액세스할 수 있습니다.

`s3` VPC 엔드포인트의 예는 `amzn-s3-demo-bucket.vpce-0123456afghjipljw-nmopsqea.s3.region.vpce.amazonaws.com`입니다.

`aws s3` AWS CLI 명령을 사용하여 `s3` VPC 엔드포인트에 액세스할 수 있습니다.

### AWS CLI 사용
<a name="set-s3tables-vpc-cli"></a>

AWS CLI를 사용하여 인터페이스 엔드포인트를 통해 테이블 버킷 및 테이블에 액세스하려면 `-region` 및 `--endpoint-url` 파라미터를 사용합니다. 테이블 버킷 및 테이블 수준 작업을 수행하려면 S3 Tables 엔드포인트 URL을 사용합니다. 객체 수준 작업을 수행하려면 Amazon S3 엔드포인트 URL을 사용합니다.

다음 예시에서 *사용자 입력 자리 표시자*를 실제 정보로 바꾸세요.

**예 1: 엔드포인트 URL을 사용하여 계정의 테이블 버킷 나열**

```
aws s3tables list-table-buckets --endpoint https://vpce-0123456afghjipljb-aac.s3tables.us-east-1.vpce.amazonaws.com —region us-east-1
```

**예 2: 엔드포인트 URL을 사용하여 버킷의 테이블 나열**

```
aws s3tables list-tables --table-bucket-arn arn:aws:s3tables:us-east-1:123456789301:bucket/amzn-s3-demo-bucket --endpoint https://vpce-0123456afghjipljb-aac.s3tables.us-east-1.vpce.amazonaws.com --region us-east-1
```

## 쿼리 엔진을 사용할 때 VPC 네트워크 구성
<a name="s3-tables-query-engine"></a>

쿼리 엔진을 사용할 때 다음 단계에 따라 VPC 네트워크를 구성합니다.

1. 시작하려면 VPC를 생성하거나 업데이트하면 됩니다. 자세한 내용은 [VPC 생성](https://docs.aws.amazon.com//vpc/latest/userguide/create-vpc.html#create-vpc-and-other-resources)을 참조하세요.

1.  S3 Tables로 라우팅되는 테이블 및 테이블 버킷 수준 작업의 경우 새 인터페이스 엔드포인트를 생성합니다. 자세한 내용은 [인터페이스 VPC 엔드포인트를 사용하여 AWS 서비스에 액세스](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html#create-interface-endpoint-aws)를 참조하세요.

1.  Amazon S3로 라우팅되는 모든 객체 수준 작업의 경우 게이트웨이 엔드포인트 또는 인터페이스 엔드포인트를 생성합니다. 자세한 내용은 [Create a gateway endpoint](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-s3.html#create-gateway-endpoint-s3)를 참조하세요.

1.  다음으로, 데이터 리소스를 구성하고 Amazon EMR 클러스터를 시작합니다. 자세한 내용은 [Getting started with Amazon EMR](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-gs.html)을 참조하세요.

1. 그런 다음 VPC 엔드포인트에서 DNS 이름을 선택하여 추가 구성으로 Spark 애플리케이션을 제출할 수 있습니다. 예를 들어 `spark.sql.catalog.ice_catalog.s3tables.endpoint` 및 `https://interface-endpoint.s3tables.us-east-1.vpce.amazonaws.com`입니다. 자세한 내용은 [Submit work to your Amazon EMR cluster](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-gs.html#emr-getting-started-manage)를 참조하세요.

## 듀얼 스택 엔드포인트를 사용하여 테이블 및 테이블 버킷 액세스
<a name="s3-tables-dual-stack-endpoints"></a>

S3 Tables는 AWS PrivateLink에 대한 듀얼 스택 연결을 지원합니다. 듀얼 스택 엔드포인트를 사용하면 네트워크가 지원하는 사항에 따라 IPv4 프로토콜 외에도 인터넷 프로토콜 버전 6(IPv6)을 사용하여 S3 Tables 버킷에 액세스할 수 있습니다. 다음 명명 규칙을 사용하여 듀얼 스택 엔드포인트를 통해 S3 버킷에 액세스할 수 있습니다.

```
s3tables.<region>.api.aws
```

다음은 VPC에서 IPv6을 통해 S3 Tables 및 테이블 버킷에 액세스하기 전에 알아야 할 몇 가지 사항입니다.
+ 테이블에 액세스하는 데 사용하는 클라이언트와 S3 클라이언트 모두 듀얼 스택이 활성화되어 있어야 합니다.
+ VPC 보안 그룹에는 IPv6 인바운드가 기본적으로 활성화되어 있지 않습니다. IPv6 액세스를 허용하려면 HTTPS(TCP 포트 443)를 허용하는 새 규칙을 보안 그룹에 추가해야 합니다. 자세한 내용은 *Amazon EC2 사용 설명서*의 [https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/changing-security-group.html#add-remove-security-group-rules](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/changing-security-group.html#add-remove-security-group-rules) 섹션을 참조하세요.
+ VPC에 IPv6 CIDR이 할당되지 않은 경우 VPC에 IPv6 CIDR 블록을 수동으로 추가해야 합니다. 자세한 내용은 *AWS PrivateLink 사용 설명서*의 [https://docs.aws.amazon.com/vpc/latest/userguide/vpc-migrate-ipv6-add.html](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-migrate-ipv6-add.html) 섹션을 참조하세요.
+ IP 주소 필터링 IAM 정책을 사용하는 경우 IPv6 주소를 처리하도록 업데이트해야 합니다. IAM를 통한 액세스 권한 관리에 대한 자세한 내용은 [Amazon S3의 ID 및 액세스 관리](https://docs.aws.amazon.com/AmazonS3/latest/userguide/security-iam.html) 섹션을 참조하세요.

S3 Tables용 듀얼 스택 엔드포인트를 사용하는 새 VPC 엔드포인트를 생성하려면 다음의 예제 CLI 명령을 사용합니다.

```
aws ec2 create-vpc-endpoint \
  --vpc-id vpc-id \
  --service-name com.amazonaws.aws-region.s3tables \
  --subnet-ids subnet-1 subnet-2 \
  --vpc-endpoint-type Interface \
  --ip-address-type dualstack \
  --dns-options "DnsRecordIpType=dualstack" \
  --security-group-ids sg-id \
  --region aws-region
```

VPC 엔드포인트 생성에 대한 자세한 내용은 VPC 사용 설명서의 [https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html) 섹션을 참조하세요.

네트워크가 IPv6를 지원하고 IPv6를 활성화하도록 VPC를 업데이트하려는 경우 다음 CLI 명령을 사용할 수 있습니다.

```
aws ec2 modify-vpc-endpoint \
  --vpc-endpoint-id vpce-id \
  --ip-address-type dualstack \
  --dns-options "DnsRecordIpType=dualstack" \
  --region aws-region
```

## VPC 네트워크 내에서 S3 Tables에 대한 액세스 제한
<a name="s3-tables-VPC-policy"></a>

리소스 기반 정책과 마찬가지로 테이블 및 테이블 버킷에 대한 액세스를 제어하는 엔드포인트 정책을 VPC 엔드포인트에 연결할 수 있습니다. 다음 예시에서 인터페이스 엔드포인트 정책은 특정 테이블 버킷으로만 액세스를 제한합니다.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "Policy141511512309",
    "Statement": [
        {
            "Sid": "Access-to-specific-bucket-only",
            "Principal": "*",
            "Action": "s3tables:*",
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-bucket",
                "arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-bucket/*"
            ]
        }
    ]
}
```

------

# S3 Tables의 보안 고려 사항 및 제한 사항
<a name="s3-tables-restrictions"></a>

다음 목록에서는 S3 Tables에서 지원되지 않거나 제한되는 보안 및 액세스 제어 기능을 설명합니다.
+ 퍼블릭 액세스 정책은 지원되지 않습니다. 사용자는 퍼블릭 액세스를 허용하도록 버킷 또는 테이블 정책을 수정할 수 없습니다.
+ 테이블과 연결된 객체에 액세스하기 위한 미리 서명된 URL은 지원되지 않습니다.
+ HTTP를 통한 요청은 지원되지 않습니다. Amazon S3는 HTTP를 통해 이루어진 모든 요청에 대해 자동으로 HTTP 리디렉션으로 응답하여 요청을 HTTPS로 업그레이드합니다.
+ REST API를 사용하여 액세스 포인트에 요청할 때는 AWS 서명 버전 4를 사용해야 합니다.
+ 인터넷 프로토콜 버전 6(IPv6)을 통한 요청은 테이블 스토리지 엔드포인트를 통한 객체 수준 작업에만 지원되며 테이블 및 버킷 수준 작업에는 지원되지 않습니다.
+ 테이블 버킷 및 테이블 액세스 정책은 크기가 20KB로 제한됩니다.