Amazon Simple Storage Service(Amazon S3) 버킷에 대한 액세스를 제한하여 사용자가 Amazon CloudFront 배포를 통해서만 객체에 액세스할 수 있도록 하고 싶습니다.
해결 방법
S3 버킷에 대한 액세스를 제한하려면 오리진 액세스 제어(OAC)를 만들거나 레거시 오리진 액세스 ID(OAI)를 만들어야 합니다. 레거시 OAI 대신 OAC를 만드는 것이 가장 좋습니다.
중요: 시작하기 전에 CloudFront 배포의 Amazon S3 오리진을 AWSDOC-EXAMPLE-BUCKET.s3.amazonaws.com과 같은 REST API 엔드포인트로 구성했는지 확인하십시오. 이 해결 방법은 웹 사이트 엔드포인트로 구성한 Amazon S3 오리진(예: AWSDOC-EXAMPLE-BUCKET.s3-website-us-east-1.amazonaws.com)에는 적용되지 않습니다. 자세한 내용은 CloudFront를 사용하여 Amazon S3에 호스팅되는 정적 웹 사이트를 제공하려면 어떻게 해야 합니까?를 참조하십시오.
CloudFront OAC 만들기
다음 단계를 완료하십시오.
- CloudFront 콘솔을 엽니다.
- 탐색 창에서 배포를 선택한 다음, 액세스를 제한하려는 S3 버킷의 콘텐츠를 제공하는 배포를 선택합니다.
- 오리진 탭을 선택합니다.
- Amazon S3 오리진을 선택한 다음, 편집을 선택합니다.
- 오리진 액세스에서 **오리진 액세스 제어 설정(권장)**을 선택합니다.
- 오리진 액세스 제어에서 기존 OAC를 선택합니다. 또는 새 OAC 생성을 선택합니다.
- 대화 상자에 제어 설정의 이름을 입력합니다. 기본 설정을 **서명 요청(권장)**으로 유지하는 것이 가장 좋습니다.
- 생성을 선택합니다.
- 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"
}
}
}
}
참고: DOC-EXAMPLE-BUCKET을 버킷 이름으로 바꾸고 arn:aws:cloudfront::111122223333:distribution/EDFDVBD6EXAMPLE을 CloudFront 배포 Amazon 리소스 이름(ARN)으로 바꾸십시오. CloudFront OAC가 버킷에서 객체를 읽을 수 있도록 하려면 위 명령문을 버킷 정책에 추가해야 합니다. 버킷에 대한 액세스를 제한한 후 또 다른 보안 계층을 위해 AWS WAF를 통합할 수 있습니다.
레거시 CloudFront OAI 만들기
다음 단계를 완료하십시오.
- CloudFront 콘솔을 엽니다.
- 탐색 창에서 배포를 선택한 다음, 액세스를 제한하려는 S3 버킷의 콘텐츠를 제공하는 배포를 선택합니다.
- 오리진 탭을 선택합니다.
- Amazon S3 오리진을 선택한 다음, 편집을 선택합니다.
- 오리진 액세스에서 레거시 액세스 ID를 선택합니다.
- 오리진 액세스 ID 드롭다운 목록에서 OAI 이름을 선택합니다. 또는 새 OAI 생성을 선택합니다.
- 대화 상자에서 새 OAI의 이름을 입력한 다음, 생성을 선택합니다.
- 버킷 정책에서 예, 버킷 정책 업데이트를 선택합니다.
- 변경 사항 저장을 선택합니다.
- 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/*"
}
참고: arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity EAF5XXXXXXXXX를 CloudFront 배포 ARN으로, AWS****DOC-EXAMPLE-BUCKET을 버킷 이름으로 바꾸십시오. CloudFront OAI에서 버킷에 대한 액세스를 차단하는 **"Effect": "Deny"**가 포함된 명령문이 있는지 버킷 정책을 검토하십시오. CloudFront OAI가 버킷의 객체에 액세스할 수 있도록 작업을 허용으로 변경합니다. 또한 CloudFront OAI가 아닌 모든 소스에서 버킷에 대한 액세스를 허용하는 **"Effect": **"Allow"가 포함된 명령문이 있는지 버킷 정책을 검토하십시오. 사용 사례에 맞게 해당 명령문을 수정합니다.
관련 정보
배포판 만들기
Amazon S3의 ID 및 액세스 관리