建立金鑰政策 - AWS Key Management Service

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

建立金鑰政策

您可以在 AWS KMS 主控台中或使用 AWS KMS API CreateKey、 和 等操作來建立ReplicateKey和管理金鑰政策PutKeyPolicy

當您在 AWS KMS 主控台中建立KMS金鑰時,主控台會逐步引導您根據主控台的預設金鑰政策建立金鑰政策的步驟。當您使用 CreateKeyReplicateKey 時APIs,如果您未指定金鑰政策,這些APIs政策會套用以程式設計方式建立的金鑰的預設金鑰政策。使用 PutKeyPolicy 時API,您必須指定金鑰政策。

每個政策文件可以擁有一個或多個政策陳述式。以下範例顯示具有一個政策陳述式的有效金鑰政策文件。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Describe the policy statement", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/Alice" }, "Action": "kms:DescribeKey", "Resource": "*", "Condition": { "StringEquals": { "kms:KeySpec": "SYMMETRIC_DEFAULT" } } } ] }

金鑰政策格式

金鑰政策文件必須符合以下規則:

  • 最大為 32 KB (32,768 個位元組)

  • 金鑰政策陳述式中的 Sid 元素可包含空格。(IAM政策文件的 Sid元素中禁止空格。)

金鑰政策文件僅可包含以下字元:

  • 可列印ASCII字元

  • 基本拉丁字母和拉丁字母補充-1 字元集中的可印出字元

  • Tab (\u0009)、換行字元 (\u000A) 和歸位字元 (\u000D) 特殊字元

金鑰政策中的元素

金鑰政策文件必須擁有下列元素︰

版本

指定金鑰政策文件版本。將版本設定為 2012-10-17 (最新版本)。

陳述式

包含政策陳述式。金鑰政策文件必須至少包含一個陳述式。

每個金鑰政策陳述式最多可包含六個元素。需要 EffectPrincipalActionResource 元素。

Sid

(選用) 陳述式識別符 (Sid) 為可用來描述陳述式的任意字串。金鑰政策中的 Sid 可包含空格。(您無法在IAM政策Sid元素中包含空格。)

Effect

(必要) 決定是允許還是拒絕政策陳述式中的許可。有效值為 AllowDeny。如果您未明確允許存取KMS金鑰,則會隱含拒絕存取。您也可以明確拒絕存取KMS金鑰。您可以這樣做以確保使用者無法存取 CMK,即使其他政策允許存取。

Principal

(必要) 主體是取得政策陳述式中指定許可的身分。您可以在金鑰政策中將 AWS 帳戶、IAM使用者、IAM角色和部分 AWS 服務指定為主體。IAM 使用者群組不是任何政策類型的有效主體。

星號值,例如 "AWS": "*" 代表所有帳戶的所有 AWS 身份。

重要

除非採用條件來限制金鑰政策,否則請勿在任何允許許可的金鑰政策陳述式將主體設為星號 (*)。除非其他政策陳述式明確拒絕,否則星號會為每個使用KMS金鑰的 AWS 帳戶 許可提供每個身分。其他 中的使用者只要在自己的帳戶中具有對應的許可, AWS 帳戶 就可以使用您的KMS金鑰。

注意

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

當金鑰政策陳述式中的主體是表示為 的AWS 帳戶 主體arn:aws:iam::111122223333:root",政策陳述式不會授予任何IAM主體許可。相反地,它允許 AWS 帳戶 使用IAM政策來委派金鑰政策中指定的許可。(雖然帳戶識別符中使用了「根」,但採用 arn:aws:iam::111122223333:root" 格式的主體代表AWS 帳戶根使用者。然而,帳戶主體代表帳戶及其管理員,包括帳戶根用戶。)

當主體是另一個 AWS 帳戶 或其主體時,只有在具有KMS金鑰和金鑰政策的 區域中啟用帳戶時,許可才會生效。如需相關資訊了解哪些區域預設為未啟用 (「選擇加入區域」),請參閱《AWS 一般參考》 的管理 AWS 區域

若要允許不同 AWS 帳戶 或其委託人使用KMS金鑰,您必須在金鑰政策和另一個帳戶中IAM的政策中提供許可。如需詳細資訊,請參閱 允許其他帳戶中的使用者使用KMS金鑰

動作

(必要) 指定要允許或拒絕API的操作。例如, kms:Encrypt動作對應於 AWS KMS 加密操作。您可以在政策陳述式中列出多個動作。如需詳細資訊,請參閱許可參考

注意

如果必要的 Action 元素在金鑰政策陳述式中遺失,則政策陳述式沒有任何效果。沒有 Action元素的金鑰政策陳述式不適用於任何KMS金鑰。

當金鑰政策陳述式缺少其Action元素時, AWS KMS 主控台會正確報告錯誤,但 CreateKeyPutKeyPolicyAPIs成功,即使政策陳述式無效。

資源

(必要) 在金鑰政策中,資源元素的值為 "*",這表示「此KMS金鑰」。星號 ("*") 識別KMS附加金鑰政策的金鑰。

注意

如果必要的 Resource 元素在金鑰政策陳述式中遺失,則政策陳述式沒有任何效果。沒有 Resource元素的金鑰政策陳述式不適用於任何KMS金鑰。

當金鑰政策陳述式缺少其Resource元素時, AWS KMS 主控台會正確報告錯誤,但 CreateKeyPutKeyPolicyAPIs成功,即使政策陳述式無效。

條件

(選用) 條件則會指定金鑰政策生效必須符合的需求。在條件中, AWS 可以評估API請求的內容,以判斷政策陳述式是否適用。

若要指定條件,請使用預先定義的條件金鑰 。 AWS KMS 支援AWS 全域條件金鑰AWS KMS 條件金鑰 。若要支援屬性型存取控制 (ABAC), AWS KMS 會提供條件金鑰,以根據標籤和別名控制KMS對金鑰的存取。如需詳細資訊,請參閱 ABAC 適用於 AWS KMS

條件的格式為:

"Condition": {"condition operator": {"condition key": "condition value"}}

例如:

"Condition": {"StringEquals": {"kms:CallerAccount": "111122223333"}}

如需 AWS 政策語法的詳細資訊,請參閱 IAM 使用者指南中的AWS IAM政策參考

範例金鑰政策

下列範例顯示對稱加密金鑰的完整KMS金鑰政策。在閱讀本章中的關鍵政策概念時,您可以將其用作參考。此金鑰政策將先前預設金鑰政策一節的範例政策陳述式結合至單一金鑰政策,來完成以下任務:

  • 允許範例 AWS 帳戶,111122223333,完全存取 KMS金鑰。它允許帳戶及其管理員,包括帳戶根使用者 (用於緊急狀況) 使用帳戶中IAM的政策來允許存取KMS金鑰。

  • 允許ExampleAdminRoleIAM角色管理KMS金鑰。

  • 允許ExampleUserRoleIAM角色使用 KMS金鑰。

{ "Id": "key-consolepolicy", "Version": "2012-10-17", "Statement": [ { "Sid": "Enable IAM user Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:root" }, "Action": "kms:*", "Resource": "*" }, { "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": "*" }, { "Sid": "Allow use of the key", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/ExampleUserRole" }, "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/ExampleUserRole" }, "Action": [ "kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant" ], "Resource": "*", "Condition": { "Bool": { "kms:GrantIsForAWSResource": "true" } } } ] }