TLS 1.2 이상을 사용하지 않는 고객에게 Amazon S3 버킷에 대한 액세스를 허용하려면 어떻게 해야 합니까?
제 고객은 TLS 버전 1.2 이상을 사용하지 않기 때문에 Amazon Simple Storage Service(Amazon S3) 버킷에 저장된 콘텐츠에 액세스할 수 없습니다. 이러한 고객이 TLS 1.0 또는 1.1을 사용하여 내 Amazon S3 버킷의 콘텐츠에 액세스하도록 허용하려면 어떻게 해야 합니까?
간략한 설명
AWS는 모든 AWS API 엔드포인트에서 TLS 1.2 이상의 사용하도록 하고 있습니다. AWS 서비스에 계속 연결하려면 TLS 1.0 또는 1.1을 사용하는 모든 소프트웨어를 업데이트해야 합니다.
해결 방법
Amazon CloudFront를 사용하면 CloudFront 배포와 Amazon S3 간에 사용되는 TLS 프로토콜에서 고객을 추상화하여 이전 TLS 버전을 사용할 수 있습니다.
OAC를 사용하여 CloudFront 배포 생성
CloudFront를 사용하면 S3 버킷에 대한 익명 및 공개 요청을 지원할 수 있습니다. 또는 S3 버킷에 액세스하기 위해 서명된 요청을 요구해야만 S3 버킷을 비공개로 설정하고 CloudFront를 통해 액세스할 수 있습니다.
S3 버킷에 대한 익명 및 퍼블릭 요청 지원
참고: 다음 예에서는 이미 사용 중인 S3 버킷을 가지고 있다고 가정합니다. S3 버킷이 없는 경우 버킷을 한 개 생성합니다.
CloudFront 배포를 생성하려면 다음 단계를 수행합니다.
- CloudFront 콘솔을 엽니다.
- **배포 생성(Create Distribution)**을 선택합니다.
- 오리진에서 오리진 도메인에 대해 드롭다운 목록에서 S3 버킷의 REST API 엔드포인트를 선택합니다.
- **뷰어 프로토콜 정책(Viewer Protocol Policy)**에서 **HTTP에서 HTTPS로의 리디렉션(Redirect HTTP to HTTPS)**을 선택합니다.
- 허용된 HTTP 엔드포인트(Allowed HTTP endpoints)에서 읽기 요청을 지원하려면 GET, HEAD, OPTIONS를 선택합니다.
- 오리진 액세스(Origin access) 섹션에서 **오리진 액세스 제어 설정(Origin access control settings)(권장)**을 선택합니다.
- **제어 설정 생성(Create control setting)**을 선택하고 기본 이름을 사용합니다. 서명 동작에 대해 **요청 서명(Sign requests)(권장)**을 선택하고 **생성(Create)**을 선택합니다. OAC 권장 설정은 시청자의 요청을 자동으로 인증합니다.
- 드롭다운 목록에서 자격 증명(identity)을 선택합니다**.** 배포가 생성된 후**,** OAC에 대한 액세스를 제한하도록 버킷 정책을 업데이트합니다.
- **기본 캐시 동작(Default cache behavior)**의 **뷰어(Viewer)**에서 **뷰어 프로토콜 정책(Viewer Protocol Policy)**에 대해 **HTTP를 HTTPS로 리디렉션하기(Redirect HTTP to HTTPS)**를 선택하고 다른 설정은 기본값으로 유지합니다.
- **캐시 키 및 오리진 요청(Cache key and origin requests)**에서 **캐시 정책 및 오리진 요청 정책(Cache policy and origin request policy)(권장)**을 선택합니다. 그런 다음 캐시 정책에 CachingOptimized를 사용하고 오리진 요청 정책에는 CORS-S3Origin을 사용합니다.
- **배포 생성(Create distribution)**을 선택한 다음 상태가 **활성화(Enabled)**로 업데이트될 때까지 기다립니다.
S3 버킷에 액세스하려면 서명된 요청이 필요함
서명된 요청만 지원하여 S3 버킷에 보안을 추가합니다. 서명된 요청을 사용하는 경우 OAC는 인증 파라미터를 따라 S3 오리진에 전달하고, S3 오리진은 익명 요청을 거부합니다.
S3 버킷에 액세스하기 위해 서명된 요청이 필요한 CloudFront 배포를 생성하려면 다음 단계를 수행합니다.
- CloudFront 콘솔을 엽니다.
- **배포 생성(Create Distribution)**을 선택합니다.
- 오리진에서 오리진 도메인에 대해 드롭다운 목록에서 S3 버킷의 REST API 엔드포인트를 선택합니다.
- **뷰어 프로토콜 정책(Viewer Protocol Policy)**에서 **HTTP에서 HTTPS로의 리디렉션(Redirect HTTP to HTTPS)**을 선택합니다.
- 허용된 HTTP 엔드포인트(Allowed HTTP endpoints)에서 읽기 요청을 지원하려면 GET, HEAD, OPTIONS를 선택합니다.
- 오리진 액세스(Origin access) 섹션에서 **오리진 액세스 제어 설정(Origin access control settings)(권장)**을 선택합니다.
- 요청에 서명하지 않음(Do not sign requests) 옵션을 선택하여 서명되지 않은 모든 요청을 차단합니다.
참고: 모든 고객이 요청에 서명해야 S3 오리진에서 권한을 평가하여 서명되지 않은 요청을 차단할 수 있습니다. - 사용자 지정 캐시 정책을 생성하여 고객의 권한 부여 헤더를 오리진에 전달합니다.
- **캐시 키 및 오리진 요청(Cache key and origin requests)**에서 **캐시 정책 및 오리진 요청 정책(Cache policy and origin request policy)**을 선택합니다.
- 정책 생성을 선택합니다.
- 이름(Name) 섹션에 캐시 정책의 이름을 입력합니다.
- **캐시 키 설정(Cache key settings)**에서 **헤더(Headers)**에 대해 **다음 헤더 포함(Include the following headers)**을 선택합니다.
- 그런 다음 **헤더 추가(Add Headers)**에서 **권한 부여(Authorization)**를 선택합니다.
- **생성(Create)**을 선택합니다.
고객의 보안 정책 제어
CloudFront의 보안 정책을 제어하려면 사용자 지정 도메인이 있어야 합니다. 배포에 사용할 대체 도메인 이름을 지정하는 것이 가장 좋습니다. AWS Certificate Manager(ACM)에 구성된 사용자 지정 SSL 인증서를 사용하는 것도 모범 사례입니다. 이렇게 하면 보안 정책을 더 잘 제어할 수 있고 고객이 TLS 1.0을 계속 사용할 수 있습니다. 자세한 내용은 최종 사용자와 CloudFront 간에 지원되는 프로토콜 및 암호 단원을 참조하세요.
기본 *.cloudfront.net 도메인 이름을 사용하는 경우 CloudFront는 자동으로 인증서를 프로비저닝하고 TLS 1.0 및 1.1을 허용하도록 보안 정책을 설정합니다. 자세한 내용은 배포 설정을 참조하세요.
CloudFront 배포를 위한 대체 도메인 이름을 구성하려면 다음 단계를 수행합니다.
- AWS Management Console에 로그인하고 CloudFront 콘솔을 엽니다.
- 업데이트하려는 배포의 ID를 선택합니다.
- 일반(General) 탭에서 **편집(Edit)**을 선택합니다.
- **대체 도메인 이름(CNAME)**에서 **항목 추가(Add item)**를 선택하고 사용자 지정 도메인을 입력합니다.
참고: 사용자 지정 Canonical Name Record(CNAME)을 사용하여 리소스에 액세스하는 것이 가장 좋습니다. CNAME을 사용하면 보다 나은 라우팅 제어와 고객 전환이 가능합니다. - 사용자 지정 SSL 인증서의 경우 CNAME을 담당하는 드롭다운 목록에서 배포에 할당할 사용자 지정 SSL 인증서를 선택합니다.
참고: 인증서 설치에 대한 자세한 내용은 SSL/TLS 인증서를 사용하도록 CloudFront 배포를 구성하려면 어떻게 해야 합니까?를 참조하세요. - **배포 생성(Create distribution)**을 선택하고 상태가 **활성화(Enabled)**로 업데이트될 때까지 기다립니다.
배포를 생성한 후에는 OAC가 버킷에 액세스할 수 있도록 허용해야 합니다. 다음 단계를 완료합니다.
- CloudFront 콘솔 페이지로 이동하여 CloudFront 배포를 엽니다.
- 오리진(Origins) 탭을 선택하고 오리진을 선택한 다음 **편집(Edit)**을 클릭합니다.
- **정책 복사(Copy policy)**를 선택하고 버킷 권한을 연 다음 버킷 정책을 업데이트합니다.
- S3 버킷 권한으로 이동(Go to S3 bucket permissions) 페이지를 엽니다.
- **버킷 정책(Bucket policy)**에서 **편집(Edit)**을 선택합니다. 이전에 복사한 정책을 붙여넣은 다음 저장(Save) 를 선택합니다. 버킷 정책에 S3에서 읽는 것 이상의 내용이 필요한 경우 필요한 API를 추가할 수 있습니다.
사용자 지정 도메인 이름을 사용하는 경우 새 CloudFront 배포 URL을 사용하도록 DNS 항목을 변경합니다. 사용자 지정 도메인 이름을 사용하지 않는 경우 새 CloudFront 배포 URL을 사용자에게 제공해야 합니다. 또한 이전 URL을 사용하는 모든 클라이언트 또는 디바이스 소프트웨어를 업데이트해야 합니다.
AWS SDK를 사용하여 Amazon S3 객체에 액세스하는 경우 일반 HTTPS 엔드포인트를 사용하도록 코드를 변경해야 합니다. 또한 새 CloudFront URL을 사용해야 합니다. 객체가 공개되지 않고 더 나은 제어가 필요한 경우 서명된 URL 및 서명된 쿠키를 사용하여 비공개 콘텐츠를 제공할 수 있습니다.
S3의 사전 서명된 URL을 사용하여 객체에 액세스합니다.
워크플로가 S3의 사전 서명된 URL을 사용하는 경우 CloudFront 배포를 사용하여 쿼리를 S3 오리진에 릴레이합니다. 먼저 원하는 객체에 대해 미리 서명된 URL을 생성합니다. 그런 다음 URL의 호스트를 CloudFront 엔드포인트로 교체하여 CloudFront를 통해 호출을 전달하고 암호화 프로토콜을 자동으로 업그레이드합니다. 미리 서명된 URL을 테스트하고 생성하려면 다음 CLI 명령을 실행합니다.
aws s3 presign s3://BUCKET_NAME/test.jpg
예시 출력:
https://bucket_name.s3.us-east-1.amazonaws.com/test.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=%5b...%5d%2F20220901%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=%5b...%5d&X-Amz-SignedHeaders=host&X-Amz-Expires=3600&X-Amz-Signature">https://BUCKET_NAME.s3.us-east-1.amazonaws.com/test.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=[...]%2F20220901%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=[...]&X-Amz-SignedHeaders=host&X-Amz-Expires=3600&X-Amz-Signature =[...]
이제 S3 URL을 새 CloudFront 엔드포인트로 변경합니다. 예를 들어, 다음 S3 URL:을
BUCKET_NAME.s3.eu-west-1.amazonaws.com
이 엔드포인트:로 교체합니다:
https://DISTRIBUTION_ID.cloudfront.net.
예시 출력:
https://<DISTRIBUTION_ID>.cloudfront.net /test.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=[...]%2F20220901%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=[...]&X-Amz-SignedHeaders=host&X-Amz-Expires=3600&X-Amz-Signature=[...]
미리 서명된 URL을 사용하려면 다음 CloudFront 설정을 적용합니다.
- OAC 서명 동작을 **요청에 서명하지 않음(Do not sign requests)**으로 설정합니다.
- CloudFront 배포 오리진 요청 정책을 오리진 요청 설정(Origin request settings): **헤더(Headers) – 없음(None); 쿠키(Cookies) – 없음(None); 쿼리 문자열(Query strings) – 모두(All)**로 설정합니다.
- 캐시 정책을 헤더 — 없음, 쿠키 — 없음, 쿼리 문자열 — 없음으로 설정합니다.
AWS CloudTrail에서 S3가 미리 서명된 URL에서 다운로드하라는 GET 요청은 미리 서명된 URL을 생성한 자격 증명으로 표시됩니다.
AWS SDK를 사용하여 S3 객체에 액세스하는 경우 미리 서명된 URL을 사용하도록 코드를 변경해야 합니다. 대신 일반 HTTPS 요청을 사용하고 새 CloudFront URL을 합니다.
Amazon S3에 최신 암호화 프로토콜을 사용하고 있는지 확인
새 정책을 테스트하려면 다음 예제 curl 명령을 사용하여 특정 레거시 프로토콜을 사용하여 HTTPS 요청을 만드세요.
curl https://${CloudFront_Domain}/image.png -v --tlsv1.0 --tls-max 1.0
예제 curl 명령은 TLS 1.0을 사용하여 CloudFront에 요청을 보냅니다. 이렇게 하면 TLS 1.2를 사용하여 S3 오리진에 연결하고 파일을 성공적으로 다운로드합니다.
AWS CloudTrail Lake를 사용하여 AWS 서비스 엔드포인트에 대한 이전 TLS 연결을 식별하는 것이 가장 좋습니다. CloudTrail Lake 이벤트 데이터 스토어를 구성하여 관리 이벤트 또는 데이터 이벤트를 캡처할 수 있습니다. CloudTrail Lake의 해당 ClouldTrail 이벤트는 TLS 버전 1.2를 표시하여 고객이 최신 보안 정책을 사용해 Amazon S3에 연결함을 확인합니다.

관련 콘텐츠
- 질문됨 3달 전lg...
- 질문됨 5년 전lg...
- 질문됨 3달 전lg...
- 질문됨 3년 전lg...
- 질문됨 6년 전lg...
- AWS 공식업데이트됨 5달 전
- AWS 공식업데이트됨 2년 전