AWS CloudFormation을 사용하여 CMK를 생성할 때 "The new key policy will not allow you to update the key policy in the future(새 키 정책으로 인해 향후 키 정책을 업데이트할 수 없습니다)" 오류 메시지를 해결하려면 어떻게 해야 합니까?

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

AWS CloudFormation을 사용하여 CMK(고객 마스터 키)를 생성하고 AWS Key Management Service(AWS KMS) 키 정책을 정의하려고 하지만, CMK 생성에 실패했습니다. 그리고 "The new key policy will not allow you to update the key policy in the future(새 키 정책으로 인해 향후 키 정책을 업데이트할 수 없습니다)" 오류 메시지가 표시됩니다.

간략한 설명

AWS KMS는 키 정책이 생성될 때 안전 점검을 수행합니다. 한 가지 안전 점검은 키 정책의 보안 주체에 CreateKey APIPutKeyPolicy API를 수행하는 데 필요한 권한이 있는지 확인합니다. 이 점검은 CMK가 관리 불가능한 상태(즉, 키 정책을 변경하거나 키를 삭제할 수 없음)가 될 가능성을 없애줍니다.

중요: 생성한 키 정책이 현재 사용자의 CMK 관리를 허용해야 합니다.

해결 방법

AWS CloudFormation 스택을 생성하는 경우 CreateStack API 호출에 사용된 AWS Identity and Access Management(IAM) 사용자 또는 역할이 AWS CloudFormation 탬플릿에 지정된 리소스를 생성할 때에도 사용됩니다

1.    AWS CloudFormation을 사용하여 CMK를 생성할 때 CMK의 키 관리 보안 주체에 사용되는 것과 동일한 IAM 사용자 또는 역할을 선택합니다.

다음 예제에서, AWS CloudFormation 스택은 IAM 사용자 arn:aws:iam::123456789012:user/Alice가 생성합니다. 보안 주체는 키 관리자로 지정됩니다. 이제 IAM 사용자 "Alice"는 키 정책이 생성된 후에 키 정책을 수정할 수 있습니다.

"Type" : "AWS::KMS::Key",
  "Properties" : {
      "Description" : "A sample key",
      "KeyPolicy" : {
          "Version": "2012-10-17",
          "Id": "key-default-1",
          "Statement": [
              {
                  "Sid": "Allow administration of the key",
                  "Effect": "Allow",
                  "Principal": { "AWS": "arn:aws:iam::123456789012:user/Alice" },
                  "Action": [
                      "kms:Create*",
                      "kms:Describe*",
                      "kms:Enable*",
                      "kms:List*",
                      "kms:Put*",
                      "kms:Update*",
                      "kms:Revoke*",
                      "kms:Disable*",
                      "kms:Get*",
                      "kms:Delete*",
                      "kms:ScheduleKeyDeletion",
                      "kms:CancelKeyDeletion"
                  ],
                  "Resource": "*"
              },
              {
                  "Sid": "Allow use of the key",
                  "Effect": "Allow",
                  "Principal": { "AWS": "arn:aws:iam::123456789012:user/Bob" },
                  "Action": [
                      "kms:Encrypt",
                      "kms:Decrypt",
                      "kms:ReEncrypt",
                      "kms:GenerateDataKey*",
                      "kms:DescribeKey"
                  ], 
                  "Resource": "*"
              }
          ]
      }
  }
  }

2.    보안 주체 키 관리자를 설정하거나, AWS 계정 루트 사용자를 보안 주체 키 관리자로 설정합니다.

보안 주체 키 관리자를 설정하려면 다음과 같이 하십시오.

연동 사용자 계정에서 AWS CloudFormation 스택을 생성한 경우 보안 주체를 Amazon 리소스 이름(ARN)에 대한 연동 사용자의 위임된 역할로 설정합니다. 예:

"Principal": { "AWS": "arn:aws:sts::123456789012:assumed-role/FederatedAccess/FederatedUsername" }

참고: IAM 역할의 이름은 FederatedAccess이고, 연동 사용자 이름은 FederatedUsername입니다.

스택을 생성하는 데 AWS CloudFormation 서비스 역할을 사용하는 경우 보안 주체를 서비스 역할 ARN으로 설정합니다. 예:

"Principal": { "AWS": "arn:aws:iam::123456789012:role/ServiceRoleName” }

참고: AWS CloudFormation 서비스 역할의 이름은 ServiceRoleName입니다.

AWS 계정 루트 사용자를 보안 주체 키 관리자로 설정하려면 다음 예를 참조하십시오.

"Principal": { "AWS": "arn:aws:iam::123456789012:root" }

참고: 보안 주체 키 관리자가 루트 ARN으로 설정된 경우 AWS CloudFormation 스택을 생성하는 IAM 사용자, 역할 또는 서비스 역할에 CreateKeyPutKeyPolicy API를 호출할 수 있는 IAM 권한이 있어야 합니다.


이 문서가 도움이 되었습니까?


결제 또는 기술 지원이 필요합니까?