Amazon Simple Storage Service(Amazon S3) 버킷에 대한 액세스를 제한하여 사용자가 Amazon CloudFront 배포를 통해서만 객체에 액세스할 수 있도록 하고 싶습니다.
해결 방법
중요: 시작하기 전에 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 오리진 액세스 제어(OAC)를 생성하려면 다음 단계를 완료합니다.
- CloudFront 콘솔을 엽니다.
- 배포 목록에서 액세스를 제한하려는 S3 버킷의 콘텐츠를 제공하는 배포를 선택합니다.
- 오리진 탭을 선택합니다.
- S3 오리진을 선택한 다음 편집을 선택합니다.
- 오리진 액세스에서 **오리진 액세스 제어 설정(권장)**을 선택합니다.
- 오리진 액세스 제어의 경우 기존 OAC를 선택하거나 제어 생성 설정을 선택합니다.
- 대화 상자에서 제어 설정의 이름을 지정합니다. 기본 설정을 **서명 요청(권장됨)**으로 유지하는 것이 좋습니다.
- 생성을 선택합니다.
- 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가 버킷에서 객체를 읽을 수 있도록 하려면 앞의 문을 추가해야 합니다.
참고: 버킷에 대한 액세스를 제한한 후 또 다른 보안 계층을 위해 AWS WAF를 통합할 수 있습니다.
옵션 2: 레거시 CloudFront OAI 생성
레거시 CloudFront 오리진 액세스 ID(OAI)를 생성하려면 다음 단계를 완료합니다.
- CloudFront 콘솔을 엽니다.
- 배포 목록에서 액세스를 제한하려는 S3 버킷의 콘텐츠를 제공하는 배포를 선택합니다.
- 오리진 탭을 선택합니다.
- S3 오리진을 선택한 다음 편집을 선택합니다.
- 오리진 액세스의 경우 레거시 액세스 ID를 선택합니다.
- 오리진 액세스 ID 드롭다운 목록에서 오리진 액세스 ID 이름을 선택합니다. 또는 새 OAI 생성을 선택합니다.
- 대화 상자에서 새 오리진 액세스 ID의 이름을 지정하고 생성을 선택합니다.
- 버킷 정책에서 예, 버킷 정책을 업데이트합니다를 선택합니다.
- 변경 사항 저장을 선택합니다.
- 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의 ID 및 액세스 관리