View a markdown version of this page

建立金鑰政策 - AWS Key Management Service

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

建立金鑰政策

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

當您在 AWS KMS 主控台中建立 KMS 金鑰時,主控台會逐步引導您根據主控台的預設金鑰政策建立金鑰政策。使用 CreateKey 或 ReplicateKey API 時,若不指定金鑰政策,這些 API 便會為以程式設計方式建立之金鑰,套用預設金鑰政策。當您採用 PutKeyPolicy API 時,必須指定金鑰政策。

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

JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "DescribePolicyStatement", "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 (最新版本)。

陳述式

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

每個金鑰政策陳述式最多可包含六個元素。需要 Effect、Principal、Action 和 Resource 元素。

Sid

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

Effect

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

Principal

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

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

重要

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

注意

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

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

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

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

Action

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

注意

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

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

資源

(必要) 在金鑰政策中,Resource 元素的值是 "*",表示「此 KMS 金鑰」。星號 ("*") 會識別金鑰政策所連接的 KMS 金鑰。

注意

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

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

條件

(選用) 條件則會指定金鑰政策生效必須符合的需求。有條件時, 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 政策語法的詳細資訊,請參閱《AWS IAM 使用者指南》中的 IAM 政策參考。

範例金鑰政策

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

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

  • 允許 ExampleAdminRole IAM 角色管理 KMS 金鑰。

  • 允許 ExampleUserRole IAM 角色使用 KMS 金鑰。

JSON
{ "Id": "key-consolepolicy", "Version":"2012-10-17", "Statement": [ { "Sid": "EnableIAMUserPermissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:root" }, "Action": "kms:*", "Resource": "*" }, { "Sid": "AllowKeyAdministratorsAccess", "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": "AllowKeyUse", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/ExampleUserRole" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*" }, { "Sid": "AllowAttachmentPersistentResources", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/ExampleUserRole" }, "Action": [ "kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant" ], "Resource": "*", "Condition": { "Bool": { "kms:GrantIsForAWSResource": "true" } } } ] }