AWS KMS 유휴 CloudFormation Hooks 결과를 암호화하기 위한 키 정책 및 권한 - CloudFormation

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

AWS KMS 유휴 CloudFormation Hooks 결과를 암호화하기 위한 키 정책 및 권한

이 주제에서는 GetHookResult API에서 사용할 수 있는 후크 주석 데이터를 암호화하기 위해 고객 관리형 키를 지정할 때 필요한 키 AWS KMS 정책 및 권한을 설정하는 방법을 설명합니다.

참고

CloudFormation 후크는 기본값을 AWS 소유 키 사용하여 계정의 주석 데이터를 암호화하는 데 추가 권한이 필요하지 않습니다.

개요

다음은 후크 주석 데이터를 암호화하는 데 사용할 AWS KMS keys 수 있습니다.

  • AWS 소유 키 - 기본적으로 CloudFormation은를 사용하여 데이터를 암호화 AWS 소유 키 합니다. 사용을 확인, 관리 또는 사용하거나 AWS 소유 키감사할 수 없습니다. 그러나 데이터를 암호화하는 데 사용되는 키를 보호하기 위해 명시적 구성을 수행할 필요는 없습니다. AWS 소유 키 는 무료로 제공됩니다(월 요금 또는 사용 요금 없음). 주석 데이터를 보호하는 암호화 키를 감사하거나 제어해야 하는 경우가 아니면 AWS 소유 키 를 선택하는 것이 좋습니다.

  • 고객 관리형 키 - CloudFormation은 기존에 대해 두 번째 암호화 계층을 추가하기 위해 생성, 소유 및 관리하는 대칭 고객 관리형 키 사용을 지원합니다 AWS 소유 키. AWS KMS 요금이 적용됩니다. 자세한 정보는 AWS Key Management Service 개발자 안내서키 생성을 참조하세요. 키를 관리하려면 AWS KMS 콘솔, AWS CLI또는 AWS KMS API에서 (AWS KMS)를 사용합니다 AWS Key Management Service . 자세한 내용은 개발자 안내서AWS Key Management Service를 참조하세요.

후크를 생성하고 업데이트할 때 고객 관리형 키를 구성할 수 있습니다. 고객 관리형 키를 제공하면 CloudFormation은이 키를 사용하여 주석 데이터를 저장하기 전에 암호화합니다. 나중에 GetHookResult API 작업 중에 주석 데이터에 액세스하면 CloudFormation에서 자동으로 복호화합니다. 후크에 대한 암호화 키 구성에 대한 자세한 내용은 섹션을 참조하세요후크 구성 스키마 구문 참조.

중요

고객 관리형 키를 지정하는 KmsKeyId 옵션은 현재를 사용하여 후크 AWS CLI 를 구성하는 경우에만 사용할 수 있습니다.

암호화 컨텍스트를 사용하여 고객 관리형 키에 대한 액세스 제어

CloudFormation 후크에는 모든 주석 저장 및 검색 작업에 암호화 컨텍스트가 자동으로 포함됩니다. 이렇게 하면 키 정책에서 암호화 컨텍스트 조건을 설정하여 키를 특정 후크에만 사용할 수 있습니다.

  • kms:EncryptionContext:aws:cloudformation:hooks:service - 키가 CloudFormation Hooks 서비스에서만 사용되는지 확인합니다.

  • kms:EncryptionContext:aws:cloudformation:account-id - AWS 계정 ID와 일치하여 교차 계정 키 사용을 방지합니다.

  • kms:EncryptionContext:aws:cloudformation:arn - ARN 패턴을 사용하여 특정 후크로 사용을 제한합니다.

이러한 조건은 암호화된 데이터를 특정 후크 컨텍스트에 암호화 방식으로 바인딩하여 혼동된 대리자 공격에 대한 추가 보호를 제공합니다.

고객 관리형 KMS 키 정책

고객 관리형 키를 생성할 때 CloudFormation Hooks 서비스가 AWS KMS 작업을 수행할 수 있도록 키 정책을 정의해야 합니다. 다음 키 정책을 사용하려면 자리 표시자 값을 자신의 정보로 바꿉니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "EnableIAMUserDescribeKey", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/ExampleRole" }, "Action": "kms:DescribeKey", "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": "cloudformation.us-east-1.amazonaws.com" } } }, { "Sid": "EnableIAMUserGenerateDataKey", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/ExampleRole" }, "Action": "kms:GenerateDataKey", "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": "cloudformation.us-east-1.amazonaws.com", "kms:EncryptionContext:aws:cloudformation:hooks:service": "hooks.cloudformation.amazonaws.com", "kms:EncryptionContext:aws:cloudformation:account-id": "111122223333" }, "StringLike": { "kms:EncryptionContext:aws:cloudformation:arn": "arn:aws:cloudformation:*:111122223333:hook/*" } } }, { "Sid": "EnableIAMUserDecrypt", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/ExampleRole" }, "Action": "kms:Decrypt", "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": "cloudformation.us-east-1.amazonaws.com" } } }, { "Sid": "AllowHooksServiceDescribeKey", "Effect": "Allow", "Principal": { "Service": "hooks.cloudformation.amazonaws.com" }, "Action": "kms:DescribeKey", "Resource": "*", "Condition": { "StringEquals": { "aws:SourceAccount": "111122223333" }, "StringLike": { "aws:SourceArn": "arn:aws:cloudformation:*:111122223333:hook/*" } } }, { "Sid": "AllowHooksService", "Effect": "Allow", "Principal": { "Service": "hooks.cloudformation.amazonaws.com" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "*", "Condition": { "StringEquals": { "aws:SourceAccount": "111122223333", "kms:EncryptionContext:aws:cloudformation:hooks:service": "hooks.cloudformation.amazonaws.com", "kms:EncryptionContext:aws:cloudformation:account-id": "111122223333" }, "StringLike": { "aws:SourceArn": "arn:aws:cloudformation:*:111122223333:hook/*", "kms:EncryptionContext:aws:cloudformation:arn": "arn:aws:cloudformation:*:111122223333:hook/*" } } } ] }

이 정책은 IAM 역할(처음 3개 문)과 CloudFormation Hooks 서비스(마지막 2개 문) 모두에 권한을 부여합니다. kms:ViaService 조건 키는 KMS 키를 CloudFormation을 통해서만 사용할 수 있도록 하여 KMS API 직접 호출을 방지합니다. 주요 작업은 다음과 같습니다.

  • kms:DescribeKey - 키 속성 및 메타데이터를 검증합니다. 이 작업은 암호화 컨텍스트 조건에 사용할 수 없으므로 별도의 문에 있습니다.

  • kms:GenerateDataKey - 저장 전에 주석을 암호화하기 위한 데이터 암호화 키를 생성합니다. 이 작업에는 범위가 지정된 액세스 제어를 위한 암호화 컨텍스트 조건이 포함됩니다.

  • kms:Decrypt - 이전에 암호화된 주석 데이터를 해독합니다. IAM 역할의 경우 여기에는 kms:ViaService 조건이 포함됩니다. 서비스 보안 주체의 경우 여기에는 암호화 컨텍스트 조건이 포함됩니다.

aws:SourceAccountaws:SourceArn 조건 키는 혼동된 대리자 공격에 대한 기본 보호를 제공합니다. 암호화 컨텍스트 조건은 추가 검증 계층을 제공합니다. 자세한 내용은 AWS Key Management Service 개발자 안내서aws:SourceArn 또는 aws:SourceAccount 조건 키 사용을 참조하세요.

중요

후크 실행 역할에는 AWS KMS 권한이 필요하지 않습니다. CloudFormation Hooks 서비스 보안 주체는 모든 AWS KMS 작업을 수행합니다.

SetTypeConfiguration API에 대한 KMS 권한

SetTypeConfiguration API 호출 중에 CloudFormation은 지정된 AWS KMS 키로 주석 데이터를 암호화할 수 있는 사용자 권한을 검증합니다. SetTypeConfiguration API를 사용하여 암호화를 구성할 사용자 또는 역할에 다음 IAM 정책을 추가합니다. 를 고객 관리형 키의 ARNarn:aws:kms:us-east-1:123456789012:key/abc-123으로 바꿉니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "cloudformation:SetTypeConfiguration", "Resource": "*" }, { "Effect": "Allow", "Action": "kms:DescribeKey", "Resource": "arn:aws:kms:us-east-1:123456789012:key/abc-123" }, { "Effect": "Allow", "Action": "kms:GenerateDataKey", "Resource": "arn:aws:kms:us-east-1:123456789012:key/abc-123", "Condition": { "StringEquals": { "kms:EncryptionContext:aws:cloudformation:hooks:service": "hooks.cloudformation.amazonaws.com", "kms:EncryptionContext:aws:cloudformation:account-id": "123456789012" }, "StringLike": { "kms:EncryptionContext:aws:cloudformation:arn": "arn:aws:cloudformation:*:123456789012:hook/*" } } } ] }

GetHookResult API에 대한 KMS 권한

고객 관리형 키를 사용하는 후크에 대해 GetHookResult를 호출하려면 사용자에게 해당 키에 대한 kms:Decrypt 권한이 있어야 합니다. 를 호출할 사용자 또는 역할에 다음 IAM 정책을 추가합니다GetHookResult. 를 고객 관리형 키의 ARNarn:aws:kms:us-east-1:123456789012:key/abc-123으로 바꿉니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "cloudformation:GetHookResult", "Resource": "*" }, { "Effect": "Allow", "Action": "kms:Decrypt", "Resource": "arn:aws:kms:us-east-1:123456789012:key/abc-123" } ] }