내용으로 건너뛰기

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

4분 분량
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."

간략한 설명

AWS KMS는 키 정책을 키에 적용할 때 안전 검사를 수행합니다. 한 번의 안전 검사를 통해 키 정책의 보안 주체가 CreateKeyPutKeyPolicy API 작업을 수행하는 데 필요한 권한을 가지고 있음을 확인할 수 있습니다. 이 검사를 통해 AWS KMS 키를 관리 가능한 상태로 유지할 수 있습니다.

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

해결 방법

참고: AWS CloudFormation 스택을 생성할 경우 IAM 사용자 또는 역할을 사용하여 CreateStack API 작업을 수행합니다. 또한 이 사용자는 AWS CloudFormation 템플릿에 지정된 리소스를 생성하는 데에도 사용됩니다.

AWS KMS 키 생성

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

  1. AWS CloudFormation을 사용하여 AWS KMS 키를 생성합니다.
  2. 나중에 키를 관리하는 데 사용할 수 있는 적절한 IAM 사용자 또는 역할을 선택합니다.
  3. 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 사용자, 역할 또는 서비스 역할에는 CreateKeyPutKeyPolicy 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

관련 정보

AWS Key Management Service

KMS 키 액세스 및 권한

AWS 공식업데이트됨 일 년 전
댓글 없음