내용으로 건너뛰기

AWS CloudFormation을 사용하여 AWS KMS 키를 생성할 때 발생하는 오류를 해결하려면 어떻게 해야 합니까?

3분 분량
0

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."

키 정책에 지정된 보안 주체는 CreateKeyPutKeyPolicy API 작업을 수행하는 데 필요한 권한이 있어야 합니다.

중요: 생성한 키 정책이 적절한 AWS Identity and Access Management(IAM) 보안 주체가 AWS KMS 키를 관리할 수 있도록 허용해야 합니다.

해결 방법

참고: CloudFormation 스택을 생성하면 CloudFormation이 IAM 역할을 맡아 CreateStack API 작업을 수행합니다. 또한 CloudFormation은 이 역할을 사용하여 사용자가 CloudFormation 템플릿에 지정한 리소스를 생성합니다.

AWS KMS 키 생성

다음 단계를 완료하십시오.

  1. CloudFormation 콘솔을 엽니다.
  2. AWS::KMS::Key 리소스를 사용하여 AWS KMS 키를 생성합니다.
  3. 키를 관리하는 데 사용할 수 있는 IAM 사용자 또는 역할을 선택합니다.
  4. kms:PutKeyPolicy 작업을 사용하여 Allow 명령문에 관리 보안 주체를 포함합니다.
  5. BypassPolicyLockoutSafetyCheck 리소스 파라미터를 사용합니다.

다음 예에서 KeyAdmin 역할은 정책 형식이 다음과 같을 때 키 정책을 수정할 수 있습니다.

{    "Type": "AWS::KMS::Key",
    "Properties": {
        "Description": "A sample key",
        "KeyPolicy": {
            "Version": "2012-10-17",
            "Id": "key-default-1",
            "Statement": [
                {
                    "Sid": "Allow access for Key Administrators",
                    "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" }

참고: FederatedAccess를 IAM 역할로, FederatedUsername을 사용자 이름으로 바꾸십시오.

CloudFormation 서비스 역할을 사용하여 스택을 생성할 때는 보안 주체를 서비스 역할 ARN으로 설정합니다.

정책 설명 예시:

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

참고: ServiceRoleName을 서비스 역할로 바꾸십시오.

AWS 계정 루트 사용자를 보안 주체 키 관리자로 설정하려면 정책에 다음 설명을 포함하십시오.

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

참고: 주요 키 관리자를 루트 ARN으로 설정하면 충분한 IAM 권한을 가진 계정의 모든 보안 주체가 키를 수정할 수 있습니다.

키 정책에 kms:PutKeyPolicy 권한을 가진 보안 주체가 있으면 CloudFormation을 사용하여 AWS KMS 키를 생성할 수 있습니다. CloudFormation 템플릿에서 BypassPolicyLockoutSafetyCheck 속성을 true로 설정하십시오.

예제 템플릿:

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 access for Key Administrators
          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

관련 정보

AWS Key Management Service

KMS 키 액세스 및 권한

AWS 공식업데이트됨 9달 전
댓글 없음

관련 콘텐츠