TLS 1.2 이상을 사용하지 않는 고객에게 Amazon S3 버킷에 대한 액세스를 허용하려면 어떻게 해야 하나요?

6분 분량
0

제 고객은 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 배포를 생성하려면 다음 단계를 따르세요.

  1. CloudFront 콘솔을 엽니다.
  2. 배포 생성을 선택합니다.
  3. 오리진 도메인의 경우 오리진 아래의 드롭다운 목록에서 S3 버킷의 REST API 엔드포인트를 선택합니다.
  4. 뷰어 프로토콜 정책에서, HTTP를 HTTPS로 리디렉션을 선택합니다.
  5. 허용된 HTTP 엔드포인트의 경우, GET, HEAD, OPTIONS를 선택하여 읽기 요청을 지원합니다.
  6. 오리진 액세스 섹션에서, **오리진 액세스 제어 설정(권장)**을 선택합니다.
  7. 제어 설정 생성을 선택하고 기본 이름을 사용합니다. 서명 동작의 경우, **서명 요청(권장)**를 선택하고 생성을 선택합니다. OAC 권장 설정은 뷰어의 요청을 자동으로 인증합니다.
  8. 드롭다운 목록에서 ID를 선택합니다. 배포를 생성한 후, 버킷 정책을 업데이트하여 OAC에 대한 액세스를 제한합니다.
  9. 기본 캐시 동작의 뷰어에서, 뷰어 프로토콜 정책에 대해HTTP를 HTTPS로 리디렉션을 선택하고 다른 설정은 기본값으로 둡니다.
  10. 캐시 키 및 오리진 요청에서 **캐시 정책 및 오리진 요청 정책(권장)**을 선택합니다. 그런 다음, 캐시 정책에는 CachingOptimized를 사용하고 오리진 요청 정책에는 CORS-S3Origin을 사용하세요.
  11. 배포 생성을 선택한 다음, 해당 상태가 활성화로 업데이트될 때까지 기다립니다.

사용자의 S3 버킷에 액세스하려면 서명된 요청이 필요합니다

서명된 요청만 지원함으로써 사용자의 S3 버킷에 보안을 추가합니다. 서명된 요청을 사용하여, OAC는 인증 파라미터를 추적하고 이를 S3 오리진에 전달하며, S3 오리진은 익명 요청을 거부합니다.

사용자의 S3 버킷에 액세스하기 위해 서명된 요청이 필요한 CloudFront 배포를 생성하려면, 다음 단계를 따르세요.

  1. CloudFront 콘솔을 엽니다.
  2. 배포 생성을 선택합니다.
  3. 오리진 도메인의 경우 오리진 아래의 드롭다운 목록에서 S3 버킷의 REST API 엔드포인트를 선택합니다.
  4. 뷰어 프로토콜 정책에서, HTTP를 HTTPS로 리디렉션을 선택합니다.
  5. 허용된 HTTP 엔드포인트의 경우, GET, HEAD, OPTIONS를 선택하여 읽기 요청을 지원합니다.
  6. 오리진 액세스 섹션에서, **오리진 액세스 제어 설정(권장)**을 선택합니다.
  7. 요청에 서명하지 않음 옵션을 선택하여 서명되지 않은 요청을 모두 차단합니다.
    **참고:**서명되지 않은 요청을 차단하려면 S3 오리진이 권한을 평가할 수 있도록 모든 고객이 요청에 서명해야 합니다.
  8. 사용자 지정 캐시 정책을 생성하여 고객의 인증 헤더를 오리진에 전달하세요.
  9. 캐시 키 및 오리진 요청에서 **캐시 정책 및 오리진 요청 정책(권장)**을 선택합니다.
  10. 정책 생성을 선택합니다.
  11. 이름 섹션에 캐시 정책의 이름을 입력합니다.
  12. 캐시 키 설정에서 헤더로 이동하여 다음 헤더 포함을 선택합니다.
  13. 헤더 추가에서 인증을 선택합니다.
  14. 생성을 선택합니다.

고객의 보안 정책 제어

CloudFront에서 보안 정책을 제어하려면, 사용자 지정 도메인이 있어야 합니다. 사용자 배포에 사용할 대체 도메인 이름을 지정하는 것이 가장 좋습니다. 또한 AWS Certificate Manager(ACM)에 구성된 사용자 지정 SSL 인증서를 사용하는 것이 가장 좋습니다. 이렇게 하면 사용자가 보안 정책을 더 잘 제어할 수 있고 고객은 TLS 1.0을 계속 사용할 수 있습니다. 자세한 내용은 뷰어와 CloudFront 간에 지원되는 프로토콜 및 암호를 참조하세요.

기본 *\ .cloudfront.net 도메인 이름을 사용하는 경우, CloudFront는 자동으로 인증서를 제공하고 TLS 1.0과 1.1을 허용하도록 보안 정책을 설정합니다. 자세한 내용은 배포 설정을 참조하세요.

사용자의 CloudFront 배포를 위한 대체 도메인 이름을 구성하려면, 다음 단계를 따르세요.

  1. AWS Management Console에 로그인한 다음 CloudFront 콘솔을 엽니다.
  2. 사용자가 업데이트하려는 배포의 ID를 선택합니다.
  3. 일반 탭에서, 편집을 선택합니다.
  4. **대체 도메인 이름(CNAMEs)**의 경우, 항목 추가를 선택하고 사용자의 도메인 이름을 입력합니다.
    참고: Canonical Name Record(CNAME)을 사용하여 사용자의 자원에 액세스하는 것이 가장 좋습니다. CNAME를 사용하면 사용자는 라우팅을 더 잘 제어할 수 있고 고객을 위한 더 나은 이행이 가능합니다.
  5. 사용자 지정 SSL 인증서의 경우, 사용자의 CNAME를 포함하는 드롭다운 목록에서 사용자 지정 SSL 인증서를 선택하여 배포에 할당합니다.
    **참고:**인증서 설치에 대한 자세한 내용은 SSL/TLS 인증서를 사용하도록 CloudFront 배포를 구성하려면 어떻게 해야 합니까?를 참조하세요.
  6. 배포 생성을 선택하고, 해당 상태가활성화됨으로 업데이트될 때까지 기다립니다.

배포를 생성한 후에는, OAC가 사용자의 버킷에 액세스할 수 있도록 허용해야 합니다. 다음 단계를 완료하세요.

  1. CloudFront 콘솔 페이지로 이동하여 사용자의 CloudFront 배포를 엽니다.
  2. 오리진 탭을 선택하고, 사용자의 오리진을 선택한 다음 편집을 클릭합니다.
  3. 정책 복사를 선택하고, 버킷 권한을 연 다음 사용자의 버킷 정책을 업데이트합니다.
  4. S3 버킷 권한으로 이동 페이지를 엽니다.
  5. 버킷 정책에서 편집을 선택합니다. 사전에 복사해 놓았던 정책을 붙여 넣은 다음 저장을 선택합니다. 사용자의 버킷 정책에 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 설정을 적용하세요.

  1. OAC 서명 동작을 요청에 서명하지 않음으로 설정합니다.
  2. CloudFront 배포 오리진 요청 정책을 오리진 요청 설정으로 설정합니다. 헤더 – 없음, 쿠키 – 없음, 쿼리 문자열 – 모두.
  3. 캐시 정책을 헤더 – 없음, 쿠키 – 없음, 쿼리 문자열 – 없음으로 설정합니다.

AWS CloudTrail에서는, S3의 사전 서명된 URL에서 다운로드하라는 GET 요청이 사전 서명된 URL을 생성한 ID로 표시됩니다.

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 서비스 엔드포인트에 대한 이전 TLS 연결을 식별하려면, AWS CloudTrail Lake를 사용하는 것이 가장 좋습니다. 사용자는 관리 이벤트 또는 데이터 이벤트를 캡처하도록 CloudTrail Lake 이벤트 데이터 저장소를 구성할 수 있습니다. CloudTrail Lake의 해당 CloudTrail 이벤트에는 TLS 버전 1.2가 표시되며, 이는 고객이 최신 보안 정책을 사용하여 Amazon S3에 연결하고 있음을 확인합니다.

AWS 공식
AWS 공식업데이트됨 일 년 전