本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
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:SourceAccount 和 aws: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 取代 。arn: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 for Hooks,使用者必須擁有該金鑰的kms:Decrypt許可。將下列 IAM 政策新增至將呼叫 的使用者或角色GetHookResult。 使用客戶受管金鑰的 ARN 取代 。arn: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" } ] }