允許其他帳戶中的使用者使用 KMS 金鑰 - AWS Key Management Service

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

允許其他帳戶中的使用者使用 KMS 金鑰

您可以允許不同 AWS 帳戶 中的使用者或角色使用帳戶中的 KMS 金鑰。跨帳戶存取需要 KMS 金鑰的金鑰政策和外部使用者帳戶之 IAM 政策中的許可。

跨帳戶許可僅適用於下列操作:

如果您提供許可給不同帳戶中的使用者,讓他們能夠進行其他操作,則這些許可沒有任何作用。例如,如果您在不同帳戶中授予主體 kms:IAM 政策中的ListKeys權限或 kms: 金鑰政策中 KMS 金鑰的ScheduleKeyDeletion權限,則使用者嘗試呼叫您的資源上的這些作業仍然失敗。

如需有關使用不同帳戶中的 KMS 金鑰進行 AWS KMS 操作的詳細資訊,請參閱AWS KMS 權限在其他帳戶中使用 KMS 金鑰 中的 Cross-account use (跨帳戶使用) 資料欄。還有 AWS Key Management Service API 參考中每個 API 描述的跨帳戶使用章節。

警告

請謹慎為委託人提供使用 KMS 金鑰的許可。只要有可能,請遵循最低權限原則。讓使用者只能存取其所需的 KMS 金鑰,以便只能存取所需的操作。

此外,請謹慎使用任何不熟悉的 KMS 金鑰,尤其是不同帳戶中的 KMS 金鑰。惡意使用者可能會授予您使用其 KMS 金鑰的許可,以取得關於您或您帳戶的資訊。

如需使用政策來保護帳戶中資源的詳細資訊,請參閱 IAM 政策的最佳實務

若要提供 KMS 金鑰的使用許可給另一個帳戶中的使用者和角色,則需使用兩種不同類型的政策:

  • KMS 金鑰的金鑰政策必須提供外部帳戶 (或外部帳戶中的使用者和角色) 使用 KMS 金鑰的許可。金鑰政策位在擁有 KMS 金鑰的帳戶中。

  • 外部帳戶的 IAM 政策必須委派金鑰政策許可給其使用者和角色。這些政策會在外部帳戶中設定,並提供許可給該帳戶中的使用者和角色。

金鑰政策決定誰可以存取 KMS 金鑰。IAM 政策決定誰可以存取 KMS 金鑰。單獨的金鑰政策或 IAM 政策都不夠,您必須同時變更兩者。

若要編輯金鑰原則,您可以使用中的原則檢視,AWS Management Console或使用CreateKeyPutKeyPolicy作業。如需建立 KMS 金鑰時設定金鑰政策的說明,請參閱 建立其他帳戶可以使用的 KMS 金鑰

如需編輯 IAM 政策的說明,請參閱 使用 IAM 政策搭配使用 AWS KMS

如需說明金鑰政策和 IAM 政策如何搭配運作,以允許在不同帳戶中使用 KMS 金鑰的範例,請參閱 範例 2:使用者採用的角色具有在不同 AWS 帳戶 中使用 KMS 金鑰的許可

您可以檢視 AWS CloudTrail 日誌中對 KMS 金鑰產生的跨帳戶 AWS KMS 操作。對其他帳戶中使用 KMS 金鑰的操作會同時記入呼叫者帳戶和 KMS 金鑰擁有者帳戶。

注意

本主題中的範例旨在說明如何結合使用金鑰政策和 IAM 政策,來提供和限制存取 KMS 金鑰的權限。這些一般範例並非是指任何特定 AWS 服務 在 KMS 金鑰上所需的許可。如需有關 AWS 服務 所需許可的詳細資訊,請參閱服務文件中的加密主題。

步驟 1:在本機帳戶中新增金鑰政策陳述式

KMS 金鑰的金鑰政策是決定誰可以存取 KMS 金鑰及其可執行操作的主要因素。金鑰政策一律位在擁有 KMS 金鑰的帳戶中。與 IAM 政策不同,金鑰政策並不會指定資源。資源即是與該金鑰政策相關聯的 KMS 金鑰。當提供跨帳戶許可時,KMS 金鑰的金鑰政策必須提供外部帳戶 (或外部帳戶中的使用者和角色) 使用 KMS 金鑰的許可。

若要提供外部帳戶使用 KMS 金鑰的許可,請新增陳述式至指定外部帳戶的金鑰政策。在金鑰政策的 Principal 元素中,輸入外部帳戶的 Amazon Resource Name (ARN)。

當您在金鑰政策中指定外部帳戶時,該外部帳戶中的 IAM 管理員可以使用 IAM 政策來將這些許可委派給外部帳戶中的任何使用者和角色。他們也能決定使用者和角色可以執行金鑰政策中所指定的哪些動作。

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

例如,假設您想允許帳戶 444455556666 使用帳戶 111122223333 中的對稱加密 KMS 金鑰。若要執行此操作,請將政策陳述式新增至帳戶 111122223333 中 KMS 金鑰的金鑰政策,如以下範例所示。此政策陳述式會授予外部帳戶 444455556666 許可,在對稱加密 KMS 金鑰的密碼編譯操作中使用 KMS 金鑰。

注意

下列範例顯示與其他帳戶共用 KMS 金鑰的金鑰政策範例。將範例 SidPrincipalAction 值取代為 KMS 金鑰之預定用途的有效值。

{ "Sid": "Allow an external account to use this KMS key", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::444455556666:root" ] }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*" }

您可以在金鑰政策中指定特定的外部使用者和角色,而不用提供許可給外部帳戶。不過,除非外部帳戶中的 IAM 管理員將適當的 IAM 政策連接至各自身分,否則這些使用者和角色無法使用 KMS 金鑰。IAM 政策可以將許可提供給金鑰政策中指定的所有或部分外部使用者和角色。而且,其可允許金鑰政策中指定的全部動作或部分動作。

在金鑰政策中指定身分可以限制外部帳戶 IAM 管理員能提供的許可。然而,這會讓兩個帳戶的政策管理作業更加複雜。舉例來說,假設您需要新增使用者或角色。您必須將該身分新增至擁有 KMS 金鑰之帳戶中的金鑰政策,並在該身分的帳戶中建立 IAM 政策。

若要在金鑰政策中指定特定的外部使用者或角色,則請在 Principal 元素中輸入外部帳戶使用者或角色的 Amazon Resource Name (ARN)。

例如,以下金鑰政策陳述式範例允許帳戶 444455556666 中的 ExampleRole 使用帳戶 111122223333 中的 KMS 金鑰。此金鑰政策陳述式會授予外部帳戶 444455556666 許可,在對稱加密 KMS 金鑰的密碼編譯操作中使用 KMS 金鑰。

注意

下列範例顯示與其他帳戶共用 KMS 金鑰的金鑰政策範例。將範例 SidPrincipalAction 值取代為 KMS 金鑰之預定用途的有效值。

{ "Sid": "Allow an external account to use this KMS key", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::444455556666:role/ExampleRole" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*" }
注意

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

您也需要決定要提供哪些許可給外部帳戶。如需 KMS 金鑰上的許可清單,請參閱 AWS KMS 權限

您可以提供外部帳戶在密碼編譯操作中使用 KMS 金鑰的許可,並搭配與 AWS KMS 整合的 AWS 服務使用 KMS 金鑰。若要執行這項操作,請使用 AWS Management Console 的 Key Users (金鑰使用者) 區段。如需詳細資訊,請參閱 建立其他帳戶可以使用的 KMS 金鑰

若要在金鑰政策中指定其他許可,則需編輯金鑰政策文件。例如,您可能想提供使用者能解密但無法加密的許可,或是能檢視但無法使用 KMS 金鑰的許可。若要編輯金鑰原則文件,您可以使用AWS Management ConsoleCreateKeyPutKeyPolicy作業中的原則檢視

步驟 2:在外部帳戶中新增 IAM 政策

擁有 KMS 金鑰之帳戶中的金鑰政策能夠設定許可的有效範圍。但是,在您連接能夠委派這些許可或使用授予來管理 KMS 金鑰存取權限的 IAM 政策前,外部帳戶中的使用者和角色都無法使用 KMS 金鑰。IAM 政策是在外部帳戶中設定。

如果金鑰政策是將許可提供給外部帳戶,您就能將 IAM 政策連接至該帳戶中的任何角色或使用者。但若金鑰政策是將許可提供給指定的使用者或角色,則 IAM 政策僅可提供這些許可給所有或部分指定的使用者和角色。如果 IAM 政策將 KMS 金鑰存取權限提供給其他外部使用者或角色,並不會起任何作用。

金鑰政策也能限制 IAM 政策中的動作。IAM 政策可以委派金鑰政策中指定的全部動作或部分動作。如果 IAM 政策列出金鑰政策中未指定的動作,則這些許可不會生效。

以下 IAM 政策範例允許委託人使用帳戶 111122223333 中的 KMS 金鑰來進行密碼編譯操作。若要提供此許可給帳戶 444455556666 中的使用者和角色,請連接政策至帳戶 444455556666 中的使用者或角色。

注意

下列範例顯示與其他帳戶共用 KMS 金鑰的 IAM 政策範例。將範例 SidResourceAction 值取代為 KMS 金鑰之預定用途的有效值。

{ "Sid": "AllowUseOfKeyInAccount111122223333", "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" }

請注意有關此政策的下列詳細資訊:

  • 與金鑰政策不同,IAM 政策陳述式不包含 Principal 元素。在 IAM 政策中,委託人即為該政策欲連接的身分。

  • IAM 政策中的 Resource 元素會識別該委託人可以使用的 KMS 金鑰。若要指定 KMS 金鑰,請將其金鑰 ARN 新增至 Resource 元素。

  • 您可以在 Resource 元素中指定多個 KMS 金鑰。不過,如果您沒有在 Resource 元素中指定特定的 KMS 金鑰,則提供的 KMS 金鑰存取權限可能會不小心超過預期。

  • 若要允許外部使用者搭配與 AWS KMS 整合的 AWS 服務使用 KMS 金鑰,您可能需要新增許可至金鑰政策或 IAM 政策。如需詳細資訊,請參閱 允許透過 AWS 服務 使用外部 KMS 金鑰

如需使用 IAM 政策的詳細資訊,請參閱 IAM 政策

建立其他帳戶可以使用的 KMS 金鑰

當您使用此CreateKey作業建立 KMS 金鑰時,您可以使用其Policy參數來指定金鑰原則,以授予外部帳戶 (或外部使用者和角色) 使用 KMS 金鑰的權限。您還需要在外部帳戶中新增 IAM 政策,以便將這些許可委派給該帳戶的使用者和角色,即使是金鑰政策中指定的使用者和角色也一樣。您可以使用PutKeyPolicy作業隨時變更金鑰原則。

在 AWS Management Console 中建立 KMS 金鑰時,您可以一併建立其金鑰政策。當您在 Key Administrators (金鑰管理員) 和 Key Users (金鑰使用者) 區段中選取身分時,AWS KMS 會將這些身分的政策陳述式新增至 KMS 金鑰的金鑰政策。

Key Users (金鑰使用者) 區段也可讓您將外部帳戶做為金鑰使用者予以新增。

此主控台元素會將外部帳戶新增至 KMS 金鑰的金鑰政策。

當您輸入外部帳戶的帳戶 ID 時,AWS KMS 會新增兩個陳述式至金鑰政策。此動作只會影響金鑰政策。在您連接 IAM 政策以提供部分或所有許可前,外部帳戶中的使用者和角色都無法使用 KMS 金鑰。

第一個金鑰政策陳述式會提供外部帳戶在密碼編譯操作中使用 KMS 金鑰的許可。

注意

下列範例顯示與其他帳戶共用 KMS 金鑰的金鑰政策範例。將範例 SidPrincipalAction 值取代為 KMS 金鑰之預定用途的有效值。

{ "Sid": "Allow use of the key", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::444455556666:root" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*" }

第二個金鑰政策陳述式則允許外部帳戶建立、檢視和撤銷對 KMS 金鑰的授予,但只有在請求是來自與 AWS KMS 整合的 AWS 服務時才有效。這些許可允許其他加密使用者資料的 AWS 服務使用 KMS 金鑰。

這些權限專為 KMS 金鑰設計,用於加密AWS服務 (例如 Amazon) 中的使用者資料 WorkMail。這些服務通常會使用授予來取得所需的許可,以代表使用者使用 KMS 金鑰。如需詳細資訊,請參閱 允許透過 AWS 服務 使用外部 KMS 金鑰

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

如果這些權限不符合您的需求,您可以在主控台原則檢視中或使用PutKeyPolicy作業來編輯這些權限。您可以指定特定的外部使用者和角色,而不用提供許可給外部帳戶。政策所指定的動作可加以變更。而且,您還可以使用全域和 AWS KMS 政策條件來調整許可。

允許透過 AWS 服務 使用外部 KMS 金鑰

您可以提供許可給不同帳戶中的使用者,讓他們能夠搭配與 AWS KMS 整合的服務使用 KMS 金鑰。舉例來說,外部帳戶中的使用者可以使用 KMS 金鑰來加密 Amazon S3 儲存貯體中的物件,或是加密存放在 AWS Secrets Manager 中的機密

金鑰政策必須提供 KMS 金鑰使用許可給外部使用者或外部使用者的帳戶。此外,您還需要將 IAM 政策連接至能將 AWS 服務 使用許可提供給使用者的身分。服務也可能會要求使用者在金鑰政策或 IAM 政策中擁有額外許可。如需 AWS 服務 針對客戶受管金鑰所需的許可清單,請參閱該服務之使用者指南或開發人員指南中「安全性」一章中的「資料保護」主題。

在其他帳戶中使用 KMS 金鑰

如果您有權在不同 AWS 帳戶 中使用 KMS 金鑰,您可以在 AWS Management Console、AWS 開發套件、AWS CLI 和 AWS Tools for PowerShell 中使用 KMS 金鑰。

若要在 shell 命令或 API 請求中識別不同帳戶中的 KMS 金鑰,請使用下列金鑰識別符

如果您只輸入金鑰 ID 或別名名稱,則 AWS 會假設 KMS 金鑰在您的帳戶中。

AWS KMS 主控台不會在其他帳戶中顯示 KMS 金鑰,即使您有權使用這些金鑰。此外,在其他 AWS 服務的主控台中顯示的 KMS 金鑰清單不會在其他帳戶中包含 KMS 金鑰。

若要在 AWS 服務的主控台中指定不同帳戶中的 KMS 金鑰,您必須輸入 KMS 金鑰的金鑰 ARN 或別名 ARN。必要的金鑰識別符會隨服務而有所不同,服務主控台及其 API 操作可能會有所不同。如需詳細資訊,請參閱服務文件。