

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

# 允許其他帳戶中的使用者使用 KMS 金鑰
<a name="key-policy-modifying-external-accounts"></a>

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

跨帳戶許可僅適用於下列操作：
+ [密碼編譯操作](kms-cryptography.md#cryptographic-operations)
+ [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html)
+ [DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html)
+ [GetKeyRotationStatus](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetKeyRotationStatus.html)
+ [GetPublicKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetPublicKey.html)
+ [ListGrants](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListGrants.html)
+ [RetireGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_RetireGrant.html)
+ [RevokeGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_RevokeGrant.html)

如果您提供許可給不同帳戶中的使用者，讓他們能夠進行其他操作，則這些許可沒有任何作用。例如，如果您為不同帳戶中的委託人提供 IAM 政策中的 [kms:ListKeys](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListKeys.html) 許可，或金鑰政策中 KMS 金鑰的 [kms:ScheduleKeyDeletion](https://docs.aws.amazon.com/kms/latest/APIReference/API_ScheduleKeyDeletion.html) 許可，則使用者對資源呼叫這些操作的嘗試仍會失敗。

如需在不同帳戶中使用 KMS 金鑰進行 AWS KMS 操作的詳細資訊，請參閱 [AWS KMS 許可](kms-api-permissions-reference.md)和 中的**跨帳戶使用**欄[在其他帳戶中使用 KMS 金鑰](#cross-account-use)。還有 [AWS Key Management Service API 參考](https://docs.aws.amazon.com/kms/latest/APIReference/)中每個 API 描述的**跨帳戶使用**章節。

**警告**  
請謹慎為委託人提供使用 KMS 金鑰的許可。只要有可能，請遵循*最低權限*原則。讓使用者只能存取其所需的 KMS 金鑰，以便只能存取所需的操作。  
此外，請謹慎使用任何不熟悉的 KMS 金鑰，尤其是不同帳戶中的 KMS 金鑰。惡意使用者可能會授予您使用其 KMS 金鑰的許可，以取得關於您或您帳戶的資訊。  
如需使用政策來保護帳戶中資源的詳細資訊，請參閱 [IAM 政策的最佳實務](iam-policies-best-practices.md)。

若要提供 KMS 金鑰的使用許可給另一個帳戶中的使用者和角色，則需使用兩種不同類型的政策：
+ KMS 金鑰的**金鑰政策**必須提供外部帳戶 (或外部帳戶中的使用者和角色) 使用 KMS 金鑰的許可。金鑰政策位在擁有 KMS 金鑰的帳戶中。
+ 外部帳戶的 **IAM 政策**必須委派金鑰政策許可給其使用者和角色。這些政策會在外部帳戶中設定，並提供許可給該帳戶中的使用者和角色。

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

若要編輯金鑰政策，您可以在 AWS 管理主控台 中使用[政策檢視](key-policy-modifying.md#key-policy-modifying-how-to-console-policy-view)，或使用 [CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html) 或 [PutKeyPolicy](https://docs.aws.amazon.com/kms/latest/APIReference/API_PutKeyPolicy.html) 操作。

如需編輯 IAM 政策的說明，請參閱 [搭配 使用 IAM 政策 AWS KMS](iam-policies.md)。

如需說明金鑰政策和 IAM 政策如何搭配運作，以允許在不同帳戶中使用 KMS 金鑰的範例，請參閱 [範例 2：使用者擔任的角色具有在不同 中使用 KMS 金鑰的許可 AWS 帳戶](policy-evaluation.md#example-cross-acct)。

您可以在[AWS CloudTrail 日誌](logging-using-cloudtrail.md)中的 KMS 金鑰上檢視產生的跨帳戶 AWS KMS 操作。對其他帳戶中使用 KMS 金鑰的操作會同時記入呼叫者帳戶和 KMS 金鑰擁有者帳戶。

**Topics**
+ [步驟 1：在本機帳戶中新增金鑰政策陳述式](#cross-account-key-policy)
+ [步驟 2：在外部帳戶中新增 IAM 政策](#cross-account-iam-policy)
+ [允許使用外部 KMS 金鑰搭配 AWS 服務](#cross-account-service)
+ [在其他帳戶中使用 KMS 金鑰](#cross-account-use)

**注意**  
本主題中的範例旨在說明如何結合使用金鑰政策和 IAM 政策，來提供和限制存取 KMS 金鑰的權限。這些一般範例不適用於表示任何特定 對 KMS 金鑰 AWS 服務 所需的許可。如需 AWS 服務 所需許可的相關資訊，請參閱 服務文件中的加密主題。

## 步驟 1：在本機帳戶中新增金鑰政策陳述式
<a name="cross-account-key-policy"></a>

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

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

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

只有在託管 KMS 金鑰及其金鑰政策的區域中啟用外部帳戶時，授予給外部帳戶及其委託人的許可才有效。如需相關資訊了解哪些區域預設為未啟用 (「選擇加入區域」)，請參閱*《AWS 一般參考》* [的管理 AWS 區域](https://docs.aws.amazon.com/general/latest/gr/rande-manage.html)。

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

**注意**  
下列範例顯示與其他帳戶共用 KMS 金鑰的金鑰政策範例。將範例 `Sid`、`Principal` 和 `Action` 值取代為 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 金鑰的金鑰政策範例。將範例 `Sid`、`Principal` 和 `Action` 值取代為 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": "*"
}
```

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

您也需要決定要提供哪些許可給外部帳戶。例如，您可能想提供使用者能解密但無法加密的許可，或是能檢視但無法使用 KMS 金鑰的許可。如需 KMS 金鑰上的許可清單，請參閱 [AWS KMS 許可](kms-api-permissions-reference.md)。

**建立 KMS 金鑰時設定金鑰政策**  
當您使用 [CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html) 操作建立 KMS 金鑰時，您可以使用其`Policy`參數來指定金鑰政策，以授予外部帳戶或外部使用者和角色使用 KMS 金鑰的許可。  
當您在 中建立 KMS 金鑰時 AWS 管理主控台，您也可以建立其金鑰政策。當您在 **Key Administrators** (金鑰管理員) 和 **Key Users** (金鑰使用者) 區段中選取身分時， AWS KMS 會將這些身分的政策陳述式新增至 KMS 金鑰的金鑰政策。**Key Users (金鑰使用者)** 區段也可讓您將外部帳戶做為金鑰使用者予以新增。  
當您輸入外部帳戶的帳戶 ID 時， 會將兩個陳述式 AWS KMS 新增至金鑰政策。此動作只會影響金鑰政策。在您連接 IAM 政策以提供部分或所有許可前，外部帳戶中的使用者和角色都無法使用 KMS 金鑰。  
第一個金鑰政策陳述式會提供外部帳戶在密碼編譯操作中使用 KMS 金鑰的許可。第二個金鑰政策陳述式允許外部帳戶建立、檢視和撤銷 KMS 金鑰的授予，但僅限於請求來自[AWS 與 整合的服務 AWS KMS](https://aws.amazon.com/kms/features/#AWS_Service_Integration)時。這些許可允許加密使用者資料的其他 AWS 服務使用 KMS 金鑰。這些許可專為加密 服務中 AWS 使用者資料的 KMS 金鑰而設計

## 步驟 2：在外部帳戶中新增 IAM 政策
<a name="cross-account-iam-policy"></a>

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

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

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

以下 IAM 政策範例允許委託人使用帳戶 `111122223333` 中的 KMS 金鑰來進行密碼編譯操作。若要提供此許可給帳戶 `444455556666` 中的使用者和角色，請[連接政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-using.html#attach-managed-policy-console)至帳戶 `444455556666` 中的使用者或角色。

**注意**  
下列範例顯示與其他帳戶共用 KMS 金鑰的 IAM 政策範例。將範例 `Sid`、`Resource` 和 `Action` 值取代為 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](concepts.md#key-id-alias-ARN) 新增至 `Resource` 元素。
+ 您可以在 `Resource` 元素中指定多個 KMS 金鑰。不過，如果您沒有在 `Resource` 元素中指定特定的 KMS 金鑰，則提供的 KMS 金鑰存取權限可能會不小心超過預期。
+ 若要允許外部使用者搭配[與 AWS KMS整合的AWS 服務](https://aws.amazon.com/kms/features/#AWS_Service_Integration)使用 KMS 金鑰，您可能需要新增許可至金鑰政策或 IAM 政策。如需詳細資訊，請參閱[允許使用外部 KMS 金鑰搭配 AWS 服務](#cross-account-service)。

如需使用 IAM 政策的詳細資訊，請參閱 [IAM 政策](iam-policies.md)。

## 允許使用外部 KMS 金鑰搭配 AWS 服務
<a name="cross-account-service"></a>

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

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

## 在其他帳戶中使用 KMS 金鑰
<a name="cross-account-use"></a>

如果您有在不同 中使用 KMS 金鑰的許可 AWS 帳戶，則可以在 AWS CLI、 AWS 管理主控台 AWS SDKs 和 中使用 KMS 金鑰 AWS Tools for PowerShell。

若要在 shell 命令或 API 請求中識別不同帳戶中的 KMS 金鑰，請使用下列[金鑰識別符](concepts.md#key-id)。
+ 對於[密碼編譯操作](kms-cryptography.md#cryptographic-operations)、[DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html) 和 [GetPublicKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetPublicKey.html)，請使用 KMS 金鑰的[金鑰 ARN](concepts.md#key-id-key-ARN) 或[別名 ARN](concepts.md#key-id-alias-ARN)。
+ 對於 [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html)、[GetKeyRotationStatus](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetKeyRotationStatus.html)、[ListGrants](https://docs.aws.amazon.com/kms/latest/APIReference/ListGrants.html) 和 [RevokeGrant](https://docs.aws.amazon.com/kms/latest/APIReference/RevokeGrant.html)，請使用 KMS 金鑰的金鑰 ARN。

如果您只輸入金鑰 ID 或別名名稱， 會 AWS 假設 KMS 金鑰位於您的帳戶中。

即使您具有使用 KMS 金鑰的許可， AWS KMS 主控台也不會在其他帳戶中顯示 KMS 金鑰。此外，在其他 AWS 服務的主控台中顯示的 KMS 金鑰清單不會在其他帳戶中包含 KMS 金鑰。

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