CloudFront를 통해 S3에서 전송

Amazon S3에서 전송할 때는 Amazon CloudFront 배포를 이그레스 경로로 사용할 수 있습니다.

CloudFront를 통한 데이터 전송은 S3에서 직접 전송할 때보다 AWS 이그레스 비용이 저렴할 수 있습니다. 자세한 내용은 CloudFront 가격 책정S3 이그레스 요금을 참조하세요.

CloudFront를 이그레스 경로로 사용하면 S3 객체가 공개적으로 노출되지 않습니다. CloudFront를 사용하면 객체가 공개적으로 노출되나요?를 참조하세요.

개요

CloudFront를 통해 S3 데이터를 전송하려면 다음 단계를 수행해야 합니다.

IAM 권한 구성

에이전트 없는 전송 권한의 안내에 따라 필요한 Google Cloud 권한을 부여하세요.

S3 버킷에 대한 액세스 구성

소스에 대한 액세스 구성: Amazon S3의 안내에 따라 Amazon S3의 데이터에 대한 액세스를 구성합니다.

S3 버킷의 CloudFront 배포 만들기

  1. AWS 계정에서 CloudFront로 이동합니다.
  2. CloudFront 배포 만들기를 클릭합니다.
  3. 원본 도메인에서 S3 버킷을 선택합니다.
  4. 원본 경로는 비워 두어야 합니다.
  5. 자동으로 입력된 원본 이름을 수락하거나 고유한 값을 지정합니다.
  6. 원본 액세스 섹션에서 공개를 선택합니다. 이렇게 해도 버킷은 공개되지 않습니다. 대신에, 액세스 메커니즘을 구성해서는 안 된다는 것을 CloudFront에 알립니다.
  7. 캐시 키 및 원본 요청 섹션에서 다음을 수행하세요.
    1. 캐시 정책에서 CachingDisabled를 선택합니다. 이렇게 하면 CloudFront가 요청을 캐시하여 인증되지 않은 뷰어에 제공하는 것을 방지합니다.
    2. 원본 요청 정책에는 AllViewerExceptHostHeader를 선택합니다. 그러면 CloudFront가 인증 헤더를 S3에 전달할 수 있으므로 Storage Transfer Service는 보안 사용자 인증 정보를 사용하여 버킷에 액세스할 수 있습니다.
  8. 웹 애플리케이션 방화벽(WAF) 섹션에서는 사용 설정하지 않음을 선택합니다.
  9. 필요한 경우 가격 클래스를 선택하세요. Storage Transfer Service는 소스 버킷의 리전을 기준으로 작업자 풀을 선택하므로 해당 리전에서 CloudFront 가격이 발생합니다. 최저가를 얻으려면 소스 버킷이 US 또는 유럽에 존재하도록 하거나, CloudFront에서 가격 책정 클래스북미 및 유럽만 사용을 선택하세요.
  10. CloudFront 배포 만들기를 클릭합니다.

    성공적으로 생성되면 CloudFront 배포 세부정보 페이지가 표시됩니다.

  11. 배포 도메인 이름을 기록해 둡니다. 예를 들면 https://dy1h2n3l4ob56.cloudfront.net입니다. 세부정보 페이지에서 배포 도메인 이름 앞에 https:// 프로토콜이 포함되지 않은 경우 전송 작업을 만들 때 직접 추가해야 합니다.

전송 작업 만들기

CloudFront 배포를 통한 전송은 Google Cloud 콘솔 및 REST API에서 지원됩니다.

전송 작업 이름에 개인 식별 정보(PII) 또는 보안 데이터와 같은 민감한 정보를 포함하지 마세요. 리소스 이름은 다른 Google Cloud 리소스의 이름으로 전파될 수 있으며 프로젝트 외부의 Google 내부 시스템에 노출될 수 있습니다.

Google Cloud 콘솔

Google Cloud 콘솔을 사용하여 전송을 만들려면 안내에 따라 전송을 만드세요.

CloudFront 도메인을 입력하라는 메시지가 표시되면 이전 섹션에서 기록한 배포 도메인 이름을 입력합니다. 이 값은 Amazon Web Services 콘솔의 CloudFront 섹션에서도 찾을 수 있습니다. 형식은 https://dy1h2n3l4ob56.cloudfront.net입니다.

REST API

REST API를 사용하여 전송을 만들려면 전송 만들기 페이지의 예시를 따르세요.

배포 도메인 이름을 transferSpec.awsS3DataSource.cloudfrontDomain 필드의 값으로 지정합니다.

"transferSpec": {
  "awsS3DataSource": {
    "bucketName": "AWS_SOURCE_NAME",
    "cloudfrontDomain": "https://dy1h2n3l4ob56.cloudfront.net",
    "awsAccessKey": {
      "accessKeyId": "AWS_ACCESS_KEY_ID",
      "secretAccessKey": "AWS_SECRET_ACCESS_KEY"
    }
  },
  ...
}

자주 묻는 질문(FAQ)

CloudFront를 사용하면 객체가 공개적으로 노출되나요?

아니요. 이 페이지의 구성 단계를 따르면 객체가 공개적으로 노출되지 않습니다.

  • Cloudfront는 S3 객체에 직접 액세스할 수 없습니다.
  • 사용자가 직접 또는 CloudFront를 통해 (버킷이 비공개인 경우) 객체에 액세스하려고 하면 permission denied 오류가 발생합니다.
  • Storage Transfer Service는 전송 작업에서 제공한 사용자 인증 정보를 사용하여 CloudFront에 대한 요청에 서명하므로 Google은 S3에서 직접 다운로드하는 것처럼 객체를 안전하게 다운로드할 수 있게 해줍니다. 이는 헤더 전달 설정 AllViewerExceptHostHeader로 인해 작동합니다.