Amazon S3 버킷에 사용자 지정 AWS KMS 키를 사용하는 기본 암호화가 설정되어 있습니다. 사용자가 버킷에서 다운로드 및 업로드를 수행하게 하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2020년 10월 20일

Amazon Simple Storage Service(Amazon S3) 버킷에서 사용자 지정 AWS Key Management Service(AWS KMS) 키를 통한 기본 암호화를 사용하도록 설정했습니다. AWS Identity and Access Management(IAM) 사용자가 이 버킷에 다운로드 및 업로드를 수행할 수 있게 하려고 합니다. 어떻게 해야 합니까?

해결 방법

IAM 사용자와 AWS KMS 키가 동일한 AWS 계정에 속하는 경우

1.    AWS KMS 콘솔을 연 다음, 정책 보기를 사용하여 키의 정책 문서를 봅니다. 최소한 kms:Encrypt, kms:GenerateDataKeykms:Decrypt 작업에 대한 권한을 IAM 사용자에게 부여하도록 키의 정책을 수정합니다. 다음과 유사한 정책을 사용할 수 있습니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ExampleStmt",
      "Action": [
        "kms:Decrypt",
        "kms:Encrypt",
        "kms:GenerateDataKey"
      ],
      "Effect": "Allow",
      "Principal": [
        "AWS": "arn:aws:iam::111122223333:user/Jane"
      ],
      "Resource": "*"
    }
  ]
}

참고: 이 정책 예에는 개별 IAM 사용자가 암호화된 S3 버킷에 다운로드 및 업로드하는 데 필요한 최소한의 권한만 포함됩니다. 사용 사례에 따라 권한을 수정하거나 확장할 수 있습니다. 

2.    IAM 콘솔을 엽니다. 버킷에서 업로드 및 다운로드할 수 있는 권한을 부여하는 정책을 IAM 사용자에게 추가합니다. 다음과 유사한 정책을 사용할 수 있습니다.

참고: Resource 값에는 버킷의 객체를 나타내는 와일드카드 문자와 함께 버킷의 Amazon 리소스 이름(ARN)을 입력합니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ExampleStmt",
      "Action": [
        "s3:GetObject",
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
    }
  ]
}

중요: IAM 사용자 정책에서 부여한 S3 권한은 버킷 정책의 명시적 거부 문에 의해 차단될 수 있습니다. 버킷 정책을 검토하여 IAM 사용자 정책과 충돌하는 명시적 거부 문이 없는지 확인하십시오.

IAM 사용자가 AWS KMS 키 및 S3 버킷과 다른 계정에 있는 경우

중요: 고객 관리형 AWS KMS 키에 대해 교차 계정 액세스 권한을 부여할 수 있지만 AWS 관리형 AWS KMS 키에 대해서는 부여할 수 없습니다. AWS 관리형 AWS KMS 키의 키 정책은 수정할 수 없습니다. 

1.    AWS KMS 콘솔을 연 다음, 정책 보기를 사용하여 키의 정책 문서를 봅니다. 최소한 kms:Encrypt, kms:GenerateDataKeykms:Decrypt 작업에 대한 권한을 IAM 사용자에게 부여하도록 키의 정책을 수정합니다. 다음과 유사한 정책을 사용할 수 있습니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ExampleStmt",
      "Action": [
        "kms:Decrypt",
        "kms:Encrypt",
        "kms:GenerateDataKey"
      ],
      "Effect": "Allow",
      "Principal": [
        "AWS": "arn:aws:iam::111122223333:user/Jane"
      ],
      "Resource": "*"
    }
  ]
}

참고: 이 정책 예에는 개별 IAM 사용자가 암호화된 S3 버킷에 다운로드 및 업로드하는 데 필요한 최소한의 권한만 포함됩니다. 사용 사례에 따라 권한을 수정하거나 확장할 수 있습니다.

2.    IAM 사용자가 속한 계정에서 IAM 콘솔을 엽니다. 버킷에서 업로드 및 다운로드할 수 있을 뿐 아니라 버킷과 연결된 AWS KMS 키로 작업할 수 있는 권한을 부여하는 정책을 IAM 사용자에게 추가합니다.

교차 계정 시나리오의 경우 IAM 사용자가 객체를 업로드한 다음 버킷의 계정에 객체에 대한 전체 제어 권한(bucket-owner-full-control)을 부여할 수 있도록 s3:PutObjectAcl 권한을 부여하는 것을 고려합니다. 또한 동기화 작업 또는 재귀 복사 작업을 실행하는 데 필요한 s3:ListBucket 권한을 부여하는 것도 고려합니다. 다음과 유사한 정책을 사용할 수 있습니다.

참고: 첫 번째 Resource 값에는 버킷의 객체를 나타내는 와일드카드 문자와 함께 버킷의 ARN을 입력합니다. 두 번째 Resource 값에는 버킷의 ARN을 입력합니다. 세 번째 Resource 값에는 AWS KMS 키의 ARN을 입력합니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "DownloadandUpload",
      "Action": [
        "s3:GetObject",
        "s3:GetObjectVersion",
        "s3:PutObject",
        "s3:PutObjectAcl"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
    },
    {
      "Sid": "ListBucket",
      "Action": [
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET"
    },
    {
      "Sid": "KMSAccess",
      "Action": [
        "kms:Decrypt",
        "kms:Encrypt",
        "kms:GenerateDataKey"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:kms:example-region-1:123456789098:key/111aa2bb-333c-4d44-5555-a111bb2c33dd"
    }
  ]
}

3.    S3 버킷을 소유한 계정에서 Amazon S3 콘솔을 엽니다. IAM 사용자에게 버킷에 대한 액세스 권한을 부여하도록 버킷 정책을 업데이트합니다. 다음과 유사한 정책을 사용할 수 있습니다.

참고: Principal 값에는 IAM 사용자의 ARN을 입력합니다. 첫 번째 Resource 값에는 버킷의 객체를 나타내는 와일드카드 문자와 함께 버킷의 ARN을 입력합니다. 두 번째 Resource 값에는 버킷의 ARN을 입력합니다.

{
  "Id": "Policy1584399307003",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "DownloadandUpload",
      "Action": [
        "s3:GetObject",
        "s3:GetObjectVersion",
        "s3:PutObject",
        "s3:PutObjectAcl"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*",
      "Principal": {
        "AWS": [
          "arn:aws:iam::111122223333:user/Jane"
        ]
      }
    },
    {
      "Sid": "ListBucket",
      "Action": [
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET",
      "Principal": {
        "AWS": [
          "arn:aws:iam::111122223333:user/Jane"
        ]
      }
    }
  ]
}