암호화된 객체 복제 - Amazon Simple Storage Service

암호화된 객체 복제

기본적으로 Amazon S3는 AWS Key Management Service(AWS KMS) 키를 사용한 서버 측 암호화(SSE-KMS) 또는 AWS KMS 키를 사용한 이중 계층 서버 측 암호화(DSSE-KMS)를 사용하여 암호화된 객체를 복제하지 않습니다. SSE-KMS 또는 DSS-KMS로 암호화된 객체를 복제하려면 버킷 복제 구성을 수정하여 이러한 객체를 복제하도록 Amazon S3에 지시해야 합니다. 이 예제에서는 Amazon S3 콘솔 및 AWS Command Line Interface(AWS CLI)를 사용해 암호화된 객체 복제를 사용하도록 버킷 복제 구성을 변경하는 방법을 설명합니다.

자세한 내용은 서버 측 암호화(SSE-C, SSE-S3, SSE-KMS, DSSE-KMS)를 사용하여 생성된 객체 복제 단원을 참조하십시오.

참고

소스 또는 대상 버킷에 대해 S3 버킷 키를 사용하도록 설정하면 암호화 컨텍스트는 객체의 ARN이 아니라 버킷의 ARN(Amazon 리소스 이름)이 됩니다. 암호화 컨텍스트에 버킷 ARN을 사용하려면 IAM 정책을 업데이트해야 합니다. 자세한 내용은 S3 버킷 키 및 복제 단원을 참조하십시오.

참고

Amazon S3에서 다중 리전 AWS KMS keys를 사용할 수 있습니다. 그러나 Amazon S3는 현재 다중 리전 키를 단일 리전 키인 것처럼 취급하며, 키의 다중 리전 기능을 사용하지 않습니다. 자세한 내용은 AWS Key Management Service 개발자 안내서에서 다중 리전 키 사용을 참조하세요.

단계별 지침은 동일한 계정이 소유한 원본 및 대상 버킷에 대한 복제 구성 단원을 참조하세요. 이 주제에서는 버킷을 동일하거나 서로 다른 AWS 계정이 소유한 경우에 복제 구성을 설정하는 지침을 제공합니다.

AWS CLI를 사용하여 암호화된 객체를 복제하려면 다음을 수행합니다.

  • 소스 및 대상 버킷을 생성하고 버킷에 버전 관리를 사용 설정합니다.

  • Amazon S3에 객체 복제 권한을 제공하는 AWS Identity and Access Management(IAM) 역할을 생성합니다. IAM 역할의 권한은 암호화된 객체를 복제하는 데 필요한 권한을 포함합니다.

  • 소스 버킷에 복제 구성을 추가합니다. 복제 구성이 KMS 키를 사용하여 암호화된 객체를 복제하는 데 관련된 정보를 제공합니다.

  • 소스 버킷에 암호화된 객체를 추가합니다.

  • 설정을 테스트하여 암호화된 객체가 대상 버킷에 복제되고 있는지 확인합니다.

아래에서 절차를 알아볼 수 있습니다.

서버 측 암호화된 객체 복제(AWS CLI)
  1. 이 예시에서는 동일한 AWS 계정에 DOC-EXAMPLE-SOURCE-BUCKET 및 DOC-EXAMPLE-DESTINATION-BUCKET 버킷을 모두 생성합니다. AWS CLI의 보안 인증 프로필도 설정합니다. 이 예시에서는 acctA라는 프로필 이름을 사용합니다.

    자격 증명 프로파일 설정에 대한 자세한 내용은 AWS Command Line Interface 사용 설명서의 명명된 프로파일을 참조하세요. 이 예시에서 CLI 명령을 사용하려면 user input placeholders를 실제 정보로 대체합니다.

  2. 다음 명령을 사용하여 DOC-EXAMPLE-SOURCE-BUCKET 버킷을 생성하고 버킷에서 버전 관리를 활성화합니다. 다음 예시 명령은 미국 동부(버지니아 북부)(us-east-1) 리전에 DOC-EXAMPLE-SOURCE-BUCKET 버킷을 생성합니다.

    aws s3api create-bucket \ --bucket DOC-EXAMPLE-SOURCE-BUCKET \ --region us-east-1 \ --profile acctA
    aws s3api put-bucket-versioning \ --bucket DOC-EXAMPLE-SOURCE-BUCKET \ --versioning-configuration Status=Enabled \ --profile acctA
  3. 다음 명령을 사용하여 DOC-EXAMPLE-DESTINATION-BUCKET 버킷을 생성하고 버킷에서 버전 관리를 활성화합니다. 다음 예시 명령은 미국 서부(오레곤)(us-west-2) 리전에 DOC-EXAMPLE-DESTINATION-BUCKET 버킷을 생성합니다.

    참고

    DOC-EXAMPLE-SOURCE-BUCKET 및 DOC-EXAMPLE-DESTINATION-BUCKET 버킷이 모두 동일한 AWS 계정에 있을 때 복제 구성을 설정하려면 동일한 프로필을 사용합니다. 이 예제에서는 acctA을 사용합니다. 버킷을 서로 다른 AWS 계정에서 소유한 경우 복제 구성을 테스트하려면 각각 다른 프로필을 지정합니다.

    aws s3api create-bucket \ --bucket DOC-EXAMPLE-DESTINATION-BUCKET \ --region us-west-2 \ --create-bucket-configuration LocationConstraint=us-west-2 \ --profile acctA
    aws s3api put-bucket-versioning \ --bucket DOC-EXAMPLE-DESTINATION-BUCKET \ --versioning-configuration Status=Enabled \ --profile acctA
  4. IAM 서비스 역할을 생성합니다. 나중에 DOC-EXAMPLE-SOURCE-BUCKET 버킷에 추가하는 복제 구성에서 이 역할을 지정합니다. Amazon S3는 사용자를 대신하여 객체를 복제하기 위해 이 역할을 맡습니다. IAM 역할은 다음의 두 단계로 생성합니다.

    • 서비스 역할을 만듭니다.

    • 역할에 권한 정책을 연결합니다.

    1. IAM 서비스서비스 역할을 생성하려면 다음을 수행합니다.

      1. 다음 신뢰 정책을 복사하여 로컬 컴퓨터의 현재 디렉터리에 s3-role-trust-policy-kmsobj.json 파일로 저장합니다. 이 정책은 Amazon S3가 사용자를 대신해 작업을 수행할 수 있도록 역할을 맡을 권한을 Amazon S3 서비스 보안 주체에 부여합니다.

        { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Principal":{ "Service":"s3.amazonaws.com" }, "Action":"sts:AssumeRole" } ] }
      2. 다음 명령을 실행해 역할을 생성합니다.

        $ aws iam create-role \ --role-name replicationRolekmsobj \ --assume-role-policy-document file://s3-role-trust-policy-kmsobj.json \ --profile acctA
    2. 다음으로, 역할에 권한 정책을 연결합니다. 이 정책은 다양한 Amazon S3 버킷 및 객체 작업에 대한 권한을 부여합니다.

      1. 다음 권한 정책을 복사하여 로컬 컴퓨터의 현재 디렉터리에 s3-role-permissions-policykmsobj.json 파일로 저장합니다. IAM 역할을 생성하여 나중에 정책을 여기에 연결할 것입니다.

        중요

        권한 정책에서 DOC-EXAMPLE-SOURCE-BUCKET 및 DOC-EXAMPLE-DESTINATION-BUCKET 버킷 암호화에 사용할 AWS KMS 키 ID를 지정합니다. DOC-EXAMPLE-SOURCE-BUCKETDOC-EXAMPLE-DESTINATION-BUCKET 버킷에 대해 별도의 KMS 키 2개를 생성해야 합니다. AWS KMS keys는 키가 생성된 AWS 리전의 외부에서 공유되지 않습니다.

        { "Version":"2012-10-17", "Statement":[ { "Action":[ "s3:ListBucket", "s3:GetReplicationConfiguration", "s3:GetObjectVersionForReplication", "s3:GetObjectVersionAcl", "s3:GetObjectVersionTagging" ], "Effect":"Allow", "Resource":[ "arn:aws:s3:::DOC-EXAMPLE-SOURCE-BUCKET", "arn:aws:s3:::DOC-EXAMPLE-SOURCE-BUCKET/*" ] }, { "Action":[ "s3:ReplicateObject", "s3:ReplicateDelete", "s3:ReplicateTags" ], "Effect":"Allow", "Condition":{ "StringLikeIfExists":{ "s3:x-amz-server-side-encryption":[ "aws:kms", "AES256", "aws:kms:dsse" ], "s3:x-amz-server-side-encryption-aws-kms-key-id":[ "AWS KMS key IDs(in ARN format) to use for encrypting object replicas" ] } }, "Resource":"arn:aws:s3:::DOC-EXAMPLE-DESTINATION-BUCKET/*" }, { "Action":[ "kms:Decrypt" ], "Effect":"Allow", "Condition":{ "StringLike":{ "kms:ViaService":"s3.us-east-1.amazonaws.com", "kms:EncryptionContext:aws:s3:arn":[ "arn:aws:s3:::DOC-EXAMPLE-SOURCE-BUCKET/*" ] } }, "Resource":[ "AWS KMS key IDs(in ARN format) used to encrypt source objects." ] }, { "Action":[ "kms:Encrypt" ], "Effect":"Allow", "Condition":{ "StringLike":{ "kms:ViaService":"s3.us-west-2.amazonaws.com", "kms:EncryptionContext:aws:s3:arn":[ "arn:aws:s3:::DOC-EXAMPLE-DESTINATION-BUCKET/*" ] } }, "Resource":[ "AWS KMS key IDs(in ARN format) to use for encrypting object replicas" ] } ] }
      2. 정책을 생성하여 역할에 연결합니다.

        $ aws iam put-role-policy \ --role-name replicationRolekmsobj \ --policy-document file://s3-role-permissions-policykmsobj.json \ --policy-name replicationRolechangeownerPolicy \ --profile acctA
  5. 다음 복제 구성을 DOC-EXAMPLE-SOURCE-BUCKET 버킷에 추가합니다. 이 구성은 Tax/ 접두사가 있는 객체를 DOC-EXAMPLE-DESTINATION-BUCKET 버킷으로 복제하도록 Amazon S3에 지시합니다.

    중요

    복제 구성에서 Amazon S3가 맡을 수 있는 IAM 역할을 지정합니다. iam:PassRole 권한이 있을 경우 이 권한만 사용할 수 있습니다. CLI 명령에서 지정한 프로필에 이 권한이 있어야 합니다. 자세한 내용은 IAM 사용 설명서에서 사용자에게 AWS 서비스에 역할을 전달할 권한 부여를 참조하세요.

    <ReplicationConfiguration> <Role>IAM-Role-ARN</Role> <Rule> <Priority>1</Priority> <DeleteMarkerReplication> <Status>Disabled</Status> </DeleteMarkerReplication> <Filter> <Prefix>Tax</Prefix> </Filter> <Status>Enabled</Status> <SourceSelectionCriteria> <SseKmsEncryptedObjects> <Status>Enabled</Status> </SseKmsEncryptedObjects> </SourceSelectionCriteria> <Destination> <Bucket>arn:aws:s3:::DOC-EXAMPLE-DESTINATION-BUCKET</Bucket> <EncryptionConfiguration> <ReplicaKmsKeyID>AWS KMS key IDs to use for encrypting object replicas</ReplicaKmsKeyID> </EncryptionConfiguration> </Destination> </Rule> </ReplicationConfiguration>

    DOC-EXAMPLE-SOURCE-BUCKET 버킷에 복제 구성을 추가하려면 다음을 수행합니다.

    1. AWS CLI를 사용하려면 복제 구성을 JSON으로 지정해야 합니다. 다음 JSON을 로컬 컴퓨터의 현재 디렉터리에 파일(replication.json)로 저장합니다.

      { "Role":"IAM-Role-ARN", "Rules":[ { "Status":"Enabled", "Priority":1, "DeleteMarkerReplication":{ "Status":"Disabled" }, "Filter":{ "Prefix":"Tax" }, "Destination":{ "Bucket":"arn:aws:s3:::DOC-EXAMPLE-DESTINATION-BUCKET", "EncryptionConfiguration":{ "ReplicaKmsKeyID":"AWS KMS key IDs (in ARN format) to use for encrypting object replicas" } }, "SourceSelectionCriteria":{ "SseKmsEncryptedObjects":{ "Status":"Enabled" } } } ] }
    2. JSON을 편집하여 DOC-EXAMPLE-DESTINATION-BUCKET 버킷, AWS KMS key IDs (in ARN format) 및 IAM-role-ARN에 대한 값을 제공합니다. 변경 사항을 저장합니다.

    3. 다음 명령을 사용하여 DOC-EXAMPLE-SOURCE-BUCKET 버킷에 복제 구성을 추가합니다. 반드시 DOC-EXAMPLE-SOURCE-BUCKET 버킷 이름을 제공해야 합니다.

      $ aws s3api put-bucket-replication \ --replication-configuration file://replication.json \ --bucket DOC-EXAMPLE-SOURCE-BUCKET \ --profile acctA
  6. 구성을 테스트하여 암호화된 객체가 복제되는지 확인합니다. Amazon S3 콘솔에서 다음과 같이 수행합니다.

    1. AWS Management Console에 로그인한 후 https://console.aws.amazon.com/s3/에서 Amazon S3 콘솔을 엽니다.

    2. DOC-EXAMPLE-SOURCE-BUCKET 버킷에서 이름이 Tax인 폴더를 생성합니다.

    3. 폴더에 샘플 객체를 추가합니다. 반드시 암호화 옵션을 선택하고 객체를 암호화할 KMS 키를 지정해야 합니다.

    4. DOC-EXAMPLE-DESTINATION-BUCKET 버킷에 객체 복제본이 있으며 해당 복제본이 구성에서 지정한 KMS 키를 사용하여 암호화되었는지 확인합니다. 자세한 내용은 복제 상태 정보 가져오기 단원을 참조하십시오.

복제 구성을 추가하는 코드 예시는 AWS SDK 사용 섹션을 참조하세요. 복제 구성을 적절히 수정해야 합니다.

개념적 정보는 서버 측 암호화(SSE-C, SSE-S3, SSE-KMS, DSSE-KMS)를 사용하여 생성된 객체 복제 단원을 참조하십시오.