預設金鑰政策 - AWS Key Management Service

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

預設金鑰政策

在您建立 KMS 金鑰時,可以指定新 KMS 金鑰的金鑰政策。如果您沒有提供,請為您 AWS KMS 建立一個。根據您是在 AWS KMS 主控台中建立金鑰還是使用 AWS KMS API,所使用的預設金鑰原則 AWS KMS 會有所不同。

當您以程式設計方式建立 KMS 金鑰時的預設金鑰政策

當您使用 AWS KMS API (包括使用 AWS SDK AWS Command Line InterfaceAWS Tools for PowerShell) 以程式設計方式建立 KMS 金鑰時,並且未指定金鑰原則時,會 AWS KMS 套用非常簡單的預設金鑰原則。此預設金鑰政策具有一個政策陳述式 AWS 帳戶 ,提供擁有 KMS 金鑰權限的使用 IAM 政策以允許存取 KMS 金鑰上的所有 AWS KMS 作業。如需有關此政策陳述式的詳細資訊,請參閱允許存取 AWS 帳戶 並啟用 IAM 政策

使用建立 KMS 金鑰時的預設金鑰原則 AWS Management Console

使用建立 KMS 金鑰時 AWS Management Console,金鑰政策會從允許存取 AWS 帳戶 和啟用 IAM 政策的政策陳述式開始。然後,主控台會新增金鑰管理員陳述式、金鑰使用者陳述式,以及 (大多數金鑰類型) 允許主體將 KMS 金鑰與其他 AWS 服務搭配使用的陳述式。您可以使用 AWS KMS 主控台的功能來指定 IAM 使用者、IAMRoles 以及 AWS 帳戶 金鑰管理員以及金鑰使用者 (或兩者) 的使用者。

許可

允許存取 AWS 帳戶 並啟用 IAM 政策

以下預設金鑰政策陳述式至關重要。

  • 它可讓擁 AWS 帳戶 有 KMS 金鑰的完整存取權限的 KMS 金鑰。

    與其他 AWS 資源策略不同, AWS KMS 金鑰策略不會自動授與帳號或其任何身分識別的權限。若要向帳戶管理員授予許可,金鑰政策必須包含提供此許可的明確陳述式。

  • 除金鑰政策外,它還允許帳戶使用 IAM 政策來允許對 KMS 金鑰的存取。

    如果沒有此許可,允許存取金鑰的 IAM 政策將無效,但拒絕存取金鑰的 IAM 政策仍然有效。

  • 它透過向帳戶管理員 (包括帳戶根使用者) 授予無法刪除存取控制許可,來降低金鑰變得無法管理的風險。

以下金鑰政策陳述式是以程式設計方式建立的 KMS 金鑰的完整預設金鑰政策。這是在主控台中建立的 KMS 金鑰的預設金鑰原則中的第一個原則陳述 AWS KMS 式。

{ "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:root" }, "Action": "kms:*", "Resource": "*" }
允許 IAM 政策允許對 KMS 金鑰的存取。

上面顯示的金鑰政策陳述式提供擁有使用 IAM 政策的金鑰權限以及金鑰政策,以允許 KMS 金鑰上的所有動作 (kms:*)。 AWS 帳戶

此金鑰政策陳述式的主體為帳戶主體,由以下格式的 ARN 表示︰arn:aws:iam::account-id:root。帳戶主體代表 AWS 帳戶及其管理員。

若金鑰政策陳述式中的主體為帳戶主體,則政策陳述式不會向任何 IAM 主體授予使用 KMS 金鑰的許可。而是允許帳戶使用 IAM 政策,來委派政策陳述式中指定的許可。此預設金鑰政策陳述式允許帳戶使用 IAM 政策,來委派 KMS 金鑰上的所有動作許可 (kms:*)。

降低 KMS 金鑰變得無法管理的風險。

與其他 AWS 資源策略不同, AWS KMS 金鑰策略不會自動授與帳號或其任何主參與者的權限。向包括帳戶主體在內的任何主體授予許可,必須使用明確授予許可的金鑰政策陳述式。您無需授予帳戶主體或任何主體存取 KMS 金鑰的許可。然而,向帳戶主體授予存取許可,能夠幫助您防止金鑰變得無法管理。

例如,假設您建立的金鑰政策僅向一個使用者授予存取 KMS 金鑰的許可。如果您隨後刪除該使用者,金鑰將變得無法管理,您必須聯絡 AWS 支援,以重新取得對 KMS 金鑰的存取。

上面顯示的金鑰政策陳述式授予控制帳戶主體金鑰的權限,帳戶主體代表 AWS 帳戶 及其管理員,包括帳號 root 使用者。帳戶根使用者是唯一不能刪除的主體,除非您刪除 AWS 帳戶。IAM 最佳實務不鼓勵代表帳戶根使用者採取行動,但在緊急情況下除外。然而,如果刪除具有 KMS 金鑰存取許可的所有其他使用者和角色,則可能需要充當帳戶根使用者。

允許金鑰管理員來管理 KMS 金鑰

透過主控台建立的預設金鑰政策可讓您選擇帳戶中的 IAM 使用者和角色,並將其設為金鑰管理員。此陳述式稱為金鑰管理員陳述式。金鑰管理員有權管理 KMS 金鑰,但無權在密碼編譯操作中使用 KMS 金鑰。當您在預設檢視或政策檢視中建立 KMS 金鑰時,您可以新增 IAM 使用者和角色至金鑰管理員的清單。

警告

因為金鑰管理員具有變更金鑰原則和建立授權的權限,所以他們可以授與自己和其他未在此原則中指定的 AWS KMS 權限。

擁有管理標籤和別名許可的主體也可以控制對 KMS 金鑰的存取。如需詳細資訊,請參閱 AWS KMS 的 ABAC

注意

IAM 最佳實務不建議使用具有長期憑證的 IAM 使用者。盡可能使用提供臨時憑證的 IAM 角色。如需詳細資訊,請參閱《IAM 使用者指南》中的 IAM 中的安全性最佳實務

以下範例顯示 AWS KMS 主控台之預設檢視中的金鑰管理員陳述式。

主控台之預設金鑰政策預設檢視中的金鑰管理員

以下是 AWS KMS 主控台之政策檢視中的範例金鑰管理員陳述式。此金鑰管理員陳述式適用於單一區域對稱加密 KMS 金鑰。

{ "Sid": "Allow access for Key Administrators", "Effect": "Allow", "Principal": {"AWS":"arn:aws:iam::111122223333:role/ExampleAdminRole"}, "Action": [ "kms:Create*", "kms:Describe*", "kms:Enable*", "kms:List*", "kms:Put*", "kms:Update*", "kms:Revoke*", "kms:Disable*", "kms:Get*", "kms:Delete*", "kms:TagResource", "kms:UntagResource", "kms:ScheduleKeyDeletion", "kms:CancelKeyDeletion", "kms:RotateKeyOnDemand" ], "Resource": "*" }

最常見的 KMS 金鑰 (即單一區域對稱加密 KMS 金鑰) 的預設金鑰管理員陳述式允許以下許可。如需有關每個許可的詳細資訊,請參閱 AWS KMS 權限

當您使用 AWS KMS 主控台建立 KMS 金鑰時,主控台會將您指定的使用者和角色新增至金鑰管理員陳述式中的Principal元素。

這些許可中有許多都包含萬用字元 (*),允許以指定動詞開頭的所有許可。因此,在新 AWS KMS 增 API 作業時,系統會自動允許金鑰管理員使用這些作業。您不需要更新您的主要政策,即可包含新的操作。如果您想要將金鑰管理員限制在一組固定的 API 操作中,您可以變更金鑰政策

kms:Create*

允許 kms:CreateAliaskms:CreateGrant。(kms:CreateKey 許可僅在 IAM 政策中有效。)

kms:Describe*

允許 kms:DescribeKey 需要 kms:DescribeKey 許可才能檢視 AWS Management Console中 KMS 金鑰的金鑰詳細資訊頁面。

kms:Enable*

允許 kms:EnableKey 如果是對稱加密 KMS 金鑰,其亦允許 kms:EnableKeyRotation

kms:List*

允許 kms:ListGrantskms:ListKeyPolicieskms:ListResourceTags。(在 AWS Management Console中檢視 KMS 金鑰所需的 kms:ListAliaseskms:ListKeys 許可,只在 IAM 政策中有效。)

kms:Put*

允許 kms:PutKeyPolicy 此許可允許金鑰管理員變更此 KMS 金鑰的金鑰政策。

kms:Update*

允許 kms:UpdateAliaskms:UpdateKeyDescription。對於多區域金鑰,它允許此 KMS 金鑰上的 kms:UpdatePrimaryRegion

kms:Revoke*

允許 kms:RevokeGrant,它允許金鑰管理員刪除授權,即使他們不是授權中的淘汰主體

kms:Disable*

允許 kms:DisableKey 如果是對稱加密 KMS 金鑰,其亦允許 kms:DisableKeyRotation

kms:Get*

允許 kms:GetKeyPolicykms:GetKeyRotationStatus。對於具有匯入金鑰材料的 KMS 金鑰,它允許 kms:GetParametersForImport。對於非對稱 KMS 金鑰,它允許 kms:GetPublicKey。需要 kms:GetKeyPolicy 許可才能檢視 AWS Management Console中 KMS 金鑰的金鑰政策。

kms:Delete*

允許 kms:DeleteAlias 對於具有匯入金鑰材料的金鑰,它允許 kms:DeleteImportedKeyMaterialkms:Delete* 許可不允許金鑰管理員刪除 KMS 金鑰 (ScheduleKeyDeletion)。

kms:TagResource

允許 kms:TagResource,可讓金鑰管理員將標籤新增至 KMS 金鑰。由於標籤也可用來控制對 KMS 金鑰的存取,此許可讓管理員可允許或拒絕對 KMS 金鑰的存取。如需詳細資訊,請參閱 AWS KMS 的 ABAC

kms:UntagResource

允許 kms:UntagResource,可讓金鑰管理員從 KMS 金鑰刪除標籤。由於標籤可用來控制對金鑰的存取,因此此許可可讓管理員允許或拒絕對 KMS 金鑰的存取。如需詳細資訊,請參閱 AWS KMS 的 ABAC

kms:ScheduleKeyDeletion

允許 kms:ScheduleKeyDeletion,可讓金鑰管理員刪除此 KMS 金鑰。若要刪除此許可,請清除 Allow key administrators to delete this key (允許金鑰管理員刪除此金鑰) 選項。

kms:CancelKeyDeletion

允許 kms:CancelKeyDeletion,可讓金鑰管理員取消刪除此 KMS 金鑰。若要刪除此許可,請清除 Allow key administrators to delete this key (允許金鑰管理員刪除此金鑰) 選項。

kms:RotateKeyOnDemand

允許 kms:RotateKeyOnDemand,這可讓金鑰管理員對此 KMS 金鑰中的金鑰材料執行隨選輪換

 

AWS KMS 當您建立特殊用途金鑰時,會將下列權限新增至預設金鑰管理員陳述式。

kms:ImportKeyMaterial

kms:ImportKeyMaterial 許可允許金鑰管理員將金鑰材料匯入 KMS 金鑰。只有當您建立不含金鑰資料的 KMS 金鑰時,此許可才會包含在金鑰政策中。

kms:ReplicateKey

kms:ReplicateKey權限允許金鑰管理員在不同 AWS 區域中建立多區域主索引鍵的複本。只有當您建立多區域主要金鑰或複本金鑰時,此許可才會包含在金鑰政策中。

kms:UpdatePrimaryRegion

kms:UpdatePrimaryRegion 許可允許金鑰管理員將多區域複本金鑰變更為多區域主要金鑰。只有當您建立多區域主要金鑰或複本金鑰時,此許可才會包含在金鑰政策中。

允許金鑰使用者使用 KMS 金鑰

主控台為 KMS 金鑰建立的預設金鑰政策可讓您在帳戶和外部中選擇 IAM 使用者和 IAM 角色 AWS 帳戶,並將其設為金鑰使用者

主控台會將兩個政策陳述式新增至金鑰使用者的金鑰政策。

您可以在建立 KMS 金鑰時,將 IAM 使用者、IAM 角色和其他角色新增 AWS 帳戶 至金鑰使用者清單。您也可以使用主控台的金鑰政策預設檢視來編輯清單,如下圖所示。金鑰政策的預設檢視位於金鑰詳細資訊頁面。如需有關允許其他 AWS 帳戶 使用者使用 KMS 金鑰的詳細資訊,請參閱允許其他帳戶中的使用者使用 KMS 金鑰

注意

IAM 最佳實務不建議使用具有長期憑證的 IAM 使用者。盡可能使用提供臨時憑證的 IAM 角色。如需詳細資訊,請參閱《IAM 使用者指南》中的 IAM 中的安全性最佳實務

主控台之預設金鑰政策預設檢視中的金鑰使用者

單一區域對稱的預設金鑰使用者陳述式允許下列許可。如需有關每個許可的詳細資訊,請參閱 AWS KMS 權限

當您使用 AWS KMS 主控台建立 KMS 金鑰時,主控台會將您指定的使用者和角色新增至每個金鑰使用者陳述式中的Principal元素。

{ "Sid": "Allow use of the key", "Effect": "Allow", "Principal": {"AWS": [ "arn:aws:iam::111122223333:role/ExampleRole", "arn:aws:iam::444455556666:root" ]}, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*" }, { "Sid": "Allow attachment of persistent resources", "Effect": "Allow", "Principal": {"AWS": [ "arn:aws:iam::111122223333:role/ExampleRole", "arn:aws:iam::444455556666:root" ]}, "Action": [ "kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant" ], "Resource": "*", "Condition": {"Bool": {"kms:GrantIsForAWSResource": true}} }

允許金鑰使用者在密碼編譯操作中使用 KMS 金鑰

金鑰使用者有權直接在 KMS 金鑰支援的所有密碼編譯操作中使用 KMS 金鑰。他們也可以使用此DescribeKey作業在 AWS KMS 主控台中取得 KMS 金鑰的詳細資訊,或透過使用 AWS KMS API 作業取得關於 KMS 金鑰的詳細資訊。

根據預設, AWS KMS 主控台會將下列範例中的金鑰使用者陳述式新增至預設金鑰原則。由於政策陳述式支援不同的 API 操作,因此對稱加密 KMS 金鑰、HMAC KMS 金鑰、用於公有金鑰加密的非對稱 KMS 金鑰、用於簽署和驗證的非對稱 KMS 金鑰的政策陳述式中的動作都會略有不同。

對稱加密 KMS 金鑰

主控台會將下列陳述式新增至對稱加密 KMS 金鑰的金鑰政策。

{ "Sid": "Allow use of the key", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::111122223333:role/ExampleKeyUserRole"}, "Action": [ "kms:Decrypt", "kms:DescribeKey", "kms:Encrypt", "kms:GenerateDataKey*", "kms:ReEncrypt*" ], "Resource": "*" }
HMAC KMS 金鑰

主控台會將下列陳述式新增至 HMAC KMS 金鑰的金鑰政策。

{ "Sid": "Allow use of the key", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::111122223333:role/ExampleKeyUserRole"}, "Action": [ "kms:DescribeKey", "kms:GenerateMac", "kms:VerifyMac" ], "Resource": "*" }
公有金鑰加密的非對稱 KMS 金鑰

主控台會將下列陳述式新增至金鑰使用情形為 Encrypt and decrypt (加密和解密) 之非對稱 KMS 金鑰的金鑰政策。

{ "Sid": "Allow use of the key", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/ExampleKeyUserRole" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:DescribeKey", "kms:GetPublicKey" ], "Resource": "*" }
用於簽署和驗證的非對稱 KMS 金鑰

主控台會將下列陳述式新增至金鑰使用情形為 Sign and verify (簽署和驗證) 之非對稱 KMS 金鑰的金鑰政策。

{ "Sid": "Allow use of the key", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::111122223333:role/ExampleKeyUserRole"}, "Action": [ "kms:DescribeKey", "kms:GetPublicKey", "kms:Sign", "kms:Verify" ], "Resource": "*" }
用於衍生共用密碼的非對稱 KMS 金鑰

主控台會將下列陳述式新增至非對稱 KMS 金鑰的金鑰原則 (包含金鑰合約的金鑰使用方式)。

{ "Sid": "Allow use of the key", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::111122223333:role/ExampleKeyUserRole"}, "Action": [ "kms:DescribeKey", "kms:GetPublicKey", "kms:DeriveSharedSecret" ], "Resource": "*" }

這些陳述式中的動作會提供金鑰使用者下列許可。

kms:Encrypt

允許金鑰使用者使用此 KMS 金鑰加密資料。

kms:Decrypt

允許金鑰使用者使用此 KMS 金鑰解密資料。

kms:DeriveSharedSecret

允許金鑰使用者使用此 KMS 金鑰衍生共用密碼。

kms:DescribeKey

允許金鑰使用者取得此 KMS 金鑰的資訊,包括其識別符、建立日期和金鑰狀態。它還允許金鑰使用者在 AWS KMS 主控台中顯示 KMS 金鑰的詳細資料。

kms:GenerateDataKey*

允許金鑰使用者為用戶端密碼編譯操作請求對稱資料金鑰或非對稱資料金鑰對。主控台使用 * 萬用字元來代表下列 API 作業的權限:GenerateDataKeyGenerateDataKeyWithoutPlaintextGenerateDataKeyPair、和GenerateDataKeyPairWithoutPlaintext。這些許可只有在加密資料金鑰的對稱 KMS 金鑰上才有效。

公里:GenerateMac

允許金鑰使用者使用 HMAC KMS 金鑰來產生 HMAC 標籤。

公里:GetPublicKey

允許金鑰使用者下載非對稱 KMS 金鑰的公有金鑰。與您共用此公開金鑰的各方可以在其他地方加密資料 AWS KMS。不過,這些加密文字只能透過呼叫 AWS KMS中的 Decrypt 操作進行解密。

公里:ReEncrypt*

允許金鑰使用者重新加密原本使用此 KMS 金鑰加密的資料,或使用此 KMS 金鑰重新加密之前加密過的資料。此作ReEncrypt業需要存取來源和目的地 KMS 金鑰。若要完成此動作,您可以允許來源 KMS 金鑰的 kms:ReEncryptFrom 許可和目標 KMS 金鑰的 kms:ReEncryptTo 許可。但為簡單起見,主控台允許兩種 KMS 金鑰都使用 kms:ReEncrypt* (使用 * 萬用字元)。

kms:Sign

允許金鑰使用者使用此 KMS 金鑰簽署訊息。

kms:Verify

允許金鑰使用者使用此 KMS 金鑰驗證簽章。

公里:VerifyMac

允許金鑰使用者使用 HMAC KMS 金鑰來驗證 HMAC 標籤。

允許金鑰使用者使用 KMS 金鑰搭配 AWS 服務

主控台中的預設金鑰原則也會授與金鑰使用者所需的權限,以保護使用授與之 AWS 服務中的資料。 AWS 服務通常使用授權來取得使用 KMS 金鑰的特定和有限權限。

此金鑰原則陳述式允許金鑰使用者建立、檢視和撤銷 KMS 金鑰的授權,但只有當授權作業要求來自與整合的AWS 服務時 AWS KMS。kms: GrantIsFor AWSResource 原則條件不允許使用者直接呼叫這些授權作業。當金鑰使用者允許時, AWS 服務可以代表使用者建立授權,以允許服務使用 KMS 金鑰來保護使用者的資料。

金鑰使用者需要這些授權許可,才能使用其 KMS 金鑰與整合服務,但這些許可仍有不足。金鑰使用者也需要有許可才能使用整合服務。如需有關提供使用者存取與整合之 AWS 服務的詳細資訊 AWS KMS,請參閱整合式服務的說明文件。

{ "Sid": "Allow attachment of persistent resources", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::111122223333:role/ExampleKeyUserRole"}, "Action": [ "kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant" ], "Resource": "*", "Condition": {"Bool": {"kms:GrantIsForAWSResource": true}} }

例如,金鑰使用者可以透過下列方式在 KMS 金鑰上使用這些許可。

  • 將此 KMS 金鑰搭配 Amazon Elastic Block Store (Amazon EBS) 和 Amazon Elastic Compute Cloud (Amazon EC2) 使用,將加密的 EBS 磁碟區連接到 EC2 執行個體。金鑰使用者隱含提供 Amazon EC2 使用 KMS 金鑰將加密磁碟區連接到執行個體的許可。如需詳細資訊,請參閱 Amazon Elastic Block Store (Amazon EBS) 如何使用 AWS KMS

  • 將此 KMS 金鑰搭配 Amazon Redshift 使用,以啟動加密叢集。金鑰使用者隱含提供 Amazon Redshift 使用 KMS 金鑰啟動加密叢集並建立加密快照的許可。如需詳細資訊,請參閱 Amazon Redshift 如何使用 AWS KMS

  • 使用此 KMS 金鑰搭配其他與 AWS KMS整合且使用授權的AWS 服務,來建立、管理或使用加密資源搭配這些服務。

預設金鑰政策允許金鑰使用者將其許可授予所有使用授權的整合服務。不過,您可以建立自訂金鑰原則,以限制指定 AWS 服務的權限。如需詳細資訊,請參閱 公里:ViaService 條件金鑰。