本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
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 開發人員指南》https://docs.aws.amazon.com/kms/latest/developerguide/。
您可以在建立和更新勾點時設定客戶受管金鑰。當您提供客戶受管金鑰時,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 操作。若要使用下列金鑰政策,請以您自己的資訊取代預留位置值。
- JSON
-
-
{
"Version":"2012-10-17",
"Statement": [
{
"Sid": "EnableIAMUserDescribeKey",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::123456789012: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::123456789012: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": "123456789012"
},
"ArnLike": {
"kms:EncryptionContext:aws:cloudformation:arn": "arn:aws:cloudformation:*:123456789012:hook/*"
}
}
},
{
"Sid": "EnableIAMUserDecrypt",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::123456789012: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": "123456789012"
},
"ArnLike": {
"aws:SourceArn": "arn:aws:cloudformation:*:123456789012:hook/*"
}
}
},
{
"Sid": "AllowHooksService",
"Effect": "Allow",
"Principal": {
"Service": "hooks.cloudformation.amazonaws.com"
},
"Action": [
"kms:Decrypt",
"kms:GenerateDataKey"
],
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:SourceAccount": "123456789012",
"kms:EncryptionContext:aws:cloudformation:hooks:service": "hooks.cloudformation.amazonaws.com",
"kms:EncryptionContext:aws:cloudformation:account-id": "123456789012"
},
"ArnLike": {
"aws:SourceArn": "arn:aws:cloudformation:*:123456789012:hook/*",
"kms:EncryptionContext:aws:cloudformation:arn": "arn:aws:cloudformation:*:123456789012: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 設定加密的使用者或角色。使用您的資訊取代預留位置的值。
- JSON
-
-
{
"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"
},
"ArnLike": {
"kms:EncryptionContext:aws:cloudformation:arn": "arn:aws:cloudformation:*:123456789012:hook/*"
}
}
}
]
}
GetHookResult API 的 KMS 許可
若要呼叫使用客戶受管金鑰的 GetHookResult for Hooks,使用者必須擁有該金鑰的kms:Decrypt許可。將下列 IAM 政策新增至將呼叫 的使用者或角色GetHookResult。arn:aws:kms:us-east-1:123456789012:key/abc-123 使用客戶受管金鑰的 ARN 取代 。
- JSON
-
-
{
"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"
}
]
}