

# Athena에서 Amazon S3에 대한 액세스 제어
<a name="s3-permissions"></a>

ID 기반 정책, 버킷 리소스 정책, 액세스 포인트 정책 또는 위 정책들의 조합을 사용하여 Amazon S3 위치에 대한 액세스 권한을 부여할 수 있습니다. 액터가 Athena와 상호 작용하면 해당 권한이 Athena를 통해 전달되어 Athena가 액세스할 수 있는 대상이 결정됩니다. 즉, 사용자는 Athena에서 Amazon S3 버킷을 쿼리하려면 Amazon S3 버킷에 액세스할 수 있는 권한이 있어야 합니다.

IAM 정책을 사용할 때마다 IAM 모범 사례를 따라야 합니다. 자세한 내용은 *IAM 사용 설명서*의 [IAM 보안 모범 사례](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)를 참조하세요.

Amazon S3에 대한 요청은 `aws:SourceIp`에 지정된 소스 IP가 아니라 Athena의 프라이빗 IPv4 주소에서 전송된다는 점에 유의하세요. 따라서 주어진 IAM 정책에서는 `aws:SourceIp` 조건을 사용하여 Amazon S3 작업에 대한 액세스를 거부할 수 없습니다. 또한 `aws:SourceVpc` 또는 `aws:SourceVpce` 조건 키에 따라 Amazon S3 리소스에 대한 액세스를 제한하거나 허용할 수 없습니다.

**참고**  
IAM Identity Center 인증을 사용하는 Athena 작업 그룹의 경우 신뢰할 수 있는 ID 전파 ID를 사용하도록 S3 Access Grants를 구성해야 합니다. 자세한 내용은 **Amazon Simple Storage Service 사용 설명서의 [S3 Access Grants and directory identities](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-grants-directory-ids.html)를 참조하십시오.

**Topics**
+ [ID 기반 정책](#s3-permissions-identity-based-policies)
+ [버킷 리소스 정책](#s3-permissions-bucket-resource-policies)
+ [액세스 포인트 정책](#s3-permissions-aliases)
+ [CalledVia 컨텍스트 키](#s3-permissions-calledvia)
+ [추가 리소스](#s3-permissions-additional-resources)

## 자격 증명 기반 정책을 사용하여 Amazon S3 버킷에 대한 액세스 제어
<a name="s3-permissions-identity-based-policies"></a>

자격 증명 기반 정책은 IAM 사용자, 그룹 또는 역할에 연결됩니다. 이러한 정책으로 자격 증명이 수행할 수 있는 작업(권한)을 지정할 수 있습니다. 자격 증명 기반 정책을 사용하여 Amazon S3 버킷에 대한 액세스를 제어할 수 있습니다.

다음 자격 증명 기반 정책은 특정 Amazon S3 버킷에 있는 객체에 대해 `Read` 및 `Write`의 액세스를 허용합니다. 이 정책을 사용하려면 *기울임꼴 자리 표시자 텍스트*를 자체 값으로 바꿉니다.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ListObjectsInBucket",
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket"
            ]
        },
        {
            "Sid": "AllObjectActions",
            "Effect": "Allow",
            "Action": "s3:*Object",
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket/*"
            ]
        }
    ]
}
```

------

## 버킷 리소스 정책을 사용하여 Amazon S3 버킷에 대한 액세스 제어
<a name="s3-permissions-bucket-resource-policies"></a>

Amazon S3 버킷 정책을 사용하면 적절한 권한을 가진 사용자만 객체에 액세스할 수 있도록 하여 버킷의 객체 액세스를 보호할 수 있습니다. Amazon S3 정책 생성에 대한 지침은 *Amazon S3 사용 설명서*의 [Amazon S3 콘솔을 사용하여 버킷 정책 추가](https://docs.aws.amazon.com/AmazonS3/latest/userguide/add-bucket-policy.html)를 참조하세요.

다음 권한 정책 예제는 `environment: production` 태그 키 및 값이 있는 객체만 사용자가 읽을 수 있도록 제한합니다. 이 정책 예제는 `s3:ExistingObjectTag` 조건 키를 사용하여 태그 키 및 값을 지정합니다.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:role/JohnDoe"
            },
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:GetObjectVersion"
            ],
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
            "Condition": {
                "StringEquals": {
                    "s3:ExistingObjectTag/environment": "production"
                }
            }
        }
    ]
}
```

------

더 많은 버킷 정책 예제는 [Amazon S3 사용 설명서](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies.html)의 *Amazon S3 버킷 정책 예제*를 참조하세요.

## Amazon S3 액세스 포인트를 사용하여 버킷 액세스를 보다 정밀하게 제어
<a name="s3-permissions-aliases"></a>

Amazon S3 버킷에 공유 데이터 세트이 있는 경우 수백 개의 사용 사례에 대해 액세스를 관리하는 하나의 버킷 정책을 유지하는 것은 어려울 수 있습니다.

Amazon S3 버킷 액세스 포인트, 정책 및 별칭은 이 문제를 해결하는 데 도움이 됩니다. 버킷에는 여러 액세스 포인트가 있을 수 있으며, 각 액세스 포인트는 서로 다른 방식으로 버킷에 대한 액세스 권한을 제어하는 정책이 있습니다.

생성한 각 액세스 포인트에 대해 Amazon S3는 액세스 포인트를 나타내는 별칭을 생성합니다. 별칭은 Amazon S3 버킷 이름 형식이므로 Athena에서 `CREATE TABLE` 문의 `LOCATION` 절에 이 별칭을 사용할 수 있습니다. 이렇게 하면 버킷에 대한 Athena의 액세스는 별칭이 나타내는 액세스 포인트에 대한 정책에 의해 제어됩니다.

자세한 내용은 *Amazon S3 사용 설명서*의 [Amazon S3의 테이블 위치 지정](tables-location-format.md) 및 [액세스 포인트 사용](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-points.html)을 참조하세요.

## CalledVia 컨텍스트 키를 사용하여 Athena에서만 다른 서비스를 직접적으로 호출하도록 허용
<a name="s3-permissions-calledvia"></a>

보안 강화를 위해 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-calledvia](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-calledvia) 전역 조건 컨텍스트 키를 사용할 수 있습니다. `aws:CalledVia` 조건 키에는 다른 서비스를 직접적으로 호출할 수 있는 서비스 목록이 포함되어 있습니다. 예를 들어 `aws:CalledVia` 컨텍스트 키에 Athena 서비스 보안 주체 이름 `athena.amazonaws.com`을 지정하여 Athena에서 직접적으로 호출하는 경우에만 AWS Lambda에 대한 `InvokeFunction` 호출을 허용할 수 있습니다. 자세한 내용은 [Athena용 CalledVia 컨텍스트 키 사용](security-iam-athena-calledvia.md) 섹션을 참조하세요.

## 추가 리소스
<a name="s3-permissions-additional-resources"></a>

Amazon S3 액세스 권한을 부여하는 방법에 대한 자세한 내용과 예는 다음 리소스를 참조하세요.
+ [예제 시연: *Amazon S3 사용 설명서*의 액세스 관리](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-walkthroughs-managing-access.html).
+ AWS 지식 센터의 [Amazon S3 버킷에 있는 객체에 대해 계정 간 액세스 권한을 제공하려면 어떻게 해야 합니까?](https://aws.amazon.com/premiumsupport/knowledge-center/cross-account-access-s3/).
+ [Athena에서 Amazon S3 버킷에 대한 크로스 계정 액세스 구성](cross-account-permissions.md).