AWS KMS 加密靜態 CloudFormation Hooks 結果的金鑰政策和許可 - CloudFormation

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

AWS KMS 加密靜態 CloudFormation Hooks 結果的金鑰政策和許可

本主題說明如何設定當您指定客戶受管金鑰來加密可從 GetHookResult API 取得的 Hooks 註釋資料時所需的 AWS KMS 金鑰政策和許可。

注意

CloudFormation 勾點不需要額外的授權,即可使用預設值 AWS 擁有的金鑰 來加密帳戶中的註釋資料。

概觀

下列項目 AWS KMS keys 可用於加密 Hook 註釋資料:

  • AWS 擁有的金鑰 – 根據預設,CloudFormation 會使用 AWS 擁有的金鑰 來加密資料。您無法檢視、管理或使用 AWS 擁有的金鑰或稽核其使用方式。不過,您不需要執行明確的組態來保護用來加密資料的金鑰。 AWS 擁有的金鑰 是免費的 (無需每月費用或使用費)。除非您需要稽核或控制保護註釋資料的加密金鑰,否則 AWS 擁有的金鑰 是不錯的選擇。

  • 客戶受管金鑰 – CloudFormation 支援使用您建立、擁有和管理的對稱客戶受管金鑰,在現有的 上新增第二層加密 AWS 擁有的金鑰。需支付 AWS KMS 費用。如需詳細資訊,請參閱《AWS Key Management Service 開發人員指南》中的建立金鑰。若要管理您的金鑰,請在 AWS KMS 主控台 AWS CLI、 AWS Key Management Service 或 AWS KMS API 中使用 (AWS KMS)。如需詳細資訊,請參閱《AWS Key Management Service 開發人員指南》

您可以在建立和更新勾點時設定客戶受管金鑰。當您提供客戶受管金鑰時,CloudFormation 會使用此金鑰在儲存註釋資料之前對其進行加密。當註釋資料稍後在 GetHookResult API 操作期間存取時,CloudFormation 會自動將其解密。如需為 Hooks 設定加密金鑰的相關資訊,請參閱 勾點組態結構描述語法參考

重要

請注意,指定客戶受管金鑰KmsKeyId的選項目前只有在您使用 AWS CLI 來設定勾點時才能使用。

使用加密內容控制對客戶受管金鑰的存取

CloudFormation Hooks 會自動在每個註釋儲存和擷取操作中包含加密內容。這可讓您在金鑰政策中設定加密內容條件,以確保金鑰只能用於特定勾點:

  • kms:EncryptionContext:aws:cloudformation:hooks:service – 確保金鑰僅供 CloudFormation Hooks 服務使用。

  • kms:EncryptionContext:aws:cloudformation:account-id – 透過比對您的 AWS 帳戶 ID 來防止跨帳戶金鑰使用。

  • kms:EncryptionContext:aws:cloudformation:arn – 使用 ARN 模式限制特定勾點的使用。

這些條件透過密碼編譯方式將加密的資料繫結至特定 Hook 內容,提供額外的保護,避免混淆代理人攻擊。

客戶受管 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 角色 (前三個陳述式) 和 CloudFormation Hooks 服務 (最後兩個陳述式)。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 金鑰加密註釋資料的許可。將下列 IAM 政策新增至將使用 SetTypeConfiguration API 設定加密的使用者或角色。arn:aws:kms:us-east-1:123456789012:key/abc-123 使用客戶受管金鑰的 ARN 取代 。

{ "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 for Hooks,使用者必須擁有該金鑰的kms:Decrypt許可。將下列 IAM 政策新增至將呼叫 的使用者或角色GetHookResultarn:aws:kms:us-east-1:123456789012:key/abc-123 使用客戶受管金鑰的 ARN 取代 。

{ "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" } ] }