Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
AWS CloudFormation을 사용하여 AWS KMS 키를 생성할 때 발생하는 오류를 해결하려면 어떻게 해야 합니까?
AWS Key Management Service(AWS KMS) 키를 생성하고 AWS CloudFormation을 통해 AWS KMS 키 정책을 정의할 때 키 생성에 실패합니다. 그러면 다음과 같은 오류 메시지가 나타납니다. "The new key policy will not allow you to update the key policy in the future."
간략한 설명
AWS KMS는 키 정책을 키에 적용할 때 안전 검사를 수행합니다. 한 번의 안전 검사를 통해 키 정책의 보안 주체가 CreateKey 및 PutKeyPolicy API 작업을 수행하는 데 필요한 권한을 가지고 있음을 확인할 수 있습니다. 이 검사를 통해 AWS KMS 키를 관리 가능한 상태로 유지할 수 있습니다.
중요: 생성한 키 정책이 적절한 AWS Identity and Access Management(IAM) 보안 주체가 AWS KMS 키를 관리할 수 있도록 허용해야 합니다.
해결 방법
참고: AWS CloudFormation 스택을 생성할 경우 IAM 사용자 또는 역할을 사용하여 CreateStack API 작업을 수행합니다. 또한 이 사용자는 AWS CloudFormation 템플릿에 지정된 리소스를 생성하는 데에도 사용됩니다.
AWS KMS 키 생성
다음 단계를 완료하십시오.
- AWS CloudFormation을 사용하여 AWS KMS 키를 생성합니다.
- 나중에 키를 관리하는 데 사용할 수 있는 적절한 IAM 사용자 또는 역할을 선택합니다.
- kms:PutKeyPolicy 작업에서 Allow 문에 유효한 관리 주체를 포함시킨 후 BypassPolicyLockoutSafetyCheck 리소스 파라미터를 사용하십시오.
다음 예에서는 IAM 사용자 arn:aws:iam::123456789012:user/Alice가 AWS CloudFormation 스택을 생성합니다. KeyAdmin 역할은 키 관리자로 지정됩니다. IAM 역할 KeyAdmin은 다음과 같은 형식의 키 정책으로 키를 생성할 때 키 정책을 수정할 수 있습니다.
{ "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:role/KeyAdmin" }, "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:role/KeyUser" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*" } ] } } }
중요: 정책에 유효한 보안 주체가 지정되지 않은 경우 BypassPolicyLockoutSafetyCheck으로 인해 관리 불가능한 키가 생성될 수 있습니다. 정책에서 유효한 보안 주체를 사용하는지 확인하십시오.
주요 키 관리자 설정
페더레이션형 ID 공급자에서 보안 주체 키 관리자를 설정하려면 역할 세션 Amazon 리소스 이름(ARN)을 사용하십시오. 또한 외부 ID 공급자가 제공하는 특정 관리자의 역할 수임 세션을 키 관리의 보안 주체로 사용할 수 있습니다.
예:
"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 사용자, 역할 또는 서비스 역할에는 CreateKey 및 PutKeyPolicy API 작업을 수행할 수 있는 IAM 권한이 있어야 합니다.
중요: 주요 키 관리자를 루트 ARN으로 설정하면 루트 사용자뿐만 아니라 충분한 IAM 권한을 가진 계정의 모든 보안 주체가 키를 수정할 수 있습니다.
키 정책에 kms:PutKeyPolicy 권한을 가진 보안 주체가 있으면 AWS CloudFormation을 사용하여 AWS KMS 키를 생성할 수 있습니다. AWS CloudFormation 템플릿에서 BypassPolicyLockoutSafetyCheck 속성을 사용하십시오.
예:
myKMSKey: Type: 'AWS::KMS::Key' Properties: Description: This key is managed by the KeyAdmin role BypassPolicyLockoutSafetyCheck: true KeyPolicy: Version: 2012-10-17 Id: key-policy-1 Statement: - Sid: Allow administration of the key Effect: Allow Principal: AWS: 'arn:aws:iam::123456789012:role/KeyAdmin' 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:role/KeyUser' Action: - 'kms:DescribeKey' - 'kms:Encrypt' - 'kms:Decrypt' - 'kms:ReEncrypt*' - 'kms:GenerateDataKey' - 'kms:GenerateDataKeyWithoutPlaintext' Resource: '*' EnableKeyRotation: true PendingWindowInDays: 30
관련 정보
- 언어
- 한국어
