사용자가 Amazon CloudFront 배포를 통해서만 객체에 액세스하도록 Amazon Simple Storage Service(S3) 버킷에 대한 액세스를 제한하려고 합니다.
해결 방법
중요: 시작하기 전에 CloudFront 배포의 Amazon S3 오리진이 REST API 엔드포인트로 구성되었는지 확인하세요. AWSDOC-EXAMPLE-BUCKET.s3.amazonaws.com을 예로 들 수 있습니다. 이 해결 방법은 웹 사이트 엔드포인트로 구성된 S3 오리진에는 적용되지 않습니다. AWSDOC-EXAMPLE-BUCKET.s3-website-us-east-1.amazonaws.com을 예로 들 수 있습니다. 자세한 내용은 CloudFront를 사용하여 Amazon S3에 호스팅된 정적 웹 사이트를 제공하려면 어떻게 해야 하나요?를 참조하세요.
옵션 1(모범 사례): CloudFront 오리진 액세스 제어(OAC) 생성
- CloudFront 콘솔을 엽니다.
- 배포 목록에서 액세스를 제한하려는 S3 버킷의 콘텐츠를 서비스하는 배포를 선택합니다.
- 오리진 탭을 선택합니다.
- S3 오리진을 선택하고 Edit(편집)을 선택합니다.
- Origin Access(오리진 액세스)에서 Origin access control settings(오리진 액세스 제어 설정)(권장)을 선택합니다.
- Origin access control(오리진 액세스 제어)의 경우 기존 OAC를 선택하거나 Create Control(제어 생성) 설정을 선택합니다.
- 대화 상자에서 컨트롤 설정의 이름을 지정합니다. 기본 설정인 **서명 요청(권장)**을 그대로 두는 것이 좋습니다. 그런 다음 생성을 선택합니다.
- S3 버킷 액세스의 경우 S3 버킷에 버킷 정책을 적용합니다. 정책 복사를 선택한 다음 저장을 선택합니다.
- S3 버킷 권한으로 이동을 선택하면 S3 버킷 콘솔로 이동합니다.
- 변경 사항 저장을 선택합니다.
- Amazon S3 콘솔의 버킷 목록에서 CloudFront 배포의 오리진 버킷을 선택합니다.
- 권한 탭을 선택합니다.
- 버킷 정책에서 다음과 같은 문이 표시되는지 확인합니다.
{
"Version": "2012-10-17",
"Statement": {
"Sid": "AllowCloudFrontServicePrincipalReadOnly",
"Effect": "Allow",
"Principal": {
"Service": "cloudfront.amazonaws.com"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*",
"Condition": {
"StringEquals": {
"AWS:SourceArn": "arn:aws:cloudfront::111122223333:distribution/EDFDVBD6EXAMPLE"
}
}
}
}
CloudFront OAC가 버킷에서 객체를 읽을 수 있도록 하려면 선행 문을 추가해야 합니다.
참고: CloudFront OAC를 사용하여 버킷에 대한 액세스를 제한한 후에 선택적으로 AWS WAF를 통합하여 또 다른 보안 계층을 추가할 수 있습니다.
옵션 2: 레거시 CloudFront 오리진 액세스 ID(OAI) 생성
- CloudFront 콘솔을 엽니다.
- 배포 목록에서 액세스를 제한하려는 S3 버킷의 콘텐츠를 서비스하는 배포를 선택합니다.
- 오리진 탭을 선택합니다.
- S3 오리진을 선택하고 Edit(편집)을 선택합니다.
- 오리진 액세스에서 Legacy access identities(리거시 액세스 ID)를 선택합니다.
- 오리진 액세스 ID 드롭다운 목록에서 오리진 액세스 ID 이름을 선택하거나 Create new OAI(새 OAI 생성)을 선택합니다.
- 대화 상자에서 새 오리진 액세스 ID의 이름을 지정하고 Create(생성)을 선택합니다.
- 버킷 정책에서 예, 버킷 정책을 업데이트합니다를 선택합니다.
- 변경 내용 저장을 선택합니다.
- Amazon S3 콘솔의버킷 목록에서 CloudFront 배포의 오리진 버킷을 선택합니다.
- 권한 탭을 선택합니다.
- 버킷 정책에서 다음과 같은 문이 표시되는지 확인합니다.
{{
"Sid": "1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity EAF5XXXXXXXXX"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::AWSDOC-EXAMPLE-BUCKET/*"
}
참고: CloudFront OAI에서 버킷에 대한 액세스를 금지하는 **"Effect": "Deny"**가 포함된 문이 있는지 버킷 정책을 검토합니다. CloudFront OAI가 버킷의 객체에 액세스할 수 있도록 해당 문을 수정합니다.
또한 CloudFront OAI가 아닌 소스에서 버킷으로의 액세스를 허용하는 **"Effect": "Allow"**가 포함된 문이 있는지 버킷 정책을 검토합니다. 각 사용 사례에 따라 해당 문을 수정하세요.
관련 정보
배포 생성
Amazon S3의 Identity and Access Management