AWS KMS 키를 사용한 암호화를 포함하는 대형 파일을 Amazon S3에 업로드하려고 합니다. 업로드가 실패하는 이유는 무엇입니까?

최종 업데이트 날짜: 2021년 4월 5일

Amazon S3(Amazon Simple Storage Service) 버킷에 대형 파일을 업로드하려고 합니다. 내 업로드 요청에는 AWS Key Management Service(AWS KMS) 키를 사용한 암호화 정보가 포함됩니다. 그러나 이렇게 하면 액세스 거부 오류가 발생합니다. 한편, 더 작은 파일에 암호화 정보를 포함하여 업로드하면 업로드가 성공합니다. 해결하려면 어떻게 해야 하나요?

간략한 설명

객체 암호화에 사용되는 AWS KMS 키에 kms:Decrypt 작업을 수행할 수 있는 권한이 있는지 확인합니다.

AWS CLI(aws s3 명령), AWS SDK 및 다양한 타사 프로그램은 파일이 큰 경우 멀티파트 업로드를 자동으로 수행합니다. AWS KMS 키를 사용하여 암호화를 적용하여 멀티파트 업로드를 수행하려면 요청자에게 kms:GenerateDataKeykms:Decrypt 권한이 있어야 합니다. kms:GenerateDataKey 권한은 요청자가 업로드를 시작하도록 허용합니다. kms:Decrypt 권한을 사용하면 새로 업로드된 파트를 동일한 객체의 이전 파트에 사용된 것과 동일한 키로 암호화할 수 있습니다.

참고: 모든 파트가 성공적으로 업로드된 후에는 멀티파트 업로드 작업을 완료하기 위해 업로드된 파트를 어셈블해야 합니다. 업로드된 파트는 서버 측에서 KMS 키를 사용하여 암호화되므로 객체 파트를 어셈블하려면 먼저 복호화해야 합니다. 이러한 이유로 요청자에게 KMS CMK(SSE-KMS)를 통한 서버 측 암호화를 사용한 멀티파트 업로드 요청을 위한 kms:Decrypt 권한이 있어야 합니다.

해결 방법

AWS Identity and Access Management(IAM) 역할과 키가 동일한 계정에 있는 경우 kms:Decrypt 권한을 키 정책에 지정해야 합니다. IAM 역할이 키와 다른 계정에 속해 있는 경우 키 정책과 IAM 정책 모두에 kms:Decrypt 권한을 지정해야 합니다.

키 정책

AWS Management Console 정책 뷰를 사용하여 AWS KMS 키 정책을 검토합니다.

키 정책에서 IAM 사용자 또는 역할의 Amazon 리소스 이름(ARN)이 AWS 보안 주체로 나열된 문을 검색합니다. ARN은 arn:aws:iam::111122223333:user/john과 같은 형식을 가지고 있습니다.

그런 다음 IAM 사용자 또는 역할과 연관된 문이 허용하는 작업 목록을 확인합니다. 멀티파트 업로드가 작동하려면 SSE-KMS를 사용하여 허용된 작업의 목록에 kms:Decrypt가 포함되어야 합니다.

예를 들어, 키 정책에서 다음 문은 사용자 John이 kms:Decryptkms:GenerateDataKey 작업을 수행하도록 허용합니다.

{
            "Sid": "Allow use of the key",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:user/john"
            },
            "Action": [
                "kms:Decrypt",
                "kms:GenerateDataKey"
            ],
            "Resource": "*"
        },

IAM 권한

IAM 권한을 검토하려면 IAM 콘솔을 연 다음 IAM 사용자 또는 역할을 엽니다.

IAM 사용자 또는 역할에 적용된 권한 정책의 목록을 검토합니다. 객체 암호화에 사용되는 키에 kms:Decrypt 작업을 수행하도록 허용하는 정책이 적용되어 있는지 확인하세요.

예를 들어 다음과 같습니다.

{
  "Version": "2012-10-17",
  "Statement": {
    "Effect": "Allow",
    "Action": [
      "kms:Decrypt",
      "kms:GenerateDataKey"
    ],
    "Resource": [
      "arn:aws:kms:example-region-1:123456789098:key/111aa2bb-333c-4d44-5555-a111bb2c33dd"
    ]
  }
}

이 예제 문은 IAM 사용자에게 키(arn:aws:kms:example-region-1:123456789098:key/111aa2bb-333c-4d44-5555-a111bb2c33dd)에 대해 kms:Decryptkms:GenerateDataKey 작업을 수행할 수 있는 액세스 권한을 부여합니다.

IAM 정책을 업데이트하는 방법에 대한 지침은 IAM 사용자의 권한 변경을 참조하세요.


이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요하세요?