CloudFront 및 S3 버전 관리

3119 단어 s3aws
CloudFront를 사용하여 버전이 지정된 S3 버킷에서 특정 버전의 객체를 제공하는 방법에 대한 옵션을 조사하고 있었습니다. 약간의 디깅을 한 후에 그것은 꽤 쉬운 것으로 판명되었습니다. 에 설명된 대로 URL에 ?version={version}을 추가하여 S3에서 특정 버전을 검색할 수 있습니다. CloudFront를 구성할 때 S3 오리진에 전달되도록 캐시 설정에서 쿼리 문자열 매개변수로 versionId를 허용해야 합니다. 이 작업이 완료되고 특정 버전을 검색하려고 하면 권한 거부 오류가 발생합니다. 이 문제를 해결하려면 정책에서 S3 버킷에 대한 CloudFront s3:GetObjectVersion 권한을 부여해야 합니다.

CloudFormation의 전체 예:

Resources:
  S3:
    Type: AWS::S3::Bucket
    Properties:
      BucketName: !Sub '${AWS::StackName}-assets'
      BucketEncryption:
        ServerSideEncryptionConfiguration:
          - ServerSideEncryptionByDefault:
              SSEAlgorithm: AES256
      PublicAccessBlockConfiguration:
        BlockPublicAcls: true
        BlockPublicPolicy: true
        IgnorePublicAcls: true
        RestrictPublicBuckets: true
      VersioningConfiguration:
        Status: Enabled
  CloudFrontOriginAccessIdentity:
    Type: AWS::CloudFront::CloudFrontOriginAccessIdentity
    Properties:
      CloudFrontOriginAccessIdentityConfig:
        Comment: !Sub '${AWS::StackName}'
  S3Policy:
    Type: AWS::S3::BucketPolicy
    Properties:
      Bucket: !Ref S3
      PolicyDocument:
        Statement:
          - Sid: CloudFront
            Action:
              - 's3:GetObject'
              - 's3:GetObjectVersion'
            Effect: Allow
            Resource: { 'Fn::Join': [ '/', [ !GetAtt S3.Arn , '*' ] ] }
            Principal:
              AWS: { 'Fn::Join': [ ' ', [ 'arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity', { Ref: CloudFrontOriginAccessIdentity } ] ] }
  CloudFront:
    Type: AWS::CloudFront::Distribution
    Properties:
      DistributionConfig:
        IPV6Enabled: true
        Enabled: true
        Comment: !Sub '${AWS::StackName}'
        Origins:
          - Id: S3
            DomainName: !GetAtt S3.DomainName
            S3OriginConfig:
              OriginAccessIdentity: { 'Fn::Join': [ '/', [ 'origin-access-identity', 'cloudfront', { Ref: CloudFrontOriginAccessIdentity } ] ] }
        DefaultCacheBehavior:
          AllowedMethods: [ HEAD, OPTIONS, GET ]
          CachedMethods: [ HEAD, OPTIONS, GET ]
          ForwardedValues:
            QueryString: true
            QueryStringCacheKeys: [ versionId ]
          TargetOriginId: S3
          ViewerProtocolPolicy: https-only
          Compress: true



이제 다음에 액세스하여 자산의 최신 버전을 얻을 수 있습니다.

https://xyz.cloudfront.net/some_image.jpg


다음과 같이 특정 버전을 요청할 수 있습니다.

https://xyz.cloudfront.net/some_image.jpg?versionId=abcdef


이제 CloudFront를 통해 버전이 지정된 콘텐츠를 서버링할 수 있는 이점이 있으며 restrict access to your content with signed cookies or signed urls 가능성도 있습니다.

좋은 웹페이지 즐겨찾기