기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Amazon S3 오리진에 대한 액세스 제한
CloudFront Amazon S3 오리진에 인증된 요청을 보내는 두 가지 방법, 즉 원본 액세스 제어 (OAC) 와 원본 액세스 ID (OAI) 를 제공합니다. OAC는 다음을 지원하므로 OAC를 사용하는 것이 좋습니다.
-
2022년 12월 이후에 출시된 옵트인 리전을 포함하여 모든 AWS 리전 리전의 모든 Amazon S3 버킷
-
Amazon S3 AWS KMS를 사용한 서버 측 암호화(SSE-KMS)
-
Amazon S3에 대한 동적 요청(
PUT
및DELETE
)
오리진 액세스 ID(OAI)는 위 목록의 시나리오에서 작동하지 않거나 이러한 시나리오에서 추가 해결 방법이 필요합니다. 다음 주제에서는 Amazon S3 오리진에서 오리진 액세스 제어(OAC)를 사용하는 방법을 설명합니다. 오리진 액세스 ID(OAI)에서 오리진 액세스 제어(OAC)로 마이그레이션 하는 방법에 대한 자세한 내용은 오리진 액세스 ID(OAI)에서 오리진 액세스 제어(OAC)로 마이그레이션 섹션을 참조하세요.
참고
-
Amazon S3 버킷 오리진과 함께 CloudFront OAC를 사용하는 경우 Amazon S3 객체 소유권을 새 Amazon S3 버킷의 기본값인 버킷 소유자 적용으로 설정해야 합니다. ACL이 필요한 경우 버킷 소유자 선호 설정을 사용하여 를 통해 업로드된 객체에 대한 제어를 유지하십시오. CloudFront
-
오리진이 웹 사이트 엔드포인트로 구성된 Amazon S3 버킷인 경우 사용자 지정 CloudFront 오리진으로 설정해야 합니다. 즉, OAC(또는 OAI)를 사용할 수 없습니다. OAC는 Lambda @Edge 를 사용한 오리진 리디렉션을 지원하지 않습니다.
주제
새로운 오리진 액세스 제어 생성
다음 항목에 설명된 단계를 완료하여 에서 새 원본 액세스 제어를 설정하십시오. CloudFront
필수 조건
원본 액세스 제어 (OAC) 를 생성하고 설정하기 전에 Amazon S3 버킷 오리진을 사용하여 CloudFront 배포해야 합니다. 이 오리진은 웹 사이트 엔드포인트로 구성된 버킷이 아니라 일반 S3 버킷이어야 합니다. S3 버킷 오리진을 사용한 CloudFront 배포 설정에 대한 자세한 내용은 을 참조하십시오간단한 CloudFront 배포로 시작하기.
참고
OAC를 사용하여 S3 버킷 오리진을 보호하는 경우 특정 CloudFront 설정과 상관없이 Amazon S3 간의 통신은 항상 HTTPS를 통해 이루어집니다.
S3 버킷에 액세스할 수 있는 오리진 액세스 제어 권한 부여
원본 액세스 제어 (OAC) 를 생성하거나 CloudFront 배포에 설정하기 전에 OAC에 S3 버킷 오리진에 액세스할 권한이 있는지 확인하십시오. 배포를 생성한 후 CloudFront 배포 구성에서 S3 오리진에 OAC를 추가하기 전에 이 작업을 수행하십시오.
OAC에 S3 버킷에 액세스할 권한을 부여하려면 S3 버킷 정책을 사용하여 CloudFront 서비스 보안 주체 (cloudfront.amazonaws.com
) 가 버킷에 액세스하도록 허용하십시오. S3 오리진이 포함된 CloudFront 배포를 대신하여 요청하는 경우에만 버킷에 액세스할 수 있도록 CloudFront 하려면 정책의 Condition
요소를 사용하십시오.
버킷 정책 추가 또는 수정에 대한 자세한 내용은 Amazon S3 사용 설명서의 Amazon S3 콘솔을 사용하여 버킷 정책 추가를 참조하세요.
다음은 CloudFront OAC가 S3 오리진에 액세스할 수 있도록 허용하는 S3 버킷 정책의 예입니다.
예 OAC에 대한 읽기 전용 액세스를 허용하는 S3 버킷 정책 CloudFront
{ "Version": "2012-10-17", "Statement": { "Sid": "AllowCloudFrontServicePrincipalReadOnly", "Effect": "Allow", "Principal": { "Service": "cloudfront.amazonaws.com" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::
<S3 bucket name>
/*", "Condition": { "StringEquals": { "AWS:SourceArn": "arn:aws:cloudfront::<AWS 계정 ID>
:distribution/<CloudFront distribution ID>
" } } } }
예 OAC에 대한 읽기 및 쓰기 액세스를 허용하는 S3 버킷 정책 CloudFront
{ "Version": "2012-10-17", "Statement": { "Sid": "AllowCloudFrontServicePrincipalReadWrite", "Effect": "Allow", "Principal": { "Service": "cloudfront.amazonaws.com" }, "Action": [ "s3:GetObject", "s3:PutObject" ], "Resource": "arn:aws:s3:::
<S3 bucket name>
/*", "Condition": { "StringEquals": { "AWS:SourceArn": "arn:aws:cloudfront::<AWS 계정 ID>
:distribution/<CloudFront distribution ID>
" } } } }
SSE-KMS
S3 버킷 오리진의 객체가 AWS Key Management Service(SSE-KMS)로 서버 측 암호화를 사용하여 암호화된 경우 OAC에 AWS KMS 키를 사용할 권한이 있는지 확인해야 합니다. OAC에 KMS 키를 사용할 수 있는 권한을 부여하려면 KMS 키 정책에 명령문을 추가합니다. 키 정책을 수정하는 방법에 대한 자세한 내용은 AWS Key Management Service 개발자 안내서의 키 정책 변경을 참조하세요.
다음 예에서는 OAC에서 KMS 키를 사용할 수 있도록 허용하는 KMS 키 정책 명령문을 보여줍니다.
예 CloudFront OAC가 SSE-KMS용 KMS 키에 액세스할 수 있도록 허용하는 KMS 키 정책 설명
{ "Sid": "AllowCloudFrontServicePrincipalSSE-KMS", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::
:root", "Service": "cloudfront.amazonaws.com" }, "Action": [ "kms:Decrypt", "kms:Encrypt", "kms:GenerateDataKey*" ], "Resource": "*", "Condition": { "StringEquals": { "AWS:SourceArn": "arn:aws:cloudfront::
<AWS 계정 ID>
<AWS 계정 ID>
:distribution/<CloudFront distribution ID>
" } } }
오리진 액세스 제어 생성
,, 또는 API를 사용하여 원본 액세스 제어 (OAC) 를 생성할 수 있습니다. AWS Management Console AWS CloudFormation AWS CLI CloudFront
오리진 액세스 ID(OAI)에서 오리진 액세스 제어(OAC)로 마이그레이션
레거시 오리진 액세스 ID(OAI)에서 오리진 액세스 제어(OAC)로 마이그레이션하려면 먼저 S3 버킷 오리진을 업데이트하여 OAI와 OAC가 버킷 콘텐츠에 액세스할 수 있도록 합니다. 이렇게 하면 전환 중에 버킷에 대한 액세스 권한이 CloudFront 절대 손실되지 않습니다. OAI와 OAC가 모두 S3 버킷에 액세스할 수 있도록 하려면 각 보안 주체에 대해 하나씩 두 개의 명령문을 포함하도록 버킷 정책을 업데이트합니다.
다음 예제 S3 버킷 정책은 OAI와 OAC 모두가 S3 오리진에 액세스할 수 있도록 허용합니다.
예 OAI 및 OAC에 대한 읽기 전용 액세스를 허용하는 S3 버킷 정책
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCloudFrontServicePrincipalReadOnly", "Effect": "Allow", "Principal": { "Service": "cloudfront.amazonaws.com" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::
<S3 bucket name>
/*", "Condition": { "StringEquals": { "AWS:SourceArn": "arn:aws:cloudfront::<AWS 계정 ID>
:distribution/<CloudFront distribution ID>
" } } }, { "Sid": "AllowLegacyOAIReadOnly", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity<origin access identity ID>
" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::<S3 bucket name>
/*" } ] }
OAI와 OAC에 대한 액세스를 모두 허용하도록 S3 오리진의 버킷 정책을 업데이트한 후 OAI 대신 OAC를 사용하도록 배포 구성을 업데이트할 수 있습니다. 자세한 설명은 새로운 오리진 액세스 제어 생성 섹션을 참조하세요.
배포가 완전히 배포되면 버킷 정책에서 OAI에 대한 액세스를 허용하는 명령문을 제거할 수 있습니다. 자세한 설명은 S3 버킷에 액세스할 수 있는 오리진 액세스 제어 권한 부여 섹션을 참조하세요.
오리진 액세스 제어를 위한 고급 설정
CloudFront 원본 액세스 제어 기능에는 특정 사용 사례에만 사용할 수 있는 고급 설정이 포함되어 있습니다. 고급 설정이 특별히 필요한 경우가 아니면 권장 설정을 사용하세요.
오리진 액세스 제어에는 Signing behavior(서명 동작)(콘솔) 또는 SigningBehavior
(API, CLI 및 AWS CloudFormation)라는 설정이 포함되어 있습니다. 이 설정은 다음 옵션을 제공합니다.
- 항상 오리진 요청에 서명(권장 설정)
-
이 설정의 이름은 콘솔에서 Sign requests(recommended)(서명 요청(권장))이고 API, CLI, AWS CloudFormation에서
always
이며, 이 설정을 사용하는 것이 좋습니다. 이 설정을 사용하면 S3 버킷 오리진으로 보내는 모든 요청에 CloudFront 항상 서명합니다. - 오리진 요청 서명 안 함
-
이 설정의 이름은 콘솔에서 Do not sign requests(요청 서명 안 함)이고 API, CLI, AWS CloudFormation에서
never
입니다. 이 오리진 액세스 제어를 사용하는 모든 배포의 모든 오리진에 대한 오리진 액세스 제어를 끄려면 이 설정을 사용합니다. 오리진 액세스 제어를 사용하는 모든 오리진 및 배포에서 오리진 액세스 제어를 하나씩 제거하는 것과 비교하여 시간과 노력을 절약할 수 있습니다. 이 설정을 사용하면 S3 버킷 오리진으로 보내는 요청에 서명하지 CloudFront 않습니다.주의
이 설정을 사용하려면 S3 버킷 오리진에 공개적으로 액세스할 수 있어야 합니다. 공개적으로 액세스할 수 없는 S3 버킷 오리진에 이 설정을 사용하면 오리진에 액세스할 CloudFront 수 없습니다. S3 버킷 오리진은 오류를 최종 사용자에게 CloudFront 반환하고 해당 오류를 최종 사용자에게 CloudFront 전달합니다.
- 뷰어(클라이언트)
Authorization
헤더 재정의 안 함 -
이 설정의 이름은 콘솔에서 Do not override authorization header(승인 헤더 재정의 안 함)이고 API, CLI, AWS CloudFormation에서
no-override
입니다. 해당 최종 사용자 요청에Authorization
헤더가 포함되지 않은 경우에만 원본 요청에 CloudFront 서명하려는 경우 이 설정을 사용하십시오. 이 설정을 사용하면 최종Authorization
사용자 요청의 헤더가 있을 때는 해당 헤더를 CloudFront 전달하지만, 최종 사용자 요청에 헤더가 포함되지 않은 경우에는 원본 요청에 서명 (자체Authorization
Authorization
헤더 추가) 합니다.주의
뷰어 요청에서
Authorization
헤더를 전달하려면 이 오리진 액세스 제어와 연결된 S3 버킷 오리진을 사용하는 모든 캐시 동작에 대한Authorization
헤더를 캐시 정책에 반드시 추가해야 합니다.
오리진 액세스 ID 사용(레거시, 권장하지 않음)
CloudFront 원본 액세스 ID (OAI) 는 원본 액세스 제어 (OAC) 와 유사한 기능을 제공하지만 모든 시나리오에서 작동하지는 않습니다. 따라서 OAC를 대신 사용하는 것이 좋습니다. 특히 OAI는 다음을 지원하지 않습니다.
-
옵트인 리전을 포함한 모든 AWS 리전의 Amazon S3 버킷
-
Amazon S3 AWS KMS를 사용한 서버 측 암호화(SSE-KMS)
-
Amazon S3에 대한 동적 요청(
PUT
,POST
또는DELETE
) -
2022년 12월 이후 출시된 새로운 AWS 리전
OAI에서 OAC로 마이그레이션하는 방법에 대한 자세한 내용은 오리진 액세스 ID(OAI)에서 오리진 액세스 제어(OAC)로 마이그레이션 섹션을 참조하세요.
OAI를 생성하거나 CloudFront 콘솔을 사용하여 배포에 OAI를 추가할 때 Amazon S3 버킷 정책을 자동으로 업데이트하여 OAI에 버킷 액세스 권한을 부여할 수 있습니다. 또는 버킷 정책을 수동으로 생성하거나 업데이트하도록 선택할 수 있습니다. 어떤 방법을 사용하든 권한을 검토하여 다음 사항을 확인하세요.
-
CloudFront OAI는 파일을 요청하는 최종 사용자를 대신하여 버킷에 있는 파일에 액세스할 수 있습니다. CloudFront
-
시청자는 Amazon S3 URL을 사용하여 외부에서 파일에 액세스할 수 없습니다. CloudFront
중요
CloudFront 지원하는 모든 HTTP 메서드를 수락하고 CloudFront 전달하도록 구성하는 경우 CloudFront OAI에 원하는 권한을 부여해야 합니다. 예를 들어 해당 DELETE
방법을 사용하는 요청을 수락하고 전달하도록 CloudFront 구성한 경우, 최종 사용자가 원하는 파일만 삭제할 수 있도록 DELETE
요청을 적절하게 처리하도록 버킷 정책을 구성하십시오.
Amazon S3 버킷 정책 사용
다음과 같은 방법으로 버킷 정책을 생성하거나 업데이트하여 Amazon S3 버킷의 파일에 대한 CloudFront OAI 액세스 권한을 부여할 수 있습니다.
-
Amazon S3 콘솔
에서 Amazon S3 버킷의 Permissions(권한) 탭 사용 -
Amazon S3 PutBucketPolicyAPI에서 사용.
-
CloudFront 콘솔
사용 CloudFront 콘솔에서 오리진 설정에 OAI를 추가할 때 [예, 버킷 정책 업데이트] 를 선택하여 사용자 대신 버킷 정책을 CloudFront 업데이트하도록 지시할 수 있습니다.
버킷 정책을 수동으로 업데이트하는 경우 다음 사항을 확인하세요.
-
정책에서 올바른 OAI를
Principal
로 지정합니다. -
최종 사용자를 대신해 객체에 액세스하는 데 필요한 권한을 OAI에 부여합니다.
자세한 내용은 다음 단원을 참조하세요.
버킷 정책에서 OAI를 Principal
로 지정
Amazon S3 버킷 정책에서 OAI를 Principal
로 지정하려면 OAI ID가 포함된 OAI의 Amazon 리소스 이름(ARN)을 사용합니다. 예:
"Principal": { "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity
<origin access identity ID>
" }
CloudFront 콘솔의 보안, 원본 액세스, ID (레거시) 에서 OAI ID를 찾을 수 있습니다. 또는 ListCloudFrontOriginAccessIdentitiesAPI에서 CloudFront 사용할 수도 있습니다.
OAI에 권한 부여
OAI에 Amazon S3 버킷의 객체에 액세스할 수 있는 권한을 부여하려면 정책에서 특정 Amazon S3 API 작업과 관련된 작업을 사용합니다. 예를 들어 s3:GetObject
작업을 통해 OAI가 버킷의 객체를 읽을 수 있습니다. 자세한 내용은 다음 섹션의 예제를 참조하거나 Amazon Simple Storage Service 사용 설명서의 Amazon S3 작업을 참조하세요.
Amazon S3 버킷 정책 예제
다음 예는 CloudFront OAI가 S3 버킷에 액세스할 수 있도록 허용하는 Amazon S3 버킷 정책을 보여줍니다.
CloudFront 콘솔의 보안, 원본 액세스, ID (레거시) 에서 OAI ID를 찾을 수 있습니다. 또는 ListCloudFrontOriginAccessIdentitiesAPI에서 CloudFront 사용할 수도 있습니다.
예 OAI에 읽기 액세스 권한을 부여하는 Amazon S3 버킷 정책
다음 예제에서는 OAI가 지정된 버킷(s3:GetObject
)의 객체를 읽을 수 있도록 허용합니다.
{ "Version": "2012-10-17", "Id": "PolicyForCloudFrontPrivateContent", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity
<origin access identity ID>
" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::<S3 bucket name>
/*" } ] }
예 OAI에 읽기 및 쓰기 액세스 권한을 부여하는 Amazon S3 버킷 정책
다음 예제에서는 OAI가 지정된 버킷(s3:GetObject
및 s3:PutObject
)의 객체를 읽고 쓸 수 있도록 허용합니다. 이를 통해 뷰어는 Amazon S3 버킷에 파일을 업로드할 수 CloudFront 있습니다.
{ "Version": "2012-10-17", "Id": "PolicyForCloudFrontPrivateContent", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity
<origin access identity ID>
" }, "Action": [ "s3:GetObject", "s3:PutObject" ], "Resource": "arn:aws:s3:::<S3 bucket name>
/*" } ] }
Amazon S3 객체 ACL 사용(권장되지는 않음)
중요
Amazon S3 버킷 정책을 사용하여 OAI에 S3 버킷에 대한 액세스 권한을 부여하는 것이 좋습니다. 이 섹션에 설명된 대로 액세스 제어 목록(ACL)을 사용할 수 있지만, 권장하지는 않습니다.
Amazon S3는 S3 객체 소유권을 버킷 소유자 적용으로 설정할 것을 권장합니다. 즉, 버킷 및 그 안의 객체에 대해 ACL이 비활성화됩니다. 객체 소유권에 이 설정을 적용하는 경우 버킷 정책을 사용하여 OAI에 대한 액세스 권한을 부여해야 합니다(이전 섹션 참조).
다음 섹션은 ACL이 필요한 레거시 사용 사례에만 해당됩니다.
다음과 같은 방법으로 파일의 ACL을 생성하거나 업데이트하여 Amazon S3 버킷의 파일에 대한 CloudFront OAI 액세스 권한을 부여할 수 있습니다.
-
Amazon S3 콘솔
에서 Amazon S3 객체의 Permissions(권한) 탭 사용 -
Amazon S3 PutObjectAclAPI에서 사용.
ACL을 사용하여 OAI에 액세스 권한을 부여하는 경우 Amazon S3 정식 사용자 ID를 사용하여 OAI를 지정해야 합니다. CloudFront 콘솔의 보안, 원본 액세스, ID (레거시) 에서 이 ID를 찾을 수 있습니다. CloudFront API를 사용하는 경우 OAI 생성 시 반환된 S3CanonicalUserId
요소 값을 사용하거나 API를 호출하세요 ListCloudFrontOriginAccessIdentities. CloudFront
새 Amazon S3 리전에서는 인증된 요청에 대해 서명 버전 4를 사용해야 합니다. (각 Amazon S3 리전에서 지원되는 서명 버전은 AWS 일반 참조의 Amazon Simple Storage Service 엔드포인트 및 할당량을 참조하세요.) 오리진 액세스 ID를 사용 중이고 버킷이 서명 버전 4가 필요한 리전 중 하나에 있는 경우 다음에 유의해야 합니다.
-
DELETE
,GET
,HEAD
,OPTIONS
및PATCH
요청은 자격과 관계없이 지원됩니다. -
POST
요청은 지원되지 않습니다.