

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

# KMS 金鑰存取和許可
<a name="control-access"></a>

若要使用 AWS KMS，您必須擁有 AWS 可用於驗證請求的登入資料。登入資料必須包含存取 AWS 資源 AWS KMS keys 和[別名的](kms-alias.md)許可。除非明確提供該許可且從未拒絕，否則任何 AWS 委託人都沒有任何 KMS 金鑰的許可。沒有能使用或管理 KMS 金鑰的隱含或自動許可。

若要控制對 KMS 金鑰的存取，您可以使用以下政策機制。
+ [金鑰政策](key-policies.md) – 每個 KMS 金鑰都有一個金鑰政策。它是控制對 KMS 金鑰之存取的主要機制。您可以單獨使用金鑰政策來控制存取，這表示在單一文件 (金鑰政策) 中定義 KMS 金鑰的完整存取範圍。如需使用金鑰政策的詳細資訊，請參閱[金鑰政策](key-policies.md)。
+ [IAM 政策](iam-policies.md) – 您可以使用 IAM 政策搭配金鑰政策和授權，來控制對 KMS 金鑰的存取。透過這種方式控制存取，可讓您管理 IAM 中 IAM 身分的所有許可。若要使用 IAM 政策來允許存取 KMS 金鑰，金鑰政策必須明確允許。如需使用 IAM 政策的詳細資訊，請參閱 [IAM 政策](iam-policies.md)。
+ [授權](grants.md) – 您可以使用授權搭配金鑰政策和 IAM 政策，來允許對 KMS 金鑰的存取。透過這種方式控制存取，可讓您在金鑰政策中允許存取 KMS 金鑰，並且允許身分將其存取權委派給其他人。如需使用授與的詳細資訊，請參閱[在 中授予 AWS KMS](grants.md)。

## KMS 金鑰政策
<a name="intro-key-policy"></a>

管理 AWS KMS 資源存取權的主要方法是使用 *政策*。政策是描述哪些主體可以存取哪些資源的文件。連接至 IAM 身分的政策稱為以*身分為基礎的政策* （或 *IAM 政策*)，而連接至其他資源類型的政策稱為*資源政策*。KMS 金鑰的資源 AWS KMS 政策稱為*金鑰政策*。

所有 KMS 金鑰都擁有金鑰政策。如果您未提供， 會為您 AWS KMS 建立一個。 AWS KMS 使用[的預設金鑰政策](key-policy-default.md)會因您在 AWS KMS 主控台中建立金鑰或使用 AWS KMS API 而有所不同。我們建議您編輯預設金鑰政策，以符合組織對[最低權限許可](least-privilege.md)的要求。

如果金鑰和 IAM 主體位於相同 AWS 帳戶中，您可以單獨使用金鑰政策來控制存取，這表示 KMS 金鑰的完整存取範圍是在單一文件中定義 （金鑰政策）。不過，當一個帳戶中的發起人必須存取不同帳戶中的金鑰時，您無法單獨使用金鑰政策來授予存取權。在跨帳戶案例中，IAM 政策必須連接到發起人的使用者或角色，明確允許發起人進行 API 呼叫。

您也可以將 IAM 政策與金鑰政策和授權結合使用，以控制對 KMS 金鑰的存取。若要使用 IAM 政策來控制對 KMS 金鑰的存取，金鑰政策必須授予帳戶使用 IAM 政策的許可。您可以指定[啟用 IAM 政策的金鑰政策陳述](key-policy-default.md#key-policy-default-allow-root-enable-iam)式，也可以在金鑰政策中明確[指定允許的主體](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#Principal_specifying)。

撰寫政策時，請確定您擁有強式控制，限制誰可以執行下列動作：
+ 更新、建立和刪除 IAM 和 KMS 金鑰政策
+ 從使用者、角色和群組連接和分離 IAM 政策
+ 從 KMS 金鑰連接和分離 KMS 金鑰政策

## KMS 金鑰授權
<a name="intro-kms-grants"></a>

除了 IAM 和金鑰政策之外， AWS KMS 還支援[授予](grants.md)。授予提供靈活且強大的方法來委派許可。您可以使用授予，對 AWS 帳戶中的 IAM 主體或其他 AWS 帳戶中的 IAM 主體發出有時間限制的 KMS 金鑰存取。如果您在建立政策時不知道委託人的名稱，或者需要存取的委託人經常變更，我們建議您發出有時間限制的存取。[承授者主體](grants.md#terms-grantee-principal)可以位於與 KMS 金鑰相同的帳戶中，也可以位於不同的帳戶中。如果委託人和 KMS 金鑰位於不同的帳戶中，則除了授予之外，您還必須指定 IAM 政策。授予需要額外的管理，因為您必須呼叫 API 來建立授予，並在不再需要授予時淘汰或撤銷授予。

# 中的金鑰政策 AWS KMS
<a name="key-policies"></a>

金鑰政策是 的資源政策 AWS KMS key。金鑰政策是控制對 KMS 金鑰之存取的主要方式。每個 KMS 金鑰都必須只有一個金鑰政策。金鑰政策中的陳述式決定誰有使用 KMS 金鑰的許可以及可以使用它的方式。您也可以使用 [IAM 政策](iam-policies.md)和[授予](grants.md)來控制對 KMS 金鑰的存取，但每個 KMS 金鑰都必須有金鑰政策。

除非在金鑰政策、IAM 政策或授予中明確允許且從未拒絕 KMS 金鑰，否則任何 AWS 委託人，包括帳戶根使用者或金鑰建立者，都沒有任何許可。

除非金鑰政策明確允許，否則您不能使用 IAM 政策來*允許*存取 KMS 金鑰。如果沒有金鑰政策的許可，允許許可的 IAM 政策將不起作用。(您可以使用 IAM 政策，在未經金鑰政策許可的情況下*拒絕*對 KMS 金鑰的許可。) 預設金鑰政策會啟用 IAM 政策。若要在金鑰政策中啟用 IAM 政策，請新增 [允許存取 AWS 帳戶 並啟用 IAM 政策](key-policy-default.md#key-policy-default-allow-root-enable-iam) 中所述的政策陳述式。

與全域 IAM 政策不同，金鑰政策是區域性的。金鑰政策僅控制對同一區域中 KMS 金鑰的存取。它對其他區域中的 KMS 金鑰沒有影響。

**Topics**
+ [建立金鑰政策](key-policy-overview.md)
+ [預設金鑰政策](key-policy-default.md)
+ [檢視金鑰政策](key-policy-viewing.md)
+ [變更金鑰政策](key-policy-modifying.md)
+ [AWS 服務的許可](key-policy-services.md)

# 建立金鑰政策
<a name="key-policy-overview"></a>

您可以在 AWS KMS 主控台或使用 AWS KMS API 操作建立和管理金鑰政策，例如 [CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html)、[ReplicateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReplicateKey.html) 和 [PutKeyPolicy](https://docs.aws.amazon.com/kms/latest/APIReference/API_PutKeyPolicy.html)。

當您在 AWS KMS 主控台中建立 KMS 金鑰時，主控台會逐步解說根據[主控台的預設金鑰政策建立金鑰政策](key-policy-default.md)的步驟。使用 `CreateKey` 或 `ReplicateKey` API 時，若不指定金鑰政策，這些 API 便會[為以程式設計方式建立之金鑰，套用預設金鑰政策](key-policy-default.md)。當您採用 `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"
        }
      }
    }
  ]
}
```

------

**Topics**
+ [金鑰政策格式](#key-policy-format)
+ [金鑰政策中的元素](#key-policy-elements)
+ [範例金鑰政策](#key-policy-example)

## 金鑰政策格式
<a name="key-policy-format"></a>

金鑰政策文件必須符合以下規則：
+ 最大為 32 KB (32,768 個位元組)
+ 金鑰政策陳述式中的 `Sid` 元素可包含空格。(IAM 政策文件的 `Sid` 元素中禁止使用空格。)

金鑰政策文件僅可包含以下字元：
+ 可印出的 ASCII 字元
+ 基本拉丁字母和拉丁字母補充-1 字元集中的可印出字元
+ Tab (`\u0009`)、換行字元 (`\u000A`) 和歸位字元 (`\u000D`) 特殊字元

## 金鑰政策中的元素
<a name="key-policy-elements"></a>

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

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

**陳述式**  
包含政策陳述式。金鑰政策文件必須至少包含一個陳述式。  
每個金鑰政策陳述式最多可包含六個元素。需要 `Effect`、`Principal`、`Action` 和 `Resource` 元素。    
**Sid **  
(選用) 陳述式識別符 (`Sid`) 為可用來描述陳述式的任意字串。金鑰政策中的 `Sid` 可包含空格。(不得在 IAM 政策 `Sid` 元素中包含空格。)  
**Effect**  
(必要) 決定是允許還是拒絕政策陳述式中的許可。有效值為 `Allow` 或 `Deny`。如果您未明確允許存取 KMS 金鑰，將會隱含拒絕存取。您也可以明確拒絕存取 KMS 金鑰。您可以這樣做以確保使用者無法存取 CMK，即使其他政策允許存取。  
**Principal**  
(必要) [主體](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#Principal_specifying)是取得政策陳述式中指定許可的身分。您可以在金鑰政策中將 AWS 帳戶 IAM 使用者、IAM 角色和部分 AWS 服務指定為主體。IAM [使用者群組](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html)在任何政策類型中都不是有效的主體。  
星號值，例如 `"AWS": "*"` 代表所有帳戶的所有 AWS 身份。  
除非採用[條件](policy-conditions.md)來限制金鑰政策，否則請勿在任何允許許可的金鑰政策陳述式將主體設為星號 (\$1)。除非另一個政策陳述式明確拒絕 KMS 金鑰，否則星號會提供每個 AWS 帳戶 許可中的每個身分。其他 中的使用者只要在自己的帳戶中擁有對應的許可， AWS 帳戶 就可以使用您的 KMS 金鑰。
IAM 最佳實務不建議使用具有長期憑證的 IAM 使用者。盡可能使用提供臨時憑證的 IAM 角色。如需詳細資訊，請參閱《IAM 使用者指南》**中的 [IAM 中的安全性最佳實務](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)。
若金鑰政策陳述式中的主體是以 `arn:aws:iam::111122223333:root"` 表達的 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#principal-accounts](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#principal-accounts)，則政策陳述式不會向任何 IAM 主體授予許可。而是提供使用 IAM 政策的 AWS 帳戶 許可，以委派金鑰政策中指定的許可。(雖然帳戶識別符中使用了「根」，但採用 `arn:aws:iam::111122223333:root"` 格式的主體*不*代表[AWS 帳戶根使用者](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html)。然而，帳戶主體代表帳戶及其管理員，包括帳戶根用戶。)  
當委託人是另一個 AWS 帳戶 或其委託人時，只有在 區域中使用 KMS 金鑰和金鑰政策啟用帳戶時，許可才有效。如需相關資訊了解哪些區域預設為未啟用 (「選擇加入區域」)，請參閱*《AWS 一般參考》* [的管理 AWS 區域](https://docs.aws.amazon.com/general/latest/gr/rande-manage.html)。  
若要允許不同的 AWS 帳戶 或其委託人使用 KMS 金鑰，您必須在金鑰政策和另一個帳戶中的 IAM 政策中提供許可。如需詳細資訊，請參閱[允許其他帳戶中的使用者使用 KMS 金鑰](key-policy-modifying-external-accounts.md)。  
**Action**  
(必要) 指定要允許或拒絕的 API 操作。例如， `kms:Encrypt`動作對應至 AWS KMS [Encrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Encrypt.html) 操作。您可以在政策陳述式中列出多個動作。如需詳細資訊，請參閱[許可參考](kms-api-permissions-reference.md)。  
如果必要的 `Action` 元素在金鑰政策陳述式中遺失，則政策陳述式沒有任何效果。沒有 `Action`元素的金鑰政策陳述式不適用於任何 KMS 金鑰。  
當金鑰政策陳述式缺少其`Action`元素時， AWS KMS 主控台會正確報告錯誤，但 [CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html) 和 [PutKeyPolicy](https://docs.aws.amazon.com/kms/latest/APIReference/API_PutKeyPolicy.html) APIs會成功，即使政策陳述式無效。  
**資源**  
(必要) 在金鑰政策中，Resource 元素的值是 `"*"`，表示「此 KMS 金鑰」。星號 (`"*"`) 會識別金鑰政策所連接的 KMS 金鑰。  
如果必要的 `Resource` 元素在金鑰政策陳述式中遺失，則政策陳述式沒有任何效果。沒有 `Resource` 元素的金鑰政策不適用於任何 KMS 金鑰。  
當金鑰政策陳述式缺少其`Resource`元素時， AWS KMS 主控台會正確報告錯誤，但 [CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html) 和 [PutKeyPolicy](https://docs.aws.amazon.com/kms/latest/APIReference/API_PutKeyPolicy.html) APIs會成功，即使政策陳述式無效。  
**條件**  
(選用) 條件則會指定金鑰政策生效必須符合的需求。使用 條件時， AWS 可以評估 API 請求的內容，以判斷政策陳述式是否適用。  
若要指定條件，您可以使用預先定義的*條件索引鍵*。 AWS KMS 支援[AWS 全域條件索引](conditions-aws.md)鍵和[AWS KMS 條件索引鍵](conditions-kms.md)。為了支援屬性型存取控制 (ABAC)， AWS KMS 提供條件金鑰，以根據標籤和別名控制對 KMS 金鑰的存取。如需詳細資訊，請參閱[適用於 的 ABAC AWS KMS](abac.md)。  
條件的格式為：  

```
"Condition": {"condition operator": {"condition key": "condition value"}}
```
例如：  

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

如需 AWS 政策語法的詳細資訊，請參閱《[AWS IAM 使用者指南》中的 IAM 政策參考](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies.html)。 **

## 範例金鑰政策
<a name="key-policy-example"></a>

下列範例顯示對稱加密 KMS 金鑰的完整金鑰政策。在閱讀本章中的關鍵政策概念時，您可以將其用作參考。此金鑰政策將先前[預設金鑰政策](key-policy-default.md)一節的範例政策陳述式結合至單一金鑰政策，來完成以下任務：
+ 允許範例 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"
                }
            }
        }
    ]
}
```

------

# 預設金鑰政策
<a name="key-policy-default"></a>

在您建立 KMS 金鑰時，可以指定新 KMS 金鑰的金鑰政策。如果您未提供， 會為您 AWS KMS 建立一個。 AWS KMS 使用的預設金鑰政策會因您在 AWS KMS 主控台中建立金鑰或使用 AWS KMS API 而有所不同。

**當您以程式設計方式建立 KMS 金鑰時的預設金鑰政策**  
當您使用 [AWS KMS API](https://docs.aws.amazon.com/kms/latest/APIReference/) 以程式設計方式建立 KMS 金鑰 （包括使用 [AWS SDKs](https://aws.amazon.com/tools/#sdk) [AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/)或 [AWS Tools for PowerShell](https://docs.aws.amazon.com/powershell/latest/userguide/))，而且您未指定金鑰政策時， 會 AWS KMS 套用非常簡單的預設金鑰政策。此預設金鑰政策有一個政策陳述式，提供 AWS 帳戶 擁有 KMS 金鑰的 使用 IAM 政策的許可，以允許存取 KMS 金鑰上的所有 AWS KMS 操作。如需有關此政策陳述式的詳細資訊，請參閱[允許存取 AWS 帳戶 並啟用 IAM 政策](#key-policy-default-allow-root-enable-iam)。

**使用 建立 KMS 金鑰時的預設金鑰政策 AWS 管理主控台**  
當您[使用 建立 KMS 金鑰 AWS 管理主控台](create-keys.md)時，金鑰政策會從[允許存取 AWS 帳戶 並啟用 IAM 政策](#key-policy-default-allow-root-enable-iam)的政策陳述式開始。主控台接著會新增[金鑰管理員陳述式](#key-policy-default-allow-administrators)、[金鑰使用者陳述式](#key-policy-default-allow-users)，以及 （對於大多數金鑰類型） 允許主體將 KMS 金鑰與其他 [AWS 服務](#key-policy-service-integration)搭配使用的陳述式。您可以使用 AWS KMS 主控台的功能來指定 IAM 使用者、IAM 角色，以及 AWS 帳戶 誰是金鑰管理員，以及誰是金鑰使用者 （或兩者）。

**許可**
+ [允許存取 AWS 帳戶 並啟用 IAM 政策](#key-policy-default-allow-root-enable-iam)
+ [允許金鑰管理員來管理 KMS 金鑰](#key-policy-default-allow-administrators)
+ [允許金鑰使用者使用 KMS 金鑰](#key-policy-default-allow-users)
  + [允許金鑰使用者在密碼編譯操作中使用 KMS 金鑰](#key-policy-users-crypto)
  + [允許金鑰使用者搭配 AWS 服務使用 KMS 金鑰](#key-policy-service-integration)

## 允許存取 AWS 帳戶 並啟用 IAM 政策
<a name="key-policy-default-allow-root-enable-iam"></a>

以下預設金鑰政策陳述式至關重要。
+ 它可讓 AWS 帳戶 擁有 KMS 金鑰的 完整存取 KMS 金鑰。

  與其他 AWS 資源政策不同， AWS KMS 金鑰政策不會自動將許可授予帳戶或其任何身分。若要向帳戶管理員授予許可，金鑰政策必須包含提供此許可的明確陳述式。
+ 除金鑰政策外，它還允許帳戶使用 IAM 政策來允許對 KMS 金鑰的存取。

  如果沒有此許可，允許存取金鑰的 IAM 政策將無效，但拒絕存取金鑰的 IAM 政策仍然有效。
+ 它透過向帳戶管理員 (包括帳戶根使用者) 授予無法刪除存取控制許可，來降低金鑰變得無法管理的風險。

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

```
{
  "Sid": "Enable IAM User Permissions",
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:root"
   },
  "Action": "kms:*",
  "Resource": "*"
}
```

**允許 IAM 政策允許對 KMS 金鑰的存取。**  <a name="allow-iam-policies"></a>
上述金鑰政策陳述式提供擁有金鑰許可 AWS 帳戶 的 使用 IAM 政策以及金鑰政策，以允許 KMS 金鑰上的所有動作 (`kms:*`)。  
此金鑰政策陳述式的主體為[帳戶主體](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#principal-accounts)，由以下格式的 ARN 表示︰`arn:aws:iam::account-id:root`。帳戶主體代表 AWS 帳戶及其管理員。  
若金鑰政策陳述式中的主體為帳戶主體，則政策陳述式不會向任何 IAM 主體授予使用 KMS 金鑰的許可。而是允許帳戶使用 IAM 政策，來*委派*政策陳述式中指定的許可。此預設金鑰政策陳述式允許帳戶使用 IAM 政策，來委派 KMS 金鑰上的所有動作許可 (`kms:*`)。

** 降低 KMS 金鑰變得無法管理的風險。**  
與其他 AWS 資源政策不同， AWS KMS 金鑰政策不會自動將許可授予帳戶或其任何委託人。向包括[帳戶主體](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#principal-accounts)在內的任何主體授予許可，必須使用明確授予許可的金鑰政策陳述式。您無需授予帳戶主體或任何主體存取 KMS 金鑰的許可。然而，向帳戶主體授予存取許可，能夠幫助您防止金鑰變得無法管理。  
例如，假設您建立的金鑰政策僅向一個使用者授予存取 KMS 金鑰的許可。如果您隨後刪除該使用者，金鑰將變得無法管理，您必須[聯絡 AWS 支援](https://console.aws.amazon.com/support/home#/case/create)，以重新取得對 KMS 金鑰的存取。  
上面顯示的金鑰政策陳述式提供[帳戶主體](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#principal-accounts)控制金鑰的許可。帳戶主體代表 AWS 帳戶 及其管理員，包括[帳戶根使用者](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html)。帳戶根使用者是唯一不能刪除的主體，除非您刪除 AWS 帳戶。IAM 最佳實務不鼓勵代表帳戶根使用者採取行動，但在緊急情況下除外。然而，如果刪除具有 KMS 金鑰存取許可的所有其他使用者和角色，則可能需要充當帳戶根使用者。

## 允許金鑰管理員來管理 KMS 金鑰
<a name="key-policy-default-allow-administrators"></a>

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

**警告**  
由於金鑰管理員具有變更金鑰政策並建立授予的許可，因此他們可以授予自己和此政策中未指定的其他 AWS KMS 許可。  
擁有管理標籤和別名許可的主體也可以控制對 KMS 金鑰的存取。如需詳細資訊，請參閱[適用於 的 ABAC AWS KMS](abac.md)。

**注意**  
IAM 最佳實務不建議使用具有長期憑證的 IAM 使用者。盡可能使用提供臨時憑證的 IAM 角色。如需詳細資訊，請參閱《IAM 使用者指南》**中的 [IAM 中的安全性最佳實務](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)。

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

![\[主控台之預設金鑰政策預設檢視中的金鑰管理員\]](http://docs.aws.amazon.com/zh_tw/kms/latest/developerguide/images/console-key-policy-administrators-60.png)


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

**注意**  
 AWS KMS 主控台會將金鑰管理員新增至陳述式識別碼 下的金鑰政策`"Allow access for Key Administrators"`。修改此陳述式識別符可能會影響主控台顯示您對陳述式所做的更新的方式。

```
{
  "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 許可](kms-api-permissions-reference.md)。

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

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

**`kms:Create*`**  
允許 [`kms:CreateAlias`](kms-alias.md) 和 [`kms:CreateGrant`](grants.md)。(`kms:CreateKey` 許可僅在 IAM 政策中有效。)

**`kms:Describe*`**  
允許 [`kms:DescribeKey`](viewing-keys.md) 需要 `kms:DescribeKey` 許可才能檢視 AWS 管理主控台中 KMS 金鑰的金鑰詳細資訊頁面。

**`kms:Enable*`**  
允許 [`kms:EnableKey`](enabling-keys.md) 如果是對稱加密 KMS 金鑰，其亦允許 [`kms:EnableKeyRotation`](rotate-keys.md)。

**`kms:List*`**  
允許 [`kms:ListGrants`](grants.md)、[https://docs.aws.amazon.com/kms/latest/APIReference/API_ListKeyPolicies.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListKeyPolicies.html) 和 [`kms:ListResourceTags`](tagging-keys.md)。(在 AWS 管理主控台中檢視 KMS 金鑰所需的 `kms:ListAliases` 和 `kms:ListKeys` 許可，只在 IAM 政策中有效。)

**`kms:Put*`**  
允許 [https://docs.aws.amazon.com/kms/latest/APIReference/API_PutKeyPolicy.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_PutKeyPolicy.html) 此許可允許金鑰管理員變更此 KMS 金鑰的金鑰政策。

**`kms:Update*`**  
允許 [`kms:UpdateAlias`](alias-update.md) 和 [https://docs.aws.amazon.com/kms/latest/APIReference/API_UpdateKeyDescription.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_UpdateKeyDescription.html)。對於多區域金鑰，它允許此 KMS 金鑰上的 [`kms:UpdatePrimaryRegion`](multi-region-update.md#update-primary-console)。

**`kms:Revoke*`**  
允許 [`kms:RevokeGrant`](grant-delete.md)，它允許金鑰管理員[刪除授權](grant-delete.md)，即使他們不是授權中的[淘汰主體](grants.md#terms-retiring-principal)。

**`kms:Disable*`**  
允許 [`kms:DisableKey`](enabling-keys.md) 如果是對稱加密 KMS 金鑰，其亦允許 [`kms:DisableKeyRotation`](rotate-keys.md)。

**`kms:Get*`**  
允許 [`kms:GetKeyPolicy`](key-policy-viewing.md) 和 [`kms:GetKeyRotationStatus`](rotate-keys.md)。對於具有匯入金鑰材料的 KMS 金鑰，它允許 [https://docs.aws.amazon.com/kms/latest/APIReference/API_GetParametersForImport.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetParametersForImport.html)。對於非對稱 KMS 金鑰，它允許 [https://docs.aws.amazon.com/kms/latest/APIReference/API_GetPublicKey.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetPublicKey.html)。需要 `kms:GetKeyPolicy` 許可才能檢視 AWS 管理主控台中 KMS 金鑰的金鑰政策。

**`kms:Delete*`**  
允許 [`kms:DeleteAlias`](kms-alias.md) 對於具有匯入金鑰材料的金鑰，它允許 [`kms:DeleteImportedKeyMaterial`](importing-keys.md)。`kms:Delete*` 許可不允許金鑰管理員刪除 KMS 金鑰 (`ScheduleKeyDeletion`)。

**`kms:TagResource`**  
允許 [`kms:TagResource`](tagging-keys.md)，可讓金鑰管理員將標籤新增至 KMS 金鑰。由於標籤也可用來控制對 KMS 金鑰的存取，此許可讓管理員可允許或拒絕對 KMS 金鑰的存取。如需詳細資訊，請參閱[適用於 的 ABAC AWS KMS](abac.md)。

**`kms:UntagResource`**  
允許 [`kms:UntagResource`](tagging-keys.md)，可讓金鑰管理員從 KMS 金鑰刪除標籤。由於標籤可用來控制對金鑰的存取，因此此許可可讓管理員允許或拒絕對 KMS 金鑰的存取。如需詳細資訊，請參閱[適用於 的 ABAC AWS KMS](abac.md)。

**`kms:ScheduleKeyDeletion`**  
允許 [https://docs.aws.amazon.com/kms/latest/APIReference/API_ScheduleKeyDeletion.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_ScheduleKeyDeletion.html)，可讓金鑰管理員[刪除此 KMS 金鑰](deleting-keys.md)。若要刪除此許可，請清除 **Allow key administrators to delete this key** (允許金鑰管理員刪除此金鑰) 選項。

**`kms:CancelKeyDeletion`**  
允許 [https://docs.aws.amazon.com/kms/latest/APIReference/API_CancelKeyDeletion.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_CancelKeyDeletion.html)，可讓金鑰管理員[取消刪除此 KMS 金鑰](deleting-keys.md)。若要刪除此許可，請清除 **Allow key administrators to delete this key** (允許金鑰管理員刪除此金鑰) 選項。

**`kms:RotateKeyOnDemand`**  
允許 [https://docs.aws.amazon.com/kms/latest/APIReference/API_RotateKeyOnDemand.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_RotateKeyOnDemand.html)，這可讓金鑰管理員[執行此 KMS 金鑰中金鑰材料的隨需輪換](rotating-keys-on-demand.md)。

 

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

**`kms:ImportKeyMaterial`**  
 [https://docs.aws.amazon.com/kms/latest/APIReference/API_ImportKeyMaterial.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_ImportKeyMaterial.html) 許可允許金鑰管理員將金鑰材料匯入 KMS 金鑰。只有當您[建立不含金鑰資料的 KMS 金鑰](importing-keys-create-cmk.md)時，此許可才會包含在金鑰政策中。

**`kms:ReplicateKey`**  
[https://docs.aws.amazon.com/kms/latest/APIReference/API_ReplicateKey.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReplicateKey.html) 許可允許金鑰管理員[在不同區域中建立多區域主要金鑰的複本](multi-region-keys-replicate.md) AWS 。只有當您建立多區域主要金鑰或複本金鑰時，此許可才會包含在金鑰政策中。

**`kms:UpdatePrimaryRegion`**  
[https://docs.aws.amazon.com/kms/latest/APIReference/API_UpdatePrimaryRegion.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_UpdatePrimaryRegion.html) 許可允許金鑰管理員[將多區域複本金鑰變更為多區域主要金鑰](multi-region-update.md)。只有當您建立多區域主要金鑰或複本金鑰時，此許可才會包含在金鑰政策中。

## 允許金鑰使用者使用 KMS 金鑰
<a name="key-policy-default-allow-users"></a>

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

主控台會將兩個政策陳述式新增至金鑰使用者的金鑰政策。
+ [直接使用 KMS 金鑰](#key-policy-users-crypto) – 第一個金鑰政策陳述式給予金鑰使用者直接針對該類型 KMS 金鑰所有受支援的[密碼編譯操作](kms-cryptography.md#cryptographic-operations)使用 KMS 金鑰的許可。
+ [將 KMS 金鑰與 AWS 服務](#key-policy-service-integration)搭配使用 — 第二個政策陳述式提供金鑰使用者許可，允許與 整合 AWS 的服務代表他們 AWS KMS 使用 KMS 金鑰來保護 資源，例如 Amazon S3 儲存貯體和 Amazon DynamoDB 資料表。

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

**注意**  
IAM 最佳實務不建議使用具有長期憑證的 IAM 使用者。盡可能使用提供臨時憑證的 IAM 角色。如需詳細資訊，請參閱《IAM 使用者指南》**中的 [IAM 中的安全性最佳實務](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)。

![\[主控台之預設金鑰政策預設檢視中的金鑰使用者\]](http://docs.aws.amazon.com/zh_tw/kms/latest/developerguide/images/console-key-policy-users-sm.png)


單一區域對稱的預設*金鑰使用者陳述式*允許下列許可。如需有關每個許可的詳細資訊，請參閱 [AWS KMS 許可](kms-api-permissions-reference.md)。

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

**注意**  
 AWS KMS 主控台會將金鑰使用者新增至陳述式識別碼 `"Allow use of the key"`和 下的金鑰政策`"Allow attachment of persistent resources"`。修改這些陳述式識別符可能會影響主控台顯示您對陳述式所做的更新。

```
{
  "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 金鑰
<a name="key-policy-users-crypto"></a>

金鑰使用者有權直接在 KMS 金鑰支援的所有[密碼編譯操作](kms-cryptography.md#cryptographic-operations)中使用 KMS 金鑰。他們也可以使用 [DescribeKey ](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html)操作，在 AWS 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": "*"
}
```

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

[https://docs.aws.amazon.com/kms/latest/APIReference/API_Encrypt.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_Encrypt.html)  
允許金鑰使用者使用此 KMS 金鑰加密資料。

[https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html)  
允許金鑰使用者使用此 KMS 金鑰解密資料。

[https://docs.aws.amazon.com/kms/latest/APIReference/API_DeriveSharedSecret.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_DeriveSharedSecret.html)  
允許金鑰使用者使用此 KMS 金鑰衍生共用秘密。

[https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html)  
允許金鑰使用者取得此 KMS 金鑰的資訊，包括其識別符、建立日期和金鑰狀態。它還允許金鑰使用者在 AWS KMS 主控台中顯示 KMS 金鑰的詳細資訊。

`kms:GenerateDataKey*`  
允許金鑰使用者為用戶端密碼編譯操作請求對稱資料金鑰或非對稱資料金鑰對。主控台使用 \$1 萬用字元表示允許下列 API 操作：[GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html)、[GenerateDataKeyWithoutPlaintext](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyWithoutPlaintext.html)、[GenerateDataKeyPair](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyPair.html) 和 [GenerateDataKeyPairWithoutPlaintext](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyPairWithoutPlaintext.html)。這些許可只有在加密資料金鑰的對稱 KMS 金鑰上才有效。

[kms:GenerateMac](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateMac.html)  
允許金鑰使用者使用 HMAC KMS 金鑰來產生 HMAC 標籤。

[kms:GetPublicKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetPublicKey.html)  
允許金鑰使用者下載非對稱 KMS 金鑰的公有金鑰。與您共用此公有金鑰的對象可以加密 外部的資料 AWS KMS。不過，這些加密文字只能透過呼叫 AWS KMS中的 [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) 操作進行解密。

[kms:ReEncrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.html)\$1   
允許金鑰使用者重新加密原本使用此 KMS 金鑰加密的資料，或使用此 KMS 金鑰重新加密之前加密過的資料。[ReEncrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.html) 操作需要同時存取來源和目標 KMS 金鑰。若要完成此動作，您可以允許來源 KMS 金鑰的 `kms:ReEncryptFrom` 許可和目標 KMS 金鑰的 `kms:ReEncryptTo` 許可。但為簡單起見，主控台允許兩種 KMS 金鑰都使用 `kms:ReEncrypt*` (使用 `*` 萬用字元)。

[kms:Sign](https://docs.aws.amazon.com/kms/latest/APIReference/API_Sign.html)  
允許金鑰使用者使用此 KMS 金鑰簽署訊息。

[kms:Verify](https://docs.aws.amazon.com/kms/latest/APIReference/API_Verify.html)  
允許金鑰使用者使用此 KMS 金鑰驗證簽章。

[kms:VerifyMac](https://docs.aws.amazon.com/kms/latest/APIReference/API_VerifyMac.html)  
允許金鑰使用者使用 HMAC KMS 金鑰來驗證 HMAC 標籤。

## 允許金鑰使用者搭配 AWS 服務使用 KMS 金鑰
<a name="key-policy-service-integration"></a>

主控台中的預設金鑰政策也會為金鑰使用者提供所需的授予許可，以保護使用 grant.services AWS 的服務中的資料。 AWS 服務通常會使用 grant 來取得使用 KMS 金鑰的特定有限許可。

此金鑰政策陳述式允許金鑰使用者建立、檢視和撤銷 KMS 金鑰的授予，但僅限於授予操作請求來自[AWS 與 整合的服務 AWS KMS](https://aws.amazon.com/kms/features/#AWS_Service_Integration)時。[kms:GrantIsForAWSResource](conditions-kms.md#conditions-kms-grant-is-for-aws-resource) 政策條件不允許使用者直接呼叫這些授予操作。當金鑰使用者允許時， 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](services-ebs.md)。
+ 將此 KMS 金鑰搭配 Amazon Redshift 使用，以啟動加密叢集。金鑰使用者隱含提供 Amazon Redshift 使用 KMS 金鑰啟動加密叢集並建立加密快照的許可。如需詳細資訊，請參閱[Amazon Redshift 如何使用 AWS KMS](services-redshift.md)。
+ 使用此 KMS 金鑰搭配其他[與 AWS KMS整合且使用授權的AWS 服務](service-integration.md)，來建立、管理或使用加密資源搭配這些服務。

預設金鑰政策允許金鑰使用者將其許可授予*所有*使用授權的整合服務。不過，您可以建立自訂金鑰政策，將許可限制為指定的 AWS 服務。如需詳細資訊，請參閱 [kms:ViaService](conditions-kms.md#conditions-kms-via-service) 條件金鑰。

# 檢視金鑰政策
<a name="key-policy-viewing"></a>

您可以使用 AWS KMS 主控台或 AWS KMS API [AWS 受管金鑰](concepts.md#aws-managed-key) 中的 [GetKeyPolicy](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetKeyPolicy.html) 操作，檢視 AWS KMS [帳戶中客戶受管金鑰](concepts.md#customer-mgn-key)或 的金鑰政策。您無法使用這些技術檢視不同 AWS 帳戶中 KMS 金鑰的金鑰政策。

若要進一步了解 AWS KMS 金鑰政策，請參閱 [中的金鑰政策 AWS KMS](key-policies.md)。若要了解如何判斷哪些使用者和角色可以存取 KMS 金鑰，請參閱 [判斷對 的存取 AWS KMS keys](determining-access.md)。

## 使用 AWS KMS 主控台
<a name="key-policy-viewing-console"></a>

授權的使用者可以在 AWS 管理主控台的 **Key policy** (金鑰政策) 索引標籤上檢視 [AWS 受管金鑰](concepts.md#aws-managed-key) 或[客戶受管金鑰](concepts.md#customer-mgn-key)的金鑰政策。

若要在 中檢視 KMS 金鑰的金鑰政策 AWS 管理主控台，您必須具有 [kms:ListAliases](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListAliases.html)、 [kms:DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html) 和 [kms:GetKeyPolicy](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetKeyPolicy.html) 許可。

1. 登入 AWS 管理主控台 並開啟位於 https：//[https://console.aws.amazon.com/kms](https://console.aws.amazon.com/kms) 的 AWS Key Management Service (AWS KMS) 主控台。

1. 若要變更 AWS 區域，請使用頁面右上角的區域選擇器。

1. 

   若要檢視帳戶中為您 AWS 建立和管理的金鑰，請在導覽窗格中選擇**AWS 受管金鑰**。若要檢視您所建立及管理帳戶中的金鑰，請在導覽窗格中選擇**Customer managed keys** (客戶受管金鑰)。

1. 在 KMS 金鑰清單中，選擇您要檢查之 KMS 金鑰的別名或金鑰 ID。

1. 選擇 **Key policy (金鑰政策)** 標籤。

   在 **Key policy** (金鑰政策) 索引標籤中，您可能會看到金鑰政策文件。這是「政策檢視」**。在金鑰政策陳述式中，您可以看到由金鑰政策授予 KMS 金鑰存取權的主體，也會看到他們可以執行的動作。

   下列範例顯示[預設金鑰政策](key-policy-default.md)的政策檢視。  
![\[在 AWS KMS 主控台的政策檢視中檢視預設金鑰政策\]](http://docs.aws.amazon.com/zh_tw/kms/latest/developerguide/images/console-key-policy-view.png)

   或者，如果您在 中建立 KMS 金鑰 AWS 管理主控台，您會看到包含**金鑰管理員**、**金鑰刪除**和**金鑰使用者**區段*的預設檢視*。若要查看金鑰政策文件，請選擇 **Switch to policy view (切換至政策檢視)**。

   下列範例顯示[預設金鑰政策](key-policy-default.md)的預設檢視。  
![\[在 AWS KMS 主控台的預設檢視中檢視預設金鑰政策\]](http://docs.aws.amazon.com/zh_tw/kms/latest/developerguide/images/console-key-policy-full-vsm.png)

## 使用 AWS KMS API
<a name="key-policy-viewing-api"></a>

若要取得 中 KMS 金鑰的金鑰政策 AWS 帳戶，請使用 API 中的 AWS KMS [GetKeyPolicy](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetKeyPolicy.html) 操作。您無法使用此操作檢視不同帳戶中的金鑰政策。

下列範例使用 AWS Command Line Interface (AWS CLI) 中的 [get-key-policy](https://docs.aws.amazon.com/cli/latest/reference/kms/get-key-policy.html) 命令，但您可以使用任何 AWS SDK 提出此請求。

請注意，雖然 `default` 是唯一的有效值，但 `PolicyName` 參數是必要的。此外，這個命令請求使用較易檢視的文字輸出，而不是 JSON。

執行此命令之前，請將範例金鑰 ID 更換成您帳戶的有效 ID。

```
$ aws kms get-key-policy --key-id 1234abcd-12ab-34cd-56ef-1234567890ab --policy-name default --output text
```

回應應該類似下面其中一個項目，會傳回[預設的金鑰政策](key-policy-default.md)。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Id" : "key-consolepolicy-3",
  "Statement" : [ {
  "Sid" : "EnableIAMUserPermissions",
    "Effect" : "Allow",
    "Principal" : {
      "AWS" : "arn:aws:iam::111122223333:root"
    },
    "Action" : "kms:*",
    "Resource" : "*"
  } ]
}
```

------

# 變更金鑰政策
<a name="key-policy-modifying"></a>

您可以使用 AWS 管理主控台 或 [PutKeyPolicy](https://docs.aws.amazon.com/kms/latest/APIReference/API_PutKeyPolicy.html) 操作 AWS 帳戶 來變更 中 KMS 金鑰的金鑰政策。您無法使用這些技術變更不同 AWS 帳戶中 KMS 金鑰的金鑰政策。

變更金鑰政策時，請注意以下規則：
+ 您可以檢視 [AWS 受管金鑰](concepts.md#aws-managed-key) 或[客戶受管金鑰](concepts.md#customer-mgn-key)的金鑰政策，但只能變更客戶受管金鑰的金鑰政策。的政策 AWS 受管金鑰 是由在您帳戶中建立 KMS 金鑰 AWS 的服務所建立和管理。您無法檢視或變更 [AWS 擁有的金鑰](concepts.md#aws-owned-key) 的金鑰政策。
+ 您可以在金鑰政策 AWS 帳戶 中新增或移除 IAM 使用者、IAM 角色和 ，並變更這些主體允許或拒絕的動作。如需在金鑰政策中指定主體和許可之方式的詳細資訊，請參閱[金鑰政策](key-policies.md)。
+ 您不能新增 IAM 群組到金鑰政策，但您可以新增多個 IAM 使用者和 IAM 角色。如需詳細資訊，請參閱[允許多個 IAM 主體存取 KMS 金鑰](iam-policies.md#key-policy-modifying-multiple-iam-users)。
+ 如果您將 新增至金鑰政策 AWS 帳戶 的外部，您還必須在外部帳戶中使用 IAM 政策，將許可授予這些帳戶中的 IAM 使用者、群組或角色。如需詳細資訊，請參閱[允許其他帳戶中的使用者使用 KMS 金鑰](key-policy-modifying-external-accounts.md)。
+ 產生的金鑰政策文件不能超過 32 KB (32,768 位元組)。

## 如何變更金鑰政策
<a name="key-policy-modifying-how-to"></a>

變更金鑰政策有三種方法，如以下章節所述。

**Topics**
+ [使用 AWS 管理主控台 預設檢視](#key-policy-modifying-how-to-console-default-view)
+ [使用 AWS 管理主控台 政策檢視](#key-policy-modifying-how-to-console-policy-view)
+ [使用 AWS KMS API](#key-policy-modifying-how-to-api)

### 使用 AWS 管理主控台 預設檢視
<a name="key-policy-modifying-how-to-console-default-view"></a>

您可以使用主控台，以稱為*預設檢視*的圖形界面來變更金鑰政策。

如果以下步驟不符合您在主控台中看到的步驟，可能表示此金鑰政策不是使用主控台所建立的。也可能表示主控台的預設檢視不支援修改後的金鑰政策。在這種情況下，請遵循[使用 AWS 管理主控台 政策檢視](#key-policy-modifying-how-to-console-policy-view)或[使用 AWS KMS API](#key-policy-modifying-how-to-api) 中的步驟進行。

1. 請依 [使用 AWS KMS 主控台](key-policy-viewing.md#key-policy-viewing-console) 所述，檢視客戶受管金鑰的金鑰政策。（您無法變更 的金鑰政策 AWS 受管金鑰。)

1. 決定進行哪些變更。
   + 若要新增或移除[金鑰管理員](key-policy-default.md#key-policy-default-allow-administrators)，以及允許或不允許金鑰管理員[刪除 KMS 金鑰](deleting-keys.md)，請使用頁面上的 **Key administrators** (金鑰管理員) 區段中的控制項。金鑰管理員負責管理 KMS 金鑰，包括啟用和停用它、設定金鑰政策，以及[啟用金鑰輪換](rotate-keys.md)。
   + 若要新增或移除[金鑰使用者](key-policy-default.md#key-policy-default-allow-users)，以及允許或不允許外部 AWS 帳戶 使用 KMS 金鑰，請使用頁面**金鑰使用者**區段中的控制項。金鑰使用者可以在[密碼編譯操作](kms-cryptography.md#cryptographic-operations)中使用 KMS 金鑰，例如加密、解密、重新加密和產生資料金鑰。

### 使用 AWS 管理主控台 政策檢視
<a name="key-policy-modifying-how-to-console-policy-view"></a>

您可以使用主控台的「政策檢視」**來變更金鑰政策文件。

1. 請依 [使用 AWS KMS 主控台](key-policy-viewing.md#key-policy-viewing-console) 所述，檢視客戶受管 KMS 金鑰的金鑰政策。（您無法變更 的金鑰政策 AWS 受管金鑰。)

1. 在**金鑰政策**區段中，選擇**切換為政策檢視**。

1. 選擇**編輯**。

1. 決定進行哪些變更。
   + 若要新增陳述式，請選擇**新增陳述式**。然後，您可以從陳述式建置器面板中列出的選項中選取新金鑰政策陳述式的動作、主體和條件，或手動輸入政策陳述式元素。
   + 若要從您的金鑰政策中移除陳述式，請選取陳述式，然後選擇**移除**。檢閱選取的政策陳述式，並確認您想要將其移除。如果您決定不想繼續移除陳述式，請選擇**取消**。
   + 若要編輯現有的金鑰政策陳述式，請選取陳述式。然後，您可以使用陳述式建置器面板來選擇您要修改的特定元素，或手動編輯陳述式。

1. 選擇**儲存變更**。

### 使用 AWS KMS API
<a name="key-policy-modifying-how-to-api"></a>

您可以使用 [PutKeyPolicy](https://docs.aws.amazon.com/kms/latest/APIReference/API_PutKeyPolicy.html) 操作來變更 中 KMS 金鑰的金鑰政策 AWS 帳戶。您無法對其他 AWS 帳戶中的 KMS 金鑰使用此 API。

1. 使用 [GetKeyPolicy](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetKeyPolicy.html) 操作取得現有的金鑰政策文件，然後將金鑰政策文件儲存至檔案。如需多種程式設計語言的範例程式碼，請參閱[`GetKeyPolicy` 搭配 AWS SDK 或 CLI 使用](example_kms_GetKeyPolicy_section.md)。

1. 在您偏好的文字編輯器中開啟金鑰政策文件、編輯金鑰政策文件，然後儲存檔案。

1. 使用 [PutKeyPolicy](https://docs.aws.amazon.com/kms/latest/APIReference/API_PutKeyPolicy.html) 操作將更新的金鑰政策文件套用到 KMS 金鑰。如需多種程式設計語言的範例程式碼，請參閱[`PutKeyPolicy` 搭配 AWS SDK 或 CLI 使用](example_kms_PutKeyPolicy_section.md)。

如需將金鑰政策從一個 KMS 金鑰複製到另一個的範例，請參閱《 AWS CLI 命令參考》中的 [GetKeyPolicy 範例](https://docs.aws.amazon.com/cli/latest/reference/kms/get-key-policy.html#examples)。

# 金鑰政策中 AWS 服務的許可
<a name="key-policy-services"></a>

許多 AWS 服務會使用 AWS KMS keys 來保護他們管理的資源。當服務使用 [AWS 擁有的金鑰](concepts.md#aws-owned-key) 或 [AWS 受管金鑰](concepts.md#aws-managed-key) 時，服務會建立並維護這些 KMS 金鑰的金鑰政策。

但是，當您透過 AWS 服務使用[客戶受管金鑰](concepts.md#customer-mgn-key)時，您需要設定並維護金鑰政策。該金鑰政策必須允許服務具有代表您保護資源所需的最低許可。建議您遵循最低權限原則：僅授予服務所需的許可。您可以藉由了解服務需要哪些權限並使用 [AWS 全域條件金鑰](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html)和 [AWS KMS 條件金鑰](policy-conditions.md)來調整許可，有效地完成這個操作。

若要尋找服務對客戶受管金鑰所需的許可，請參閱服務的加密文件。下列清單包含部分 服務文件的連結：
+ **AWS CloudTrail** 許可 - [設定 CloudTrail 的 AWS KMS 金鑰政策](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/create-kms-key-policy-for-cloudtrail.html#create-kms-key-policy-for-cloudtrail-decrypt)
+ **Amazon Elastic Block Store** 許可 - [Amazon EC2 使用者指南](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html#ebs-encryption-permissions)和 [Amazon EC2 使用者指南](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/EBSEncryption.html#ebs-encryption-permissions)
+ **AWS Lambda** 許可 - [Lambda 的靜態資料加密](https://docs.aws.amazon.com/lambda/latest/dg/security-encryption-at-rest.html)
+ **Amazon Q** 許可 - [Amazon Q 的資料加密](https://docs.aws.amazon.com/amazonq/latest/qbusiness-ug/data-encryption.html)
+ **Amazon Relational Database Service** 許可 - [AWS KMS 金鑰管理](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.Encryption.Keys.html)
+ **AWS Secrets Manager** 許可 - [授權使用 KMS 金鑰](https://docs.aws.amazon.com/secretsmanager/latest/userguide/security-encryption.html#security-encryption-authz)
+ **Amazon Simple Queue Service** 許可 - [Amazon SQS 金鑰管理](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-key-management.html)

# 搭配 使用 IAM 政策 AWS KMS
<a name="iam-policies"></a>

您可以使用 IAM 政策，以及[金鑰政策](key-policies.md)、[授權](grants.md)和 [VPC 端點政策](https://docs.aws.amazon.com/vpc/latest/privatelink/interface-endpoints.html#edit-vpc-endpoint-policy)，來控制對 AWS KMS keys 的存取 AWS KMS。

**注意**  
若要使用 IAM 政策來控制 KMS 金鑰的存取，KMS 金鑰的金鑰政策必須授予帳戶使用 IAM 政策的許可。特別是，金鑰政策必須包含[啟用 IAM 政策的政策陳述式](key-policy-default.md#key-policy-default-allow-root-enable-iam)。  
本節說明如何使用 IAM 政策來控制對 AWS KMS 操作的存取。如需 IAM 許可的一般資訊，請參閱《[IAM 使用者指南](https://docs.aws.amazon.com/IAM/latest/UserGuide/)》。

所有 KMS 金鑰都必須有金鑰政策。IAM 政策是選用的。若要使用 IAM 政策來控制 KMS 金鑰的存取，KMS 金鑰的金鑰政策必須授予帳戶使用 IAM 政策的許可。特別是，金鑰政策必須包含[啟用 IAM 政策的政策陳述式](key-policy-default.md#key-policy-default-allow-root-enable-iam)。

IAM 政策可以控制對任何 AWS KMS 操作的存取。與金鑰政策不同，IAM 政策可以控制對多個 KMS 金鑰的存取，並為數個相關 AWS 服務的操作提供許可。但是 IAM 政策對於控制操作的存取 (例如 [CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html)) 特別有用，因為它們不涉及任何特定 KMS 金鑰而無法由金鑰政策控制。

如果您 AWS KMS 透過 Amazon Virtual Private Cloud (Amazon VPC) 端點存取 ，您也可以使用 VPC 端點政策來限制在使用端點時對 AWS KMS 資源的存取。例如，使用 VPC 端點時，您可能只允許 中的委託人 AWS 帳戶 存取您的客戶受管金鑰。如需詳細資訊，請參閱 [VPC 端點政策](https://docs.aws.amazon.com/vpc/latest/privatelink/interface-endpoints.html#edit-vpc-endpoint-policy)。

如需撰寫及格式化 JSON 政策文件的說明，請參閱《*IAM 使用者指南*》中的 [IAM JSON 政策參考](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies.html)。

您可以下方式來使用 IAM 政策：
+ **連接許可政策到聯合或跨帳戶許可的角色** – 您可以連接 IAM 政策到 IAM 角色來啟用聯合身分、允許跨帳戶許可，或提供應用程式在 EC2 執行個體上執行的許可。如需 IAM 角色各種使用案例的詳細資訊，請參閱《*IAM 使用者指南*》中的 [IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)。
+ **連接許可政策到使用者或群組** – 您可以連接允許使用者或使用者群組呼叫 AWS KMS 操作的政策。不過，IAM 最佳實務建議您盡可能使用具有臨時憑證的身分，例如 IAM 角色。

下列範例顯示具有 AWS KMS 許可的 IAM 政策。此政策允許其連接的 IAM 身分列出所有 KMS 金鑰和別名。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Allow",
    "Action": [
      "kms:ListKeys",
      "kms:ListAliases"
    ],
    "Resource": "*"
  }
}
```

------

與所有 IAM 政策一樣，此政策沒有 `Principal` 元素。將 IAM 政策連接到 IAM 身分時，該身分會取得政策中指定的許可。

如需顯示所有 AWS KMS API 動作及其適用的資源的資料表，請參閱 [許可參考](kms-api-permissions-reference.md)。

## 允許多個 IAM 主體存取 KMS 金鑰
<a name="key-policy-modifying-multiple-iam-users"></a>

IAM 群組在金鑰政策中不是有效的主體。若要允許多個使用者和角色存取 KMS 金鑰，請執行下列其中一項操作：
+ 使用 IAM 角色作為金鑰政策中的主體。多個授權使用者可以視需要擔任該角色。如需詳細資訊，請參閱《IAM 使用者指南》**中的 [IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)。

  雖然您可以在金鑰政策中列出多個 IAM 使用者，但不建議使用此做法，因為這會要求您在每次授權使用者清單變更時更新金鑰政策。此外，IAM 最佳實務不建議使用具有長期憑證的 IAM 使用者。如需詳細資訊，請參閱《IAM 使用者指南》**中的 [IAM 中的安全性最佳實務](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)。
+ 使用 IAM 政策，將許可授予給 IAM 群組。為此，請確保金鑰政策包含的陳述式[可啟用 IAM 政策以允許存取 KMS 金鑰](key-policy-default.md#key-policy-default-allow-root-enable-iam)，建立一個允許存取 KMS 金鑰的 [IAM 政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-using.html#create-managed-policy-console)，然後[將該政策連接到包含該授權 IAM 使用者的 IAM 群組](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-using.html#attach-managed-policy-console)。透過此方式，您不需要在授權的使用者清單變更時，隨之變更任何政策。相反地，您只需要從適當的 IAM 群組新增或移除這些使用者。如需詳細資訊，請參閱《IAM 使用者指南》**中的 [IAM 使用者群組](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html)

如需 AWS KMS 金鑰政策和 IAM 政策如何搭配運作的詳細資訊，請參閱 [故障診斷 AWS KMS 許可](policy-evaluation.md)。

# IAM 政策的最佳實務
<a name="iam-policies-best-practices"></a>

保護對 的存取對於所有 AWS 資源的安全 AWS KMS keys 至關重要。KMS 金鑰可用來保護您的 AWS 帳戶中許多最敏感的資源。花時間設計控制 KMS 金鑰存取的[金鑰政策](key-policies.md)、IAM 政策、[授權](grants.md)和 VPC 端點政策。

在控制 KMS 金鑰存取的 IAM 政策陳述式中，使用[最低權限政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege)。僅為 IAM 主體提供他們必須使用或管理之 KMS 金鑰所需的許可。

下列最佳實務適用於控制 AWS KMS 金鑰和別名存取的 IAM 政策。如需一般 IAM 政策最佳實務指南，請參閱《IAM 使用者指南》**中的 [IAM 安全最佳實務](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)。

**使用金鑰政策**  
盡可能在影響一個 KMS 金鑰的金鑰政策中提供許可，而不是在可套用至許多 KMS 金鑰的 IAM 政策中提供許可，包括其他 AWS 帳戶中的這些政策。這對 [kms:PutKeyPolicy](https://docs.aws.amazon.com/kms/latest/APIReference/API_PutKeyPolicy.html) 和 [kms:ScheduleKeyDeletion](https://docs.aws.amazon.com/kms/latest/APIReference/API_ScheduleKeyDeletion.html) 等敏感許可特別重要，也適用於決定資料如何受到保護的密碼編譯操作。

**限制 CreateKey 許可**  
僅對需要的主體授予建立金鑰 ([kms:CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html)) 的許可。建立 KMS 金鑰的主體也會設定其金鑰政策，讓他們可以授予自己和其他人使用和管理其所建立之 KMS 金鑰的許可。當您允許此許可時，請考慮使用[政策條件](policy-conditions.md)對其進行限制。例如，您可以使用 [kms:KeySpec](conditions-kms.md#conditions-kms-key-spec) 條件來限制對稱加密 KMS 金鑰的許可。

**在 IAM 政策中指定 KMS 金鑰**  
最佳實務是在政策陳述式的 `Resource` 元素中指定許可套用至其中之每個 KMS 金鑰的[金鑰 ARN](concepts.md#key-id-key-ARN)。此實務會限制主體所需之 KMS 金鑰的許可。例如，此 `Resource` 元素只會列出主體需要使用的 KMS 金鑰。  

```
"Resource": [
    "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
    "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321"
]
```
指定 KMS 金鑰不切實際時，請使用限制對信任 AWS 帳戶 和 區域中 KMS 金鑰存取`Resource`的值，例如 `arn:aws:kms:region:account:key/*`。或限制對信任之所有區域 (\$1) 中 KMS 金鑰的存取 AWS 帳戶，例如 `arn:aws:kms:*:account:key/*`。  
您無法使用[金鑰 ID](concepts.md#key-id-key-id)、[別名名稱](concepts.md#key-id-alias-name)，或[別名 ARN](concepts.md#key-id-alias-ARN) 來代表 IAM 政策 `Resource` 欄位中的 KMS 金鑰。如果您指定別名 ARN，政策會套用至別名，而不是 KMS 金鑰。如需別名 IAM 政策的資訊，請參閱 [控制對別名的存取](alias-access.md)。

**避免 IAM 政策中的 "Resource": "\$1"**  <a name="avoid-resource-star"></a>
明智地使用萬用字元 (\$1)。在金鑰政策中，`Resource` 元素中的萬用字元代表金鑰政策所連接的 KMS 金鑰。但是在 IAM 政策中， `Resource`元素 (`"Resource": "*"`) 中只有萬用字元會將許可套用至 AWS 帳戶 委託人帳戶有權使用的所有 KMS 金鑰。這可能包括[其他 中的 KMS 金鑰 AWS 帳戶](key-policy-modifying-external-accounts.md)，以及委託人帳戶中的 KMS 金鑰。  
例如，若要在另一個 中使用 KMS 金鑰 AWS 帳戶，委託人需要來自外部帳戶中 KMS 金鑰之金鑰政策的許可，以及來自自己帳戶中 IAM 政策的許可。假設某個任意帳戶提供了針對其 KMS 金鑰的 AWS 帳戶 [kms:Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) 許可。如果是這樣，您帳戶中為所有 KMS 金鑰 (`"Resource": "*"`) 提供角色 `kms:Decrypt` 許可的 IAM 政策將滿足需求的 IAM 部分。因此，擔任該角色的主體現在可以使用不可信任帳戶中的 KMS 金鑰來解密加密文字。其操作的項目會顯示在兩個帳戶的 CloudTrail 日誌中。  
特別是，避免在允許下列 API 操作的政策陳述式中使用 `"Resource": "*"`。您可以在其他 的 KMS 金鑰上呼叫這些操作 AWS 帳戶。  
+ [DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html)
+ [GetKeyRotationStatus](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetKeyRotationStatus.html)
+ [密碼編譯操作](kms-cryptography.md#cryptographic-operations) ([Encrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Encrypt.html)、[Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html)、[GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html)、[GenerateDataKeyPair](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyPair.html)、[GenerateDataKeyWithoutPlaintext](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyWithoutPlaintext.html)、[GenerateDataKeyPairWithoutPlaintext](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyPairWithoutPlaintext.html)、[GetPublicKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetPublicKey.html)、[ReEncrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.html)、[Sign](https://docs.aws.amazon.com/kms/latest/APIReference/API_Sign.html)、[Verify](https://docs.aws.amazon.com/kms/latest/APIReference/API_Verify.html))
+ [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html)、[ListGrants](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListGrants.html)、[ListRetirableGrants](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListRetirableGrants.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)

**何時使用 "Resource": "\$1"**  <a name="require-resource-star"></a>
在 IAM 政策中，僅對需要的許可在 `Resource` 元素中使用萬用字元。只有下列許可需要 `"Resource": "*"` 元素。  
+ [kms:CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html)
+ [kms:GenerateRandom](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateRandom.html)
+ [kms:ListAliases](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListAliases.html)
+ [kms:ListKeys](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListKeys.html)
+ 自訂金鑰存放區的許可，例如 [kms:CreateCustomKeyStore](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateCustomKeyStore.html) 和 [kms:ConnectCustomKeyStore](https://docs.aws.amazon.com/kms/latest/APIReference/API_ConnectCustomKeyStore.html)。
別名操作的許可 ([kms:CreateAlias](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateAlias.html)、[kms:UpdateAlias](https://docs.aws.amazon.com/kms/latest/APIReference/API_UpdateAlias.html)、[kms:DeleteAlias](https://docs.aws.amazon.com/kms/latest/APIReference/API_DeleteAlias.html)) 必須連接至別名和 KMS 金鑰。您可以使用 IAM 政策中的 `"Resource": "*"` 來表示別名和 KMS 金鑰，或在 `Resource` 元素中指定別名和 KMS 金鑰。如需範例，請參閱 [控制對別名的存取](alias-access.md)。

 

本主題中的範例提供有關設計 KMS 金鑰之 IAM 政策的詳細資訊和指引。如需所有 AWS 資源的 IAM 最佳實務，請參閱《[IAM 使用者指南》中的 IAM 中的安全最佳實務](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)。 **

# 在 IAM 政策陳述式中指定 KMS 金鑰
<a name="cmks-in-iam-policies"></a>

您可以使用 IAM 政策，允許主體使用或管理 KMS 金鑰。在政策陳述式的 `Resource` 元素中指定 KMS 金鑰。
+ 若要在 IAM 政策陳述式中指定 KMS 金鑰，您必須使用其[金鑰 ARN](concepts.md#key-id-key-ARN)。您不能使用[金鑰 ID](concepts.md#key-id-key-id)、[別名名稱](concepts.md#key-id-alias-name)或[別名 ARN](concepts.md#key-id-alias-ARN) 來識別 IAM 政策陳述式中的 KMS 金鑰。

  例如："`Resource": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab`"

  若要根據其別名來控制對 KMS 金鑰的存取，請使用 [kms:RequestAlias](conditions-kms.md#conditions-kms-request-alias) 或 [kms:ResourceAliases](conditions-kms.md#conditions-kms-resource-aliases) 條件索引鍵。如需詳細資訊，請參閱[適用於 的 ABAC AWS KMS](abac.md)。

  僅在控制別名操作存取的政策陳述式中使用別名 ARN 作為資源，例如 [CreateAlias](https://docs.aws.amazon.com/kms/latest/APIReference/CreateAlias.html)、[UpdateAlias](https://docs.aws.amazon.com/kms/latest/APIReference/UpdateAlias.html) 或 [DeleteAlias](https://docs.aws.amazon.com/kms/latest/APIReference/DeleteAlias.html)。如需詳細資訊，請參閱[控制對別名的存取](alias-access.md)。
+ 若要在帳戶和區域中指定多個 KMS 金鑰，請在金鑰 ARN 的區域或資源 ID 位置中使用萬用字元 (\$1)。

  例如，若要在帳戶的美國西部 (奧勒岡) 區域中指定所有 KMS 金鑰，請使用 "`Resource": "arn:aws:kms:us-west-2:111122223333:key/*`"。若要在帳戶的所有區域中指定所有 KMS 金鑰，請使用 "`Resource": "arn:aws:kms:*:111122223333:key/*`"。
+ 若要代表所有 KMS 金鑰，請單獨使用萬用字元 (`"*"`)。將此格式用於不使用任何特定 KMS 金鑰的操作，也就是 [CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html)、[GenerateRandom](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateRandom.html)、[ListAliases](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListAliases.html) 和 [ListKeys](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListKeys.html)。

在撰寫政策陳述式時，[最佳實務](iam-policies-best-practices.md)是僅指定主體需要使用的 KMS 金鑰，而不是為其授予所有 KMS 金鑰的存取權。

例如，下列 IAM 政策陳述式允許主體僅針對政策陳述式 `Resource` 元素中列出的 KMS 金鑰呼叫 [DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html)、[GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html)、[Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) 操作。透過金鑰 ARN 指定 KMS 金鑰 (這是最佳實務) 可確保許可僅限於指定的 KMS 金鑰。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Allow",
    "Action": [
      "kms:DescribeKey",
      "kms:GenerateDataKey",
      "kms:Decrypt"
    ],
    "Resource": [
     "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
     "arn:aws:kms:us-west-2:111122223333:key/01234abcd-12ab-34cd-56ef-1234567890ab"
    ]
  }
}
```

------

若要將 許可套用至特定信任的所有 KMS 金鑰 AWS 帳戶，您可以在區域和金鑰 ID 位置中使用萬用字元 (\$1)。例如，下列政策陳述式可讓主體在兩個可信任範例帳戶中的所有 KMS 金鑰上呼叫指定的操作。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Allow",
    "Action": [
      "kms:DescribeKey",
      "kms:GenerateDataKey",
      "kms:GenerateDataKeyPair"
    ],
    "Resource": [
      "arn:aws:kms:*:111122223333:key/*",
      "arn:aws:kms:*:444455556666:key/*"
    ]
  }
}
```

------

您也可以在 `Resource` 元素中單獨使用萬用字元 (`"*"`)。因為它允許存取帳戶具有使用許可的所有 KMS 金鑰，所以建議主要用於沒有特定 KMS 金鑰的操作，以及 `Deny` 陳述式。您也可以在只允許較不敏感之唯讀操作的政策陳述式中使用它。若要判斷 AWS KMS 操作是否涉及特定 KMS 金鑰，請在 中資料表**的資源**欄中尋找 **KMS 金鑰**值[AWS KMS 許可](kms-api-permissions-reference.md)。

例如，下列政策陳述式使用 `Deny` 效果，以禁止主體在任何 KMS 金鑰上使用指定的操作。它使用 `Resource` 元素中的萬用字元來代表所有 KMS 金鑰。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Deny",
    "Action": [
      "kms:CreateKey",
      "kms:PutKeyPolicy",
      "kms:CreateGrant",
      "kms:ScheduleKeyDeletion"
    ],
    "Resource": "*"
  }
}
```

------

下列政策陳述式僅使用萬用字元來代表所有 KMS 金鑰。但它只允許不太敏感的唯讀操作和不適用於任何特定 KMS 金鑰的操作。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Allow",
    "Action": [
      "kms:CreateKey",
      "kms:ListKeys",
      "kms:ListAliases",
      "kms:ListResourceTags"
    ],
    "Resource": "*"
  }
}
```

------

# IAM 政策範例
<a name="customer-managed-policies"></a>

在本節中，您可以找到允許各種 AWS KMS 動作之許可的 IAM 政策範例。

**重要**  
以下政策中的一些許可僅在 KMS 金鑰的金鑰政策也允許時，才會獲得允許。如需詳細資訊，請參閱[許可參考](kms-api-permissions-reference.md)。

如需撰寫及格式化 JSON 政策文件的說明，請參閱《*IAM 使用者指南*》中的 [IAM JSON 政策參考](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies.html)。

**Topics**
+ [允許使用者在 AWS KMS 主控台中檢視 KMS 金鑰](#iam-policy-example-read-only-console)
+ [允許使用者建立 KMS 金鑰](#iam-policy-example-create-key)
+ [允許使用者使用特定 中的任何 KMS 金鑰來加密和解密 AWS 帳戶](#iam-policy-example-encrypt-decrypt-one-account)
+ [允許使用者在特定 和 區域中使用任何 KMS 金鑰來加密 AWS 帳戶 和解密](#iam-policy-example-encrypt-decrypt-one-account-one-region)
+ [允許使用者使用特定 KMS 金鑰來加密和解密](#iam-policy-example-encrypt-decrypt-specific-cmks)
+ [防止使用者停用或刪除任何 KMS 金鑰](#iam-policy-example-deny-disable-delete)

## 允許使用者在 AWS KMS 主控台中檢視 KMS 金鑰
<a name="iam-policy-example-read-only-console"></a>

下列 IAM 政策允許使用者唯讀存取 AWS KMS 主控台。具有這些許可的使用者可以檢視其 中的所有 KMS 金鑰 AWS 帳戶，但無法建立或變更任何 KMS 金鑰。

若要檢視 **AWS 受管金鑰** 和**客戶受管金鑰**頁面的 KMS 金鑰，主體需要 [kms:ListKeys](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListKeys.html)、[kms:ListAliases](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListAliases.html) 和 [tag:GetResources](https://docs.aws.amazon.com/resourcegroupstagging/latest/APIReference/API_GetResources.html) 許可，即使金鑰沒有標籤或別名。其餘的許可 (特別是 [kms:DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html)) 需要在 KMS 金鑰詳細資訊頁面上檢視選用的 KMS 金鑰表資料欄和資料。[iam:ListUsers](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListUsers.html) 和 [iam:ListRoles](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListRoles.html) 許可需要在預設檢視中顯示金鑰政策，而不會出現錯誤。若要檢視**自訂金鑰存放區**頁面上的資料和自訂金鑰存放區中 KMS 金鑰的詳細資訊，則主體也需要 [kms:DescribeCustomKeyStores](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeCustomKeyStores.html) 許可。

如果您限制對特定 KMS 金鑰的使用者主控台存取，則主控台會針對不可見的每個 KMS 金鑰顯示錯誤。

此政策包含兩個政策陳述式。第一個政策陳述式中的 `Resource` 元素允許範例 AWS 帳戶所有區域中所有 KMS 金鑰上的指定許可。主控台檢視器不需要額外的存取權，因為 AWS KMS 主控台只會顯示主體帳戶中的 KMS 金鑰。即使他們有權在其他 中檢視 KMS 金鑰，也是如此 AWS 帳戶。其餘 AWS KMS 和 IAM 許可需要 `"Resource": "*"`元素，因為它們不適用於任何特定的 KMS 金鑰。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "ReadOnlyAccessForAllKMSKeysInAccount",
      "Effect": "Allow",
      "Action": [
        "kms:GetPublicKey",        
        "kms:GetKeyRotationStatus",
        "kms:GetKeyPolicy",
        "kms:DescribeKey",
        "kms:ListKeyPolicies",
        "kms:ListResourceTags",
        "tag:GetResources"
      ],
      "Resource": "arn:aws:kms:*:111122223333:key/*"
    },
    {
      "Sid": "ReadOnlyAccessForOperationsWithNoKMSKey",
      "Effect": "Allow",
      "Action": [
        "kms:ListKeys",
        "kms:ListAliases",
        "iam:ListRoles",
        "iam:ListUsers"
      ],
      "Resource": "*"
    }
  ]
}
```

------

## 允許使用者建立 KMS 金鑰
<a name="iam-policy-example-create-key"></a>

下列 IAM 政策可讓使用者建立各類型的 KMS 金鑰。`Resource` 元素的值是 ，`*`因為 `CreateKey`操作不使用任何特定 AWS KMS 資源 (KMS 金鑰或別名）。

若要限制使用者僅能使用特定類型的 KMS 金鑰，請使用 [kms:KeySpec](conditions-kms.md#conditions-kms-key-spec)、[kms:KeyUsage](conditions-kms.md#conditions-kms-key-usage) 和 [kms:KeyOrigin](conditions-kms.md#conditions-kms-key-origin) 條件金鑰。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Allow",
    "Action": "kms:CreateKey",
    "Resource": "*"
  }
}
```

------

建立金鑰的主體可能需要一些相關許可。
+ **kms:PutKeyPolicy** – 擁有 `kms:CreateKey` 許可的主體可以設定 KMS 金鑰的初始金鑰政策。不過，`CreateKey` 呼叫者必須有 [kms:PutKeyPolicy](https://docs.aws.amazon.com/kms/latest/APIReference/API_PutKeyPolicy.html) 許可，這可讓其變更 KMS 金鑰政策，或者他們必須指定 `CreateKey` 的 `BypassPolicyLockoutSafetyCheck` 參數，但不建議這樣操作。`CreateKey` 呼叫者可以從 IAM 政策為 KMS 金鑰取得 `kms:PutKeyPolicy` 許可，或者其可以在所建立之 KMS 金鑰的金鑰政策中包含此許可。
+ **kms:TagResource** – 若要為 `CreateKey` 操作中的 KMS 金鑰新增標籤，`CreateKey` 呼叫者必須有 IAM 政策中的 [kms:TagResource](https://docs.aws.amazon.com/kms/latest/APIReference/API_TagResource.html) 許可。在新 KMS 金鑰的金鑰政策中包含此許可並不足夠。但是，如果 `CreateKey` 呼叫者在初始金鑰政策中包含 `kms:TagResource`，則他們可以在建立 KMS 金鑰之後，在個別呼叫中新增標籤。
+ **kms:CreateAlias** — 在 AWS KMS 主控台中建立 KMS 金鑰的委託人必須在 KMS 金鑰和別名上擁有 [kms:CreateAlias](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateAlias.html) 許可。(主控台進行兩個呼叫；一個至 `CreateKey` 和一個至 `CreateAlias`)。您必須在 IAM 政策中提供別名許可。您可以在金鑰政策、IAM 政策中提供 KMS 金鑰許可。如需詳細資訊，請參閱[控制對別名的存取](alias-access.md)。

除了 之外`kms:CreateKey`，下列 IAM 政策還提供 中所有 KMS 金鑰的`kms:TagResource`許可， AWS 帳戶 以及帳戶所有別名的`kms:CreateAlias`許可。其中還包含一些只能在 IAM 政策中提供的有用唯讀許可。

此 IAM 政策並不包括 `kms:PutKeyPolicy` 許可或可在金鑰政策中設定的任何其他許可。[最佳實務](iam-policies-best-practices.md)是在金鑰政策中設定這些許可，在其中它們會專門套用至一個 KMS 金鑰。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "IAMPermissionsForParticularKMSKeys",
      "Effect": "Allow",
      "Action": "kms:TagResource",
      "Resource": "arn:aws:kms:*:111122223333:key/*"
    },
    {
      "Sid": "IAMPermissionsForParticularAliases",
      "Effect": "Allow",
      "Action": "kms:CreateAlias",
      "Resource": "arn:aws:kms:*:111122223333:alias/*"
    },
    {
      "Sid": "IAMPermissionsForAllKMSKeys",
      "Effect": "Allow",
      "Action": [
        "kms:CreateKey",
        "kms:ListKeys",
        "kms:ListAliases"
      ],
      "Resource": "*"
    }
  ]
}
```

------

## 允許使用者使用特定 中的任何 KMS 金鑰來加密和解密 AWS 帳戶
<a name="iam-policy-example-encrypt-decrypt-one-account"></a>

下列 IAM 政策允許使用者使用 AWS 帳戶 111122223333 中的任何 KMS 金鑰來加密和解密資料。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Allow",
    "Action": [
      "kms:Encrypt",
      "kms:Decrypt"
    ],
    "Resource": "arn:aws:kms:*:111122223333:key/*"
  }
}
```

------

## 允許使用者在特定 和 區域中使用任何 KMS 金鑰來加密 AWS 帳戶 和解密
<a name="iam-policy-example-encrypt-decrypt-one-account-one-region"></a>

下列 IAM 政策允許使用者在美國西部 （奧勒岡） 區域中，使用 中的任何 AWS 帳戶 `111122223333` KMS 金鑰來加密和解密資料。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Allow",
    "Action": [
      "kms:Encrypt",
      "kms:Decrypt"
    ],
    "Resource": [
      "arn:aws:kms:us-west-2:111122223333:key/*"
    ]
  }
}
```

------

## 允許使用者使用特定 KMS 金鑰來加密和解密
<a name="iam-policy-example-encrypt-decrypt-specific-cmks"></a>

以下 IAM 政策允許使用者使用 `Resource` 元素中指定的兩個 KMS 金鑰來加密和解密資料。若要在 IAM 政策陳述式中指定 KMS 金鑰，您必須使用 KMS 金鑰的[金鑰 ARN](concepts.md#key-id-key-ARN)。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Allow",
    "Action": [
      "kms:Encrypt",
      "kms:Decrypt"
    ],
    "Resource": [
      "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
      "arn:aws:kms:us-west-2:111122223333:key/01234abc-d12a-b34c-d56e-f1234567890a'"
    ]
  }
}
```

------

## 防止使用者停用或刪除任何 KMS 金鑰
<a name="iam-policy-example-deny-disable-delete"></a>

以下 IAM 政策能防止使用者停用或刪除任何 KMS 金鑰，即使另一個 IAM 政策或金鑰政策允許這些許可。明確拒絕許可的政策會覆寫所有其他政策，即使那些政策明確允許相同的許可。如需詳細資訊，請參閱[故障診斷 AWS KMS 許可](policy-evaluation.md)。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Deny",
    "Action": [
      "kms:DisableKey",
      "kms:ScheduleKeyDeletion"
    ],
    "Resource": "*"
  }
}
```

------

# 中的資源控制政策 AWS KMS
<a name="resource-control-policies"></a>

資源控制政策 RCPs) 是一種組織政策，可用來對組織中 AWS 的資源強制執行預防性控制。RCPs可協助您集中限制大規模對 AWS 資源的外部存取。RCPs補充服務控制政策 SCPs)。雖然 SCPs可用來集中設定組織中 IAM 角色和使用者的最大許可，但 RCPs 可用來集中設定組織中 AWS 資源的最大許可。

您可以使用 RCPs來管理組織中客戶受管 KMS 金鑰的許可。僅 RCPs 不足以授與許可給客戶受管金鑰。RCP 不會授予任何許可。RCP 會針對身分可對受影響帳戶中的資源採取的動作，定義許可護欄或設定限制。管理員仍然必須將身分型政策連接到 IAM 角色或使用者，或金鑰政策，以實際授予許可。

**注意**  
組織中的資源控制政策不適用於 [AWS 受管金鑰](concepts.md#aws-managed-key)。  
AWS 受管金鑰 是由 AWS 服務代表您建立、管理和使用，您無法變更或管理其許可。

**進一步了解**
+ 如需 RCPs的一般資訊，請參閱*AWS Organizations 《 使用者指南*》中的[資源控制政策](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps.html)。
+ 如需如何定義 RCPs的詳細資訊，包括範例，請參閱*AWS Organizations 《 使用者指南*》中的 [RCP 語法](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps_syntax.html)。

下列範例示範如何使用 RCP 來防止外部主體存取組織中的客戶受管金鑰。此政策只是範例，您應該量身打造它來滿足您的獨特業務和安全需求。例如，您可能想要自訂您的政策，以允許您的業務合作夥伴存取 。如需詳細資訊，請參閱[資料周邊政策範例儲存庫](https://github.com/aws-samples/data-perimeter-policy-examples/tree/main/resource_control_policies)。

**注意**  
`kms:RetireGrant` 許可在 RCP 中無效，即使 `Action`元素指定星號 (\$1) 做為萬用字元。  
如需如何`kms:RetireGrant`判斷 許可的詳細資訊，請參閱 [淘汰和撤銷授予](grant-delete.md)。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "RCPEnforceIdentityPerimeter",
            "Effect": "Deny",
            "Principal": "*",
            "Action": "kms:*",
            "Resource": "*",
            "Condition": {
                "StringNotEqualsIfExists": {
                    "aws:PrincipalOrgID": "my-org-id"
                },
                "Bool": {
                    "aws:PrincipalIsAWSService": "false"
                }
            }
        }
    ]
}
```

------

下列範例 RCP 要求 AWS 服務主體只有在請求來自您的組織時，才能存取您的客戶受管 KMS 金鑰。此政策只會將控制項套用至`aws:SourceAccount`已存在的請求。這可確保不需要使用 的服務整合`aws:SourceAccount`不會受到影響。如果請求內容中存在 `aws:SourceAccount` ，則 `Null`條件會評估為 `true`，導致強制執行`aws:SourceOrgID`金鑰。

如需混淆代理人問題的詳細資訊，請參閱[《IAM 使用者指南》中的混淆代理人問題](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)。 **

```
```

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "RCPEnforceConfusedDeputyProtection",
            "Effect": "Deny",
            "Principal": "*",
            "Action": "kms:*",
            "Resource": "*",
            "Condition": {
                "StringNotEqualsIfExists": {
                    "aws:SourceOrgID": "my-org-id"
                },
                "Bool": {
                    "aws:PrincipalIsAWSService": "true"
                },
                "Null": {
                    "aws:SourceAccount": "false"
                }
            }
        }
    ]
}
```

------

# 在 中授予 AWS KMS
<a name="grants"></a>

*授權*是一個政策工具，允許 [AWS 主體](https://docs.aws.amazon.com/IAM/latest/UserGuide/intro-structure.html#intro-structure-principal)使用密碼編譯操作中的 KMS 金鑰。它也可以讓其檢視 KMS 金鑰 (`DescribeKey`)，並建立和管理授予。當授權存取 KMS 金鑰時，會考慮與[金鑰政策](key-policies.md)和 [IAM 政策](iam-policies.md)一起授予。授予通常用於臨時許可，因為您可以建立授予、使用其許可並刪除授予，而無需變更金鑰政策或 IAM 政策。

與 整合的 AWS 服務通常會使用授權 AWS KMS 來加密靜態資料。服務會代表帳戶中的使用者建立授予、使用其許可，並在其任務完成後立即淘汰授予。如需 AWS 服務使用授權方式的詳細資訊，請參閱服務使用者指南或開發人員指南中的*靜態加密*主題。

授予是非常靈活和有用的存取控制機制。當您建立 KMS 金鑰的授予時，只要授予中的所有指定條件都滿足，授予就會允許承授者主體呼叫 KMS 金鑰上指定的授予操作。
+ 每個授予只允許存取一個 KMS 金鑰。您可以在不同的 AWS 帳戶中為 KMS 金鑰建立授予。
+ 授予可以允許存取 KMS 金鑰，但不能拒絕存取。
+ 每個授予都有一個[承授者主體](#terms-grantee-principal)。承授者主體可以在 AWS 帳戶 與 KMS 金鑰相同的 或不同帳戶中代表一或多個身分。
+ 授予只能允許[授予操作](#terms-grant-operations)。授予操作必須由授予中的 KMS 金鑰支援。若您指定不支援的操作，則 [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html) 請求會失敗，`ValidationError` 為例外狀況。
+ 承授者主體可以在不指定授予的情況下使用授予給予的許可，就如同許可來自金鑰政策或 IAM 政策一樣。不過，由於 AWS KMS API 遵循[最終一致性](#terms-eventual-consistency)模型，當您建立、淘汰或撤銷授予時，在變更全面可用之前，可能會有短暫的延遲 AWS KMS。若要立即使用授予中的許可，請[使用授予字符](using-grant-token.md)。
+ 授權主體可以刪除授予 (對其進行[淘汰](#terms-retire-grant)或[撤銷](#terms-revoke-grant)）。刪除授予會消除授予允許的所有許可。您不需要弄清楚要新增或移除哪些政策，即可復原授予。
+ AWS KMS 會限制每個 KMS 金鑰的授予數量。如需詳細資訊，請參閱[每個 KMS 金鑰的授予：50,000](resource-limits.md#grants-per-key)。

建立授予和給予他人建立授予的許可時，請小心謹慎。建立授予的許可具有安全影響，就像允許 [kms:PutKeyPolicy](https://docs.aws.amazon.com/kms/latest/APIReference/API_PutKeyPolicy.html) 許可來設定政策。
+ 具有為 KMS 金鑰 (`kms:CreateGrant`) 建立授予許可的使用者可以使用授予來允許使用者和角色使用 KMS 金鑰，包括 AWS 服務。委託人可以是您自己的身分 AWS 帳戶 ，也可以是不同帳戶或組織中的身分。
+ 授予只能允許操作的子集 AWS KMS 。您可以使用授予來允許主體檢視 KMS 金鑰、在密碼編譯操作中使用 KMS 金鑰，以及建立和淘汰授予。如需詳細資訊，請參閱[授予操作](#terms-grant-operations)。您也可以使用[授予限制條件](create-grant-overview.md#grant-constraints)來限制授予對稱加密金鑰中的許可。
+ 主體可以從金鑰政策或 IAM 政策取得建立授予的許可。針對 KMS 金鑰的任何[授與操作](#terms-grant-operations)，透過政策取得 `kms:CreateGrant` 許可的主體均可建立授與。這些主體不需擁有他們對金鑰授與的許可。當允許政策中的 `kms:CreateGrant` 許可時，您可以使用[政策條件](grant-authorization.md)來限制此許可。
+ 主體也可以從授予取得建立授予的許可。這些委託人只能委派其獲授予的許可，即使他們擁有政策的其他許可。如需詳細資訊，請參閱[授與 CreateGrant 許可](create-grant-overview.md#grant-creategrant)。

## 授予概念
<a name="grant-concepts"></a>

若要有效地使用授予，您需要了解 AWS KMS 使用的條款和概念。

**授予限制條件**  <a name="terms-grant-constraint"></a>
限制授予中許可的條件。目前， AWS KMS 支援根據密碼編譯操作請求中的[加密內容](encrypt_context.md)來授予限制。如需詳細資訊，請參閱[使用授予限制條件](create-grant-overview.md#grant-constraints)。

**授予 ID**  <a name="terms-grant-id"></a>
用於 KMS 金鑰的授予唯一識別符。您可以使用授予 ID，與[金鑰識別符](concepts.md#key-id)一起，以識別 [RetireGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_RetireGrant.html) 或 [RevokeGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_RevokeGrant.html) 請求。

**授予操作**  <a name="terms-grant-operations"></a>
您可以在授予中允許 AWS KMS 的操作。如果您指定其他操作，則 [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html) 請求會失敗，`ValidationError` 為例外狀況。這些也是接受[授予字符](#grant_token)的操作。如需有關這些許可的詳細資訊，請參閱 [AWS KMS 許可](kms-api-permissions-reference.md)。  
這些授予操作實際上代表使用操作的許可。因此，對於 `ReEncrypt` 操作，您可以指定 `ReEncryptFrom`、`ReEncryptTo`，或兩者的 `ReEncrypt*`。  
授予操作包括：  
+ 密碼編譯操作
  + [解密](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html)
  + [DeriveSharedSecret](https://docs.aws.amazon.com/kms/latest/APIReference/API_DeriveSharedSecret.html)
  + [加密](https://docs.aws.amazon.com/kms/latest/APIReference/API_Encrypt.html)
  + [GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html)
  + [GenerateDataKeyPair](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyPair.html)
  + [GenerateDataKeyPairWithoutPlaintext](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyPairWithoutPlaintext.html)
  + [GenerateDataKeyWithoutPlaintext](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyWithoutPlaintext.html)
  + [GenerateMac](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateMac.html)
  + [ReEncryptFrom](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.html)
  + [ReEncryptTo](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.html)
  + [符號](https://docs.aws.amazon.com/kms/latest/APIReference/API_Sign.html)
  + [確認](https://docs.aws.amazon.com/kms/latest/APIReference/API_Verify.html)
  + [VerifyMac](https://docs.aws.amazon.com/kms/latest/APIReference/API_VerifyMac.html)
+ 其他操作
  + [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html)
  + [DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html)
  + [GetPublicKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetPublicKey.html)
  + [RetireGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_RetireGrant.html)
您允許的授予作業必須由授予中的 KMS 金鑰支援。若您指定不支援的操作，則 [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html) 請求會失敗，`ValidationError` 為例外狀況。例如，對稱加密 KMS 金鑰的授予不允許 [Sign](https://docs.aws.amazon.com/kms/latest/APIReference/API_Sign.html)、[Verify](https://docs.aws.amazon.com/kms/latest/APIReference/API_Verify.html)、[https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateMac.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateMac.html) 或 [https://docs.aws.amazon.com/kms/latest/APIReference/API_VerifyMac.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_VerifyMac.html) 操作。非對稱 KMS 金鑰的授予不允許任何產生資料金鑰或資料金鑰對的操作。

**授予字符**  <a name="grant_token"></a>
 AWS KMS API 遵循[最終一致性](#terms-eventual-consistency)模型。當您建立授權時，在該變更適用於整個 AWS KMS之前，可能會有短暫延遲。變更傳播到整個系統通常需要不到幾秒鐘的時間，但在某些情況下可能需要幾分鐘。如果您在整個系統中完全傳播授權之前嘗試使用授權，則可能會收到拒絕存取錯誤。授予字符可讓您參考授予並立即使用授予許可。  
*授予字符*是唯一的，非秘密的，可變長度的，base64 編碼的字串，代表授予。您可以使用授予字符來識別任何[授予操作](#terms-grant-operations)中的授予。但是，由於字符值是雜湊摘要，因此它不會顯示有關授予的任何詳細資訊。  
授權字符設計為只能在整個 AWS KMS中完全傳播授權之後才能使用。在此之後，[承授者主體](#terms-grantee-principal)可以使用授予中的許可，而不提供授予字符或任何其他授予的證據。您可以隨時使用授予字符，但一旦授予最終一致， AWS KMS 會使用授予來確定許可，而不是授予字符。  
例如，下列命令會呼叫 [GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) 操作。它使用授予字符來表示授予呼叫者 (承授者主體) 許可來呼叫指定 KMS 金鑰上的 `GenerateDataKey`。  

```
$ aws kms generate-data-key \
        --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \
        --key-spec AES_256 \
        --grant-token $token
```
您也可以使用授予字符來識別管理授予之操作中的授予。例如，[淘汰主體](#terms-retiring-principal)可以在 [RetireGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_RetireGrant.html) 操作的呼叫中使用授予字符。  

```
$ aws kms retire-grant \
        --grant-token $token
```
`CreateGrant` 是傳回授予字符的唯一操作。您無法從任何其他 AWS KMS 操作或從 CreateGrant 操作的 [CloudTrail 日誌事件](ct-creategrant.md)取得授予字符。[ListGrants](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListGrants.html) 和 [ListRetirableGrants](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListRetirableGrants.html) 操作會傳回[授予 ID](#terms-grant-id)，但不是授予字符。  
如需詳細資訊，請參閱[使用授予字符](using-grant-token.md)。

**承授者主體**  <a name="terms-grantee-principal"></a>
取得授予中所指定許可的身分。每個授予都有一個承授者主體，但承授者主體可以代表多個身分。  
承授者委託人可以是任何 AWS 委託人，包括 AWS 帳戶 （根）、[IAM 使用者](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html)、[IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)、[聯合角色或使用者](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers.html)，或擔任角色的使用者。承授者主體可以在與 KMS 金鑰相同的帳戶中，也可以在不同的帳戶中。不過，承授者主體不能是[服務主體](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#principal-services)、[IAM 群組](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html)，或 [AWS 組織](https://docs.aws.amazon.com/organizations/latest/userguide/)。  
IAM 最佳實務不建議使用具有長期憑證的 IAM 使用者。盡可能使用提供臨時憑證的 IAM 角色。如需詳細資訊，請參閱《IAM 使用者指南》**中的 [IAM 中的安全性最佳實務](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)。

**淘汰授予**  <a name="terms-retire-grant"></a>
終止授予。當您完成使用許可時，就會淘汰授予。  
撤銷和淘汰授予都會刪除授予。但是，由授予中指定的主體完成淘汰動作。撤銷通常是由金鑰管理員完成。如需詳細資訊，請參閱[淘汰和撤銷授予](grant-delete.md)。

**淘汰主體**  <a name="terms-retiring-principal"></a>
可以[淘汰授予](#terms-retire-grant)的主體。您可以在授予中指定淘汰的主體，但不是必需的。淘汰委託人可以是任何 AWS 委託人，包括 AWS 帳戶 IAM 使用者、IAM 角色、聯合身分使用者和擔任的角色使用者。淘汰的主體可以在與 KMS 金鑰相同的帳戶中，也可以在不同的帳戶中。  
IAM 最佳實務不建議使用具有長期憑證的 IAM 使用者。盡可能使用提供臨時憑證的 IAM 角色。如需詳細資訊，請參閱《IAM 使用者指南》**中的 [IAM 中的安全性最佳實務](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)。
除了授予中指定的淘汰委託人之外，授予也可以由建立授予 AWS 帳戶 的 淘汰。[承授者主體](#terms-grantee-principal)可以淘汰授予 (如果授予允許 `RetireGrant` 操作)。此外， AWS 帳戶 或 是淘汰主體 AWS 帳戶 的 可以將淘汰授予的許可委派給相同 中的 IAM 主體 AWS 帳戶。如需詳細資訊，請參閱[淘汰和撤銷授予](grant-delete.md)。

**撤銷 (授予)**  <a name="terms-revoke-grant"></a>
終止授予。您撤銷授予，以主動拒絕授予允許的許可。  
撤銷和淘汰授予都會刪除授予。但是，由授予中指定的主體完成淘汰動作。撤銷通常是由金鑰管理員完成。如需詳細資訊，請參閱[淘汰和撤銷授予](grant-delete.md)。

**最終一致性 (用於授予)**  <a name="terms-eventual-consistency"></a>
 AWS KMS API 遵循[最終一致性](https://en.wikipedia.org/wiki/Eventual_consistency)模型。當您建立、淘汰或撤銷授權時，在該變更適用於整個 AWS KMS之前，可能會有短暫延遲。變更傳播到整個系統通常需要不到幾秒鐘的時間，但在某些情況下可能需要幾分鐘。  
如果遇到非預期的錯誤，您可能會發現這個短暫的延遲。例如，如果您在完全知道授予之前嘗試管理新的授予或使用新授予中的許可 AWS KMS，您可能會收到存取遭拒錯誤。如果您淘汰或撤銷授予，承授者主體可能仍然可以在短期內使用其許可，直到授予完全刪除為止。典型的策略是重試請求，而 AWS SDKs 包含自動退避和重試邏輯。  
AWS KMS 具有可減輕此短暫延遲的功能。  
+ 若要立即使用新授予中的許可，請使用[授予字符](using-grant-token.md)。您可以使用授予字符來引用任何[授予操作](#terms-grant-operations)中的授予。如需說明，請參閱[使用授予字符](using-grant-token.md)。
+ [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html) 操作具有 `Name` 參數，可防止重試操作建立重複授予。
授予許可會取代授予的有效性，直到服務中的所有端點都更新為新的授予狀態為止。在大多數情況下，最終一致性將在五分鐘內達成。
如需詳細資訊，請參閱《[AWS KMS 最終一致性](accessing-kms.md#programming-eventual-consistency)》。

# AWS KMS 授予的最佳實務
<a name="grant-best-practices"></a>

AWS KMS 在建立、使用和管理授予時， 建議下列最佳實務。
+ 將授予中的許可限制為承授者主體需要的許可。使用[最低權限存取](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege)的原則。
+ 使用特定承授者主體 (例如 IAM 角色)，並讓承授者主體僅使用其所需 API 操作的許可。
+ 使用加密內容[授予限制條件](grants.md#terms-grant-constraint)，以確保呼叫者使用 KMS 金鑰來達到預期目的。如需如何在請求中使用加密內容來保護資料的詳細資訊，請參閱 *AWS 安全部落格*中的[如何使用 AWS Key Management Service 和 EncryptionContext 來保護加密資料的完整性](https://aws.amazon.com/blogs/security/how-to-protect-the-integrity-of-your-encrypted-data-by-using-aws-key-management-service-and-encryptioncontext/)。
**提示**  
盡可能使用 [EncryptionContextEqual](create-grant-overview.md#grant-constraints) 授予限制條件。[EncryptionContextSubset](create-grant-overview.md#grant-constraints) 授予限制條件更難以正確使用。如果您需要使用，請仔細閱讀文件並測試授予限制條件，以確保其按預期工作。
+ 刪除重複的授予。重複授予具有相同的金鑰 ARN、API 動作、承授者主體、加密內容和名稱。如果您淘汰或撤銷原始授予但保留重複項目，則剩餘的重複授予會構成非預期的權限升級。為了避免在重試 `CreateGrant` 請求時重複授予，請使用 [`Name` 參數](create-grant-overview.md#grant-create)。若要偵測重複授予，請使用 [ListGrants](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListGrants.html) 操作。如果意外建立了重複授予，請儘快淘汰或撤銷該授予。
**注意**  
[AWS 受管金鑰](concepts.md#aws-managed-key)授予可能看起來像重複項，但具有不同的承授者主體。  
`GranteePrincipal` 回應中的 `ListGrants` 欄位通常包含授與的承授者主體。不過，當授予中的承授者委託人是 AWS 服務時， `GranteePrincipal` 欄位會包含[服務委託](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#principal-services)人，這可能代表數個不同的承授者委託人。
+ 請記住，授予不會自動過期。不再需要許可時，即刻[淘汰或撤銷授予](grant-delete.md)。未刪除的授予可能會對加密資源造成安全風險。

# 控制對授予的存取
<a name="grant-authorization"></a>

您可以控制對在金鑰政策、IAM 政策和授予中建立和管理授予之操作的存取。從授予取得 `CreateGrant` 許可的主體具有[更有限的授予許可](create-grant-overview.md#grant-creategrant)。


| API 操作 | 金鑰政策或 IAM 政策 | 授權 | 
| --- | --- | --- | 
| CreateGrant | ✓ | ✓ | 
| ListGrants | ✓ | - | 
| ListRetirableGrants | ✓ | - | 
| 淘汰授予 | (有限。請參閱 [淘汰和撤銷授予](grant-delete.md)) | ✓ | 
| RevokeGrant | ✓ | - | 

當您使用金鑰政策或 IAM 政策來控制對建立和管理授予之操作的存取時，您可以使用下列一或多個政策條件來限制許可。 AWS KMS 支援下列所有授予相關條件金鑰。如需詳細資訊和範例，請參閱 [AWS KMS 條件索引鍵](conditions-kms.md)。

[kms:GrantConstraintType](conditions-kms.md#conditions-kms-grant-constraint-type)  
僅當授予包含指定的[授予限制條件](create-grant-overview.md#grant-constraints)時，才允許主體建立授予。

[kms:GrantIsForAWSResource](conditions-kms.md#conditions-kms-grant-is-for-aws-resource)  
`RevokeGrant` 只有在[與 整合 AWS 的服務 AWS KMS](https://aws.amazon.com/kms/features/#AWS_Service_Integration)代表委託人傳送請求時`CreateGrant`，允許委託人呼叫 `ListGrants`、 或 。

[kms:GrantOperations](conditions-kms.md#conditions-kms-grant-operations)  
允許主體建立授予，但將授予限制為指定的操作。

[kms:GranteePrincipal](conditions-kms.md#conditions-kms-grantee-principal)  
允許主體僅針對指定的[承授者主體](grants.md#terms-grantee-principal)建立授予。

[kms:RetiringPrincipal](conditions-kms.md#conditions-kms-retiring-principal)  
僅當授予指定特定的[淘汰主體](grants.md#terms-retiring-principal)時，才允許主體建立授予。

# 建立授予
<a name="create-grant-overview"></a>

建立授予之前，請先了解自訂授予的選項。您可以使用*授予限制條件*以限制授予中的許可。此外，了解授予 `CreateGrant` 許可。從授予取得建立授予之許可的主體，在其可以建立的授予中受到限制。

**Topics**
+ [建立授與](#grant-create)
+ [授與 CreateGrant 許可](#grant-creategrant)

## 建立授與
<a name="grant-create"></a>

若要建立授予，請呼叫 [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html) 操作。指定 KMS 金鑰、[承授者主體](grants.md#terms-grantee-principal)和允許的[授予操作](grants.md#terms-grant-operations)清單。您也可以指定選用的[淘汰主體](grants.md#terms-retiring-principal)。若要自訂授與，請使用選用 `Constraints` 參數來定義[授與限制](https://docs.aws.amazon.com/kms/latest/APIReference/API_GrantConstraints.html)。

當您建立、淘汰或撤銷授予時，可能會有短暫的延遲 (通常不到五分鐘)，然後才會在整個 AWS KMS中可用。如需詳細資訊，請參閱[最終一致性模式 (授權)](grants.md#terms-eventual-consistency)。

例如，下列 `CreateGrant` 命令會建立授予，以允許被授權擔任 `keyUserRole` 角色的使用者對指定的[對稱 KMS 金鑰](symm-asymm-choose-key-spec.md#symmetric-cmks)呼叫 [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) 操作。授權會使用 `RetiringPrincipal` 參數指定可淘汰授權的主體。同時也包含授權限制條件，僅當請求中的[加密內容](encrypt_context.md)包含 `"Department": "IT"` 時，才允許許可。

```
$  aws kms create-grant \
    --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \
    --grantee-principal arn:aws:iam::111122223333:role/keyUserRole \
    --operations Decrypt \
    --retiring-principal arn:aws:iam::111122223333:role/adminRole \
    --constraints EncryptionContextSubset={Department=IT}
```

如果您的程式碼重試 `CreateGrant` 操作，或使用[自動重試請求的AWS 開發套件](https://docs.aws.amazon.com/general/latest/gr/api-retries.html)，則請使用選用[名稱](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html#KMS-CreateGrant-request-Name)參數，以防止建立重複授予。如果 AWS KMS 取得與現有授予具有相同屬性的授予`CreateGrant`請求，包括名稱，它會將請求識別為重試，並且不會建立新的授予。您無法使用 `Name` 值以識別任何 AWS KMS 操作中的授予。

**重要**  
請勿在授權名稱包含機密或敏感資訊。其可能在 CloudTrail 日誌與其他輸出中以純文字顯示。

```
$ aws kms create-grant \
    --name IT-1234abcd-keyUserRole-decrypt \
    --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \
    --grantee-principal arn:aws:iam::111122223333:role/keyUserRole \
    --operations Decrypt \
    --retiring-principal arn:aws:iam::111122223333:role/adminRole \
    --constraints EncryptionContextSubset={Department=IT}
```

如需示範如何以多種程式設計語言建立授予的程式碼範例，請參閱 [`CreateGrant` 搭配 AWS SDK 或 CLI 使用](example_kms_CreateGrant_section.md)。

### 使用授予限制條件
<a name="grant-constraints"></a>

[授予限制條件](https://docs.aws.amazon.com/kms/latest/APIReference/API_GrantConstraints.html)會在為承授者主體提供授予的許可上設定條件。授予限制條件會取代[金鑰政策](key-policies.md)或 [IAM 政策](iam-policies.md)中的[條件索引鍵](policy-conditions.md)。每個授予限制條件值最多可以包含 8 個加密內容對。每個授予限制條件中的加密內容值不能超過 384 個字元。

**重要**  
請勿在此欄位包含機密或敏感資訊。此欄位可能在 CloudTrail 日誌與其他輸出中以純文字顯示。

AWS KMS 支援兩個授予限制， `EncryptionContextEquals`和 `EncryptionContextSubset`，這兩者在密碼編譯操作的請求中建立[加密內容](encrypt_context.md)的要求。

加密內容授予限制條件是設計用於與擁有加密內容參數的[授予操作](grants.md#terms-grant-operations)搭配使用。
+ 加密內容限制條件僅在對稱加密 KMS 金鑰的授予中有效。其他 KMS 金鑰的密碼編譯操作不支援加密內容。
+ 加密內容限制條件會忽略 `DescribeKey` 和 `RetireGrant` 操作。`DescribeKey` 和 `RetireGrant` 沒有加密內容參數，但您可以將這些操作包含在具有加密內容限制條件的授予中。
+ 您可以在 `CreateGrant` 操作的授予中使用加密內容限制條件。加密內容限制條件要求使用 `CreateGrant` 許可建立的任何授予具有同樣嚴格或更嚴格的加密內容限制條件。

AWS KMS 支援下列加密內容授予限制。

**EncryptionContextEquals**  
使用 `EncryptionContextEquals`，以指定允許請求的確切加密內容。  
`EncryptionContextEquals` 需要請求中的加密內容對完全符合 (包括大小寫) 授予限制條件中的加密內容。此對組可以任何順序顯示，但每個對組中的金鑰和值不能改變。  
例如，如果 `EncryptionContextEquals` 授予限制條件需要 `"Department": "IT"` 加密內容對，則僅當請求中的加密內容正好是 `"Department": "IT"` 時，授予才會允許指定類型的請求。

**EncryptionContextSubset**  
使用 `EncryptionContextSubset` 來要求請求包含特定的加密內容對。  
`EncryptionContextSubset` 需要請求包含授予限制條件中的所有加密內容對 (完全符合，包括大小寫)，但請求也可以有其他加密內容對。此對組可以任何順序顯示，但每個對組中的金鑰和值不能改變。  
例如，如果 `EncryptionContextSubset` 授予限制條件需要 `Department=IT` 加密內容對，則當請求中的加密內容為 `"Department": "IT"` 時，或包含 `"Department": "IT"` 與其他加密內容對 (例如 `"Department": "IT","Purpose": "Test"`) 時，授予才會允許指定類型的請求。

若要指定對稱加密 KMS 金鑰授予中的加密內容限制條件，請使用 [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html) 操作中的 `Constraints` 參數。此命令建立的授予會給予被授權擔任 `keyUserRole` 角色的使用者呼叫 [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) 操作的許可。但是，僅當 `Decrypt` 請求中的加密內容為 `"Department": "IT"` 加密內容對時，該許可才會生效。

```
$ aws kms create-grant \
    --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \
    --grantee-principal arn:aws:iam::111122223333:role/keyUserRole \
    --operations Decrypt \
    --retiring-principal arn:aws:iam::111122223333:role/adminRole \
    --constraints EncryptionContextEquals={Department=IT}
```

產生的授與看起來如下。請注意，授予給 `keyUserRole` 角色的許可只有在 `Decrypt` 請求使用授予限制條件中指定的相同加密內容對時才有效。如要尋找 KMS 金鑰的授予，請使用 [ListGrants](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListGrants.html) 操作。

```
$ aws kms list-grants --key-id 1234abcd-12ab-34cd-56ef-1234567890ab
{
    "Grants": [
        {
            "Name": "",
            "IssuingAccount": "arn:aws:iam::111122223333:root",
            "GrantId": "abcde1237f76e4ba7987489ac329fbfba6ad343d6f7075dbd1ef191f0120514a",
            "Operations": [
                "Decrypt"
            ],
            "GranteePrincipal": "arn:aws:iam::111122223333:role/keyUserRole",
            "Constraints": {
                "EncryptionContextEquals": {
                    "Department": "IT"
                }
            },
            "CreationDate": 1568565290.0,
            "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
            "RetiringPrincipal": "arn:aws:iam::111122223333:role/adminRole"
        }
    ]
}
```

為了滿足 `EncryptionContextEquals` 授予限制條件，`Decrypt` 操作請求中的加密內容必須是 `"Department": "IT"` 對。來自承授者主體的類似下列請求應當滿足 `EncryptionContextEquals` 授予限制條件。

```
$ aws kms decrypt \
    --key-id arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab\
    --ciphertext-blob fileb://encrypted_msg \
    --encryption-context Department=IT
```

當授予限制條件為 `EncryptionContextSubset`，請求中的加密內容對必須包含授予限制條件中的加密內容對，但請求也可以包含其他加密內容對。下列授予限制條件需要請求中的其中一個加密內容對為 `"Deparment": "IT"`。

```
"Constraints": {
   "EncryptionContextSubset": {
       "Department": "IT"
   }
}
```

來自承授者主體的類似下列請求應當同時滿足此範例中的 `EncryptionContextEqual` 和 `EncryptionContextSubset` 授予限制條件。

```
$ aws kms decrypt \
    --key-id arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab \
    --ciphertext-blob fileb://encrypted_msg \
    --encryption-context Department=IT
```

然而，來自承授者主體的類似下列請求應當滿足 `EncryptionContextSubset` 授予限制條件，但它無法滿足 `EncryptionContextEquals` 授予限制條件。

```
$ aws kms decrypt \
    --key-id arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab \
    --ciphertext-blob fileb://encrypted_msg \
    --encryption-context Department=IT,Purpose=Test
```

AWS 服務通常會在授予中使用加密內容限制，授予他們在您的 中使用 KMS 金鑰的許可 AWS 帳戶。例如，Amazon DynamoDB 使用類似下列授予來取得在您帳戶中為 DynamoDB 使用 [AWS 受管金鑰](concepts.md#aws-managed-key) 的許可。此 `EncryptionContextSubset` 授與中的授與限制只有在請求中的加密內容包含 `"subscriberID": "111122223333"` 和 `"tableName": "Services"` 對時，才會讓授與中的許可生效。此授予限制條件表示授予允許 DynamoDB 僅針對您 AWS 帳戶中的特定資料表使用指定的 KMS 金鑰。

若要取得此輸出，請在您帳戶中 AWS 受管金鑰 適用於 DynamoDB 的 上執行 [ListGrants](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListGrants.html) 操作。

```
$ aws kms list-grants --key-id 0987dcba-09fe-87dc-65ba-ab0987654321

{
    "Grants": [
        {
            "Operations": [
                "Decrypt",
                "Encrypt",
                "GenerateDataKey",
                "ReEncryptFrom",
                "ReEncryptTo",
                "RetireGrant",
                "DescribeKey"
            ],
            "IssuingAccount": "arn:aws:iam::111122223333:root",
            "Constraints": {
                "EncryptionContextSubset": {
                    "aws:dynamodb:tableName": "Services",
                    "aws:dynamodb:subscriberId": "111122223333"
                }
            },
            "CreationDate": 1518567315.0,
            "KeyId": "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321",
            "GranteePrincipal": "dynamodb.us-west-2.amazonaws.com",
            "RetiringPrincipal": "dynamodb.us-west-2.amazonaws.com",
            "Name": "8276b9a6-6cf0-46f1-b2f0-7993a7f8c89a",
            "GrantId": "1667b97d27cf748cf05b487217dd4179526c949d14fb3903858e25193253fe59"
        }
    ]
}
```

## 授與 CreateGrant 許可
<a name="grant-creategrant"></a>

授予可以包含呼叫 `CreateGrant` 操作的許可。但是，當[承授者主體](grants.md#terms-grantee-principal)從授予 (而非政策) 取得呼叫 `CreateGrant` 的許可時，該許可會受到限制。
+ 承授者主體只能建立允許父項授予中部分或全部操作的授予。
+ 其所建立授予中的[授予限制條件](#grant-constraints)必須至少與父項授予一樣嚴格。

這些限制不適用於從政策取得 `CreateGrant` 許可的主體，雖然其許可可以受到[政策條件](grant-authorization.md)限制。

例如，假設有一個授與允許承授者主體呼叫 `GenerateDataKey`、`Decrypt` 和 `CreateGrant` 操作。我們稱之為授予，允許 `CreateGrant` 許可*父項授予*。

```
# The original grant in a ListGrants response.
{
    "Grants": [
        {
            "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
            "CreationDate": 1572216195.0,
            "GrantId": "abcde1237f76e4ba7987489ac329fbfba6ad343d6f7075dbd1ef191f0120514a",
            "Operations": [
                "GenerateDataKey",
                "Decrypt",
                "CreateGrant
            ]
            "RetiringPrincipal": "arn:aws:iam::111122223333:role/adminRole",
            "Name": "",
            "IssuingAccount": "arn:aws:iam::111122223333:root",
            "GranteePrincipal": "arn:aws:iam::111122223333:role/keyUserRole",
            "Constraints": {
                "EncryptionContextSubset": {
                    "Department": "IT"
                }
            },
        }
    ]
}
```

承授者主體 exampleUser 可以使用此許可來建立授予，其中包含原始授予中指定的任何操作子集，例如 `CreateGrant` 和 `Decrypt`。*子項授予*不能包含其他操作，例如 `ScheduleKeyDeletion` 或 `ReEncrypt`。

此外，子項授予中的[授予限制條件](https://docs.aws.amazon.com/kms/latest/APIReference/API_GrantConstraints.html)必須與父項授予中的限制程度相等嚴格或比之更嚴格。例如，子授與可以新增對組到父授與的 `EncryptionContextSubset` 限制，但不能將其移除。子授與可將 `EncryptionContextSubset` 限制變更為 `EncryptionContextEquals` 限制，但不能反向。

IAM 最佳實務不建議使用具有長期憑證的 IAM 使用者。盡可能使用提供臨時憑證的 IAM 角色。如需詳細資訊，請參閱《IAM 使用者指南》**中的 [IAM 中的安全性最佳實務](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)。

例如，承授者主體可以使用其從父項授予中取得的 `CreateGrant` 許可，建立以下子項授予。子項授予的操作是父項授予操作的子集，授予限制條件更嚴格。

```
# The child grant in a ListGrants response.
{
    "Grants": [
        {
            "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
            "CreationDate": 1572249600.0,
            "GrantId": "fedcba9999c1e2e9876abcde6e9d6c9b6a1987650000abcee009abcdef40183f",
            "Operations": [
                "CreateGrant"
                "Decrypt"
            ]
            "RetiringPrincipal": "arn:aws:iam::111122223333:user/exampleUser",
            "Name": "",
            "IssuingAccount": "arn:aws:iam::111122223333:root",
            "GranteePrincipal": "arn:aws:iam::111122223333:user/anotherUser",
            "Constraints": {
                "EncryptionContextEquals": {
                    "Department": "IT"
                }
            },
        }
    ]
}
```

子項授予的承授者主體 `anotherUser`，可以使用其 `CreateGrant` 許可建立授予。然而，`anotherUser` 建立的授予必須在其父項授予或子集中包含操作，並且授予限制條件必須相同或更嚴格。

# 檢視授予
<a name="grant-view"></a>

若要檢視授權，請使用 [ListGrants](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListGrants.html) 操作。您必須指定授予套用的 KMS 金鑰。您也可以透過授予 ID 或承授者主體篩選授予清單。如需更多範例，請參閱[`ListGrants` 搭配 AWS SDK 或 CLI 使用](example_kms_ListGrants_section.md)。

若要檢視具有特定[淘汰委託](grants.md#terms-retiring-principal)人之 AWS 帳戶 和 區域中的所有授予，請使用 [ListRetirableGrants](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListRetirableGrants.html)。回應包括每項授予的詳細資訊。

**注意**  
`GranteePrincipal` 回應中的 `ListGrants` 欄位通常包含授與的承授者主體。不過，當授予中的承授者委託人是 AWS 服務時， `GranteePrincipal` 欄位會包含[服務委託](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#principal-services)人，這可能代表數個不同的承授者委託人。

例如，下列命令會列出 KMS 金鑰的所有授予。

```
$  aws kms list-grants --key-id 1234abcd-12ab-34cd-56ef-1234567890ab
{
    "Grants": [
        {
            "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
            "CreationDate": 1572216195.0,
            "GrantId": "abcde1237f76e4ba7987489ac329fbfba6ad343d6f7075dbd1ef191f0120514a",
            "Constraints": {
                "EncryptionContextSubset": {
                    "Department": "IT"
                }
            },
            "RetiringPrincipal": "arn:aws:iam::111122223333:role/adminRole",
            "Name": "",
            "IssuingAccount": "arn:aws:iam::111122223333:root",
            "GranteePrincipal": "arn:aws:iam::111122223333:user/exampleUser",
            "Operations": [
                "Decrypt"
            ]
        }
    ]
}
```

# 使用授予字符
<a name="using-grant-token"></a>

 AWS KMS API 遵循[最終一致性](grants.md#terms-eventual-consistency)模型。當建立授予時，授予可能無法立即生效。在該變更適用於整個 AWS KMS之前，可能會有短暫延遲。變更傳播到整個系統通常需要不到幾秒鐘的時間，但在某些情況下可能需要幾分鐘。一旦授權完全人傳播至整個系統，承授者主體即可使用授權的許可，而不需指定授權字符或授權的任何證據。不過，如果授予是如此新，但尚未讓所有 知道 AWS KMS，則請求可能會失敗並顯示`AccessDeniedException`錯誤。

若要立即使用新授予中的許可，請使用授予的[授予字符](grants.md#grant_token)。儲存 [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html) 操作傳回的授予字符。然後在 AWS KMS 操作的請求中提交授予字符。您可以提交授予字符到任何 AWS KMS [授予操作](grants.md#terms-grant-operations)，也可以在相同的請求中提交多個授予字符。



以下範例使用 `CreateGrant` 操作來建立允許 [GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) 和 [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) 操作的授予。它會儲存 `CreateGrant` 在 `token` 變數中傳回的授予字符。然後，在呼叫 `GenerateDataKey` 操作時，它會使用 `token` 變數中的授予字符。

```
# Create a grant; save the grant token 
$ token=$(aws kms create-grant \
    --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \
    --grantee-principal arn:aws:iam::111122223333:user/appUser \
    --retiring-principal arn:aws:iam::111122223333:user/acctAdmin \
    --operations GenerateDataKey Decrypt \
    --query GrantToken \
    --output text)

# Use the grant token in a request
$ aws kms generate-data-key \
    --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \
    –-key-spec AES_256 \
    --grant-tokens $token
```

具有 許可的委託人也可以使用授予權杖淘汰新的授予，即使整個授予都可用 AWS KMS。(`RevokeGrant` 操作不接受授予字符。) 如需詳細資訊，請參閱[淘汰和撤銷授予](grant-delete.md)。

```
# Retire the grant
$ aws kms retire-grant --grant-token $token
```

# 淘汰和撤銷授予
<a name="grant-delete"></a>

若要刪除授予，請淘汰或撤銷授予。

[RetireGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_RetireGrant.html) 和 [RevokeGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_RevokeGrant.html) 操作相互之間非常相似。這兩項操作都會刪除授予，這會消除授予允許的許可。這些操作之間的主要區別在於它們是如何取得授權的。

**RevokeGrant**  
與大多數 AWS KMS 操作一樣，`RevokeGrant`操作的存取是透過[金鑰政策和](key-policies.md) [IAM 政策](iam-policies.md)來控制。[RevokeGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_RevokeGrant.html) API 可以由任何具有 `kms:RevokeGrant` 許可的主體呼叫。此許可會納入提供給金鑰管理員的標準許可中。一般而言，管理員會撤銷授予，以拒絕授予允許的許可。

**RetireGrant**  
授予決定誰可以將其淘汰。此設計可讓您控制授予的生命週期，而不需變更金鑰政策或 IAM 政策。一般而言，當您使用其許可完成時，就會淘汰授予。  
可以透過授予中指定的選用[淘汰主體](grants.md#terms-retiring-principal)淘汰授予。[承授者主體](grants.md#terms-grantee-principal)亦可他淘汰授予，但前提是其也是淘汰主體或包含 `RetireGrant` 操作的授予。作為備份，建立授予 AWS 帳戶 的 可以淘汰授予。  
有可以在 IAM 政策中使用的 `kms:RetireGrant` 許可，但其公用程式有限。在授予中指定的主體可以淘汰授予，無需 `kms:RetireGrant` 許可。單獨的 `kms:RetireGrant` 許可不允許主體淘汰授予。`kms:RetireGrant` 許可在[金鑰政策](key-policies.md)或[資源控制政策](resource-control-policies.md)中無效。  
+ 若要拒絕淘汰授予的許可，您可以在 IAM 政策中使用具有 `kms:RetireGrant`許可`Deny`的動作。
+  AWS 帳戶 擁有 KMS 金鑰的 可以將`kms:RetireGrant`許可委派給帳戶中的 IAM 主體。
+ 如果淘汰委託人不同 AWS 帳戶，其他帳戶中的管理員可以使用 `kms:RetireGrant`將淘汰授予的許可委派給該帳戶中的 IAM 委託人。

 AWS KMS API 遵循[最終一致性](grants.md#terms-eventual-consistency)模型。當您建立、淘汰或撤銷授權時，在該變更適用於整個 AWS KMS之前，可能會有短暫延遲。變更傳播到整個系統通常需要不到幾秒鐘的時間，但在某些情況下可能需要幾分鐘。如果您需要立即刪除新的授予，在全部可用之前 AWS KMS，[請使用授予字符](using-grant-token.md)來淘汰授予。您無法使用授予字符來撤銷授予。

# 的條件索引鍵 AWS KMS
<a name="policy-conditions"></a>

您可以在控制 AWS KMS 資源存取的[金鑰政策和](key-policies.md) [IAM 政策](iam-policies.md)中指定條件。政策陳述式只有在符合下列條件時才有效。例如，您可能希望在特定日期之後才套用政策陳述式。或者，您可能會希望政策陳述式只在 API 請求中出現特定的值時才控制存取。

若要指定條件，請在具有 [IAM 條件運算子](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html)的政策陳述式 [`Condition` 元素](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html)中使用*條件鍵*。有些條件金鑰通常適用於 AWS；其他則專屬於 AWS KMS。

條件索引鍵值必須遵循 AWS KMS 索引鍵政策和 IAM 政策的字元和編碼規則。如需有關金鑰政策文件規則的詳細資訊，請參閱[金鑰政策格式](key-policy-overview.md#key-policy-format)。如需有關 IAM 政策文件規則的詳細資訊，請參閱《IAM 使用者指南》**中的 [IAM 名稱需求](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html#reference_iam-quotas-names)。

**Topics**
+ [AWS 全域條件索引鍵](conditions-aws.md)
+ [AWS KMS 條件索引鍵](conditions-kms.md)
+ [AWS KMS 已驗證平台的條件索引鍵](conditions-attestation.md)

# AWS 全域條件索引鍵
<a name="conditions-aws"></a>

AWS 定義[全域條件索引](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#AvailableKeys)鍵，這是一組政策條件索引鍵，適用於使用 IAM 進行存取控制的所有 AWS 服務。 AWS KMS 支援所有全域條件索引鍵。您可以在 AWS KMS 金鑰政策和 IAM 政策中使用它們。

例如，您可以使用 [aws:PrincipalArn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principalarn) 條件索引鍵，僅在請求中之主體的表示方式是條件索引鍵值中的 Amazon Resource Name (ARN) 時，允許存取 AWS KMS key (KMS 金鑰)。若要在 中支援[屬性型存取控制](abac.md) (ABAC) AWS KMS，您可以在 IAM 政策中使用 [aws：ResourceTag/*tag-key*](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-resourcetag) 全域條件金鑰，以允許存取具有特定標籤的 KMS 金鑰。

為了協助防止服務在委託人為 AWS 服務[AWS 委託人](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#principal-services)的政策中用作混淆代理人，您可以使用 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn)或 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount)全域條件金鑰。如需詳細資訊，請參閱[使用 `aws:SourceArn` 或 `aws:SourceAccount` 條件金鑰](least-privilege.md#least-privilege-source-arn)。

如需 AWS 全域條件金鑰的相關資訊，包括可用的請求類型，請參閱《*IAM 使用者指南*》中的[AWS 全域條件內容金鑰](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html)。如需 IAM 政策中使用全域條件索引鍵的範例，請參閱《*IAM 使用者指南*》中的[控制對請求的存取](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html#access_tags_control-requests)和[控制標籤索引鍵](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html#access_tags_control-tag-keys)。

下列主題提供的特殊指導，讓您能根據 IP 位址和 VPC 端點來使用條件金鑰。

**Topics**
+ [在具有 AWS KMS 許可的政策中使用 IP 地址條件](#conditions-aws-ip-address)
+ [在具有 AWS KMS 許可的政策中使用 VPC 端點條件](#conditions-aws-vpce)
+ [在 IAM 和 AWS KMS 金鑰政策中使用 IPv6 地址](#KMS-IPv6-policies)

## 在具有 AWS KMS 許可的政策中使用 IP 地址條件
<a name="conditions-aws-ip-address"></a>

您可以使用 AWS KMS 來保護[整合 AWS 服務](service-integration.md)中的資料。但是，在允許或拒絕存取的相同政策陳述式中指定 [IP 地址條件運算子](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_IPAddress)或`aws:SourceIp`條件索引鍵時，請小心 AWS KMS。例如， 中的政策[AWS： AWS 根據來源 IP 拒絕存取](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_examples_aws_deny-ip.html) 將 AWS 動作限制為來自指定 IP 範圍的請求。

考慮以下情形：

1. 您可以連接類似 的政策[AWS： AWS 根據來源 IP 拒絕存取](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_examples_aws_deny-ip.html) 到 IAM 身分。您將 `aws:SourceIp` 條件金鑰的值設定為使用者公司的 IP 地址範圍。這個 IAM 身分還有其他連接的政策，允許他使用 Amazon EBS、Amazon EC2 和 AWS KMS。

1. 該身分嘗試將加密的 EBS 磁碟區連接到 EC2 執行個體。即使使用者有權使用所有相關的服務，這個動作仍會失敗，發生授權錯誤。

步驟 2 失敗，因為 AWS KMS 對 的解密磁碟區的加密資料金鑰請求來自與 Amazon EC2 基礎設施相關聯的 IP 地址。若要成功，請求必須來自原始使用者的 IP 地址。由於步驟 1 中的政策明確拒絕來自指定 IP 地址以外的所有請求，因此 Amazon EC2 被拒絕解密 EBS 磁碟區之加密資料金鑰的許可。

此外，當請求來自 [Amazon VPC 端點](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints.html)時，`aws:SourceIP` 條件索引鍵無效。若要將請求限制為 VPC 端點 (包含 [AWS KMS VPC 端點](kms-vpc-endpoint.md))，請使用 `aws:SourceVpce` 或 `aws:SourceVpc` 條件金鑰。如需詳細資訊，請參閱 [Amazon VPC 使用者指南](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints.html#vpc-endpoints-iam-access)中的 *VPC 端點 - 控制端點的使用*。

## 在具有 AWS KMS 許可的政策中使用 VPC 端點條件
<a name="conditions-aws-vpce"></a>

[AWS KMS 支援採用 PrivateLink 技術的 Amazon Virtual Private Cloud (Amazon VPC) 端點](kms-vpc-endpoint.md)。 [AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Introduction.html#what-is-privatelink) 您可以在金鑰政策和 IAM 政策中使用下列[全域條件金鑰](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#AvailableKeys)，在請求來自 VPC 或使用 VPC 端點時控制對 AWS KMS 資源的存取。如需詳細資訊，請參閱[使用 VPC 端點控制對 AWS KMS 資源的存取](vpce-policy-condition.md)。
+ `aws:SourceVpc` 會限制對指定 VPC 所發出之請求的存取權。
+ `aws:SourceVpce` 會限制對指定 VPC 端點所發出之請求的存取權。

如果您使用這些條件金鑰來控制對 KMS 金鑰的存取，您可能會不小心拒絕 AWS KMS 代表您使用 AWS 的服務存取。

請注意避免 [IP 地址條件金鑰](#conditions-aws-ip-address)範例這樣的狀況。如果您將 KMS 金鑰的請求限制為 VPC 或 VPC 端點，則 AWS KMS 來自 Amazon S3 或 Amazon EBS 等整合服務的 呼叫可能會失敗。即使來源請求最終源自 VPC 或來自 VPC 端點，也會發生這種情況。

## 在 IAM 和 AWS KMS 金鑰政策中使用 IPv6 地址
<a name="KMS-IPv6-policies"></a>

嘗試 AWS KMS 透過 IPv6 存取 之前，請確保更新任何包含 IP 地址限制的金鑰和 IAM 政策，以包含 IPv6 地址範圍。未更新以處理 IPv6 地址的 IP 型政策可能會導致用戶端在開始使用 IPv6 時錯誤遺失或取得存取權。如需 KMS 存取控制的一般指引，請參閱 [KMS 金鑰存取和許可](control-access.md)。若要了解 KMS 和雙堆疊支援，請參閱 [雙堆疊端點支援](ipv6-kms.md)。

**重要**  
這些陳述式不允許任何動作。將這些陳述式與允許特定動作的其他陳述式結合使用。

下列陳述式明確拒絕存取來自 IPv4 地址`192.0.2.*`範圍之請求的所有 KMS 許可。超出此範圍的任何 IP 地址都不會明確拒絕 KMS 許可。由於所有 IPv6 地址都在拒絕範圍之外，此陳述式不會明確拒絕任何 IPv6 地址的 KMS 許可。

```
{
     "Sid": "DenyKMSPermissions",
     "Effect": "Deny",
    "Action": [
        "kms:*"
    ],
    "Resource": "*",
    "Condition": {
        "NotIpAddress": {
            "aws:SourceIp": [ 
                "192.0.2.0/24"
            ]
        }
    }
}
```

您可以修改 `Condition`元素以拒絕 IPv4 (`192.0.2.0/24`) 和 IPv6 (`2001:db8:1234::/32`) 地址範圍，如下列範例所示。

```
{
    "Sid": "DenyKMSPermissions",
    "Effect": "Deny",
    "Action": [
        "kms:*"
    ],
    "Resource": "*",
    "Condition": {
        "NotIpAddress": {
            "aws:SourceIp": [ 
                "192.0.2.0/24",
                "2001:db8:1234::/32"
            ]
        }
    }
}
```

# AWS KMS 條件索引鍵
<a name="conditions-kms"></a>

AWS KMS 提供一組條件金鑰，您可以在金鑰政策和 IAM 政策中使用。這些條件索引鍵是特定的 AWS KMS。例如，在控制對稱加密 KMS 金鑰的存取權時，您可以使用 `kms:EncryptionContext:context-key` 條件金鑰來要求特定的[加密內容](encrypt_context.md)。

**API 操作請求的條件**

許多 AWS KMS 條件金鑰會根據 AWS KMS 操作請求中的參數值來控制對 KMS 金鑰的存取。例如，您可使用 IAM 政策中的 [kms:KeySpec](#conditions-kms-key-spec) 條件索引鍵，在僅當 `CreateKey` 請求中的 `KeySpec` 參數值為 `RSA_4096`時，才允許使用 [CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html) 操作。

即使請求中未出現參數 (例如使用參數的預設值時)，這種類型的條件仍會發生作用。例如，您可使用 [kms:KeySpec](#conditions-kms-key-spec) 條件索引鍵，在僅當 `KeySpec` 參數值為 `SYMMETRIC_DEFAULT` 時 (預設值)，才允許使用者使用 `CreateKey` 操作。此條件允許 `KeySpec` 參數值為 `SYMMETRIC_DEFAULT` 的請求，以及沒有 `KeySpec` 參數的請求。

**在 API 操作中使用 KMS 金鑰需滿足的條件**

有些 AWS KMS 條件金鑰可以根據操作中使用的 KMS 金鑰屬性來控制對操作的存取。例如，您可使用 [kms:KeyOrigin](#conditions-kms-key-origin) 條件，在僅當 KMS 金鑰的 `Origin` 為 `AWS_KMS` 時，才允許主體呼叫 KMS 金鑰的 [GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html)。若要確定可否以這種方式使用條件金鑰，請參閱條件金鑰的描述。

操作必須是 *KMS 金鑰資源操作*，也就是授權特定 KMS 金鑰的操作。若要識別 KMS 金鑰資源操作，請在[動作與資源表](kms-api-permissions-reference.md#kms-api-permissions-reference-table)中尋找操作之 `Resources` 資料欄的 `KMS key` 值。如果對特定 KMS 金鑰資源使用此類型的條件索引鍵搭配未授權的操作，例如 [ListKeys](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListKeys.html)，因為條件永遠無法滿足，所以許可無效。授權 `ListKeys` 操作中沒有相關的 KMS 金鑰資源，也沒有 `KeySpec` 屬性。

下列主題說明每個 AWS KMS 條件索引鍵，並包含示範政策語法的政策陳述式範例。

**使用帶有條件索引鍵的集合運算子**

當政策條件比較兩組值時，例如請求中的一組標籤和政策中的一組標籤時，您需要知道 AWS 如何比較組。IAM 為此定義了兩個集合的運算子，`ForAnyValue` 和 `ForAllValues`。使用僅具有所需*多重值條件索引鍵*的集合運算子。請勿將集合運算子與*單一值條件索引鍵*搭配使用。如往常一樣，在生產環境中使用之前，完整測試您的政策陳述式。

條件索引鍵是單一值或多重值。若要判斷 AWS KMS 條件索引鍵是單值還是多值，請參閱條件索引鍵描述中的**值類型**欄。
+ *單一值*條件索引鍵在授權內容 (請求或資源) 中最多有一個值。例如，因為每個 API 呼叫只能源自於一個 AWS 帳戶，所以 [kms:CallerAccount](#conditions-kms-caller-account) 是單一值條件索引鍵。請勿使用具有單一值條件索引鍵的集合運算子。
+ *單一值*條件索引鍵在授權內容 (請求或資源) 中有多個值。例如，因為每個 KMS 金鑰都可以有多個別名，所以 [kms:ResourceAliases](#conditions-kms-resource-aliases) 可以擁有多個值。多重值條件索引鍵需要集合運算子。

請注意，單一值和多重值條件索引鍵之間的差異取決於授權內容中值的數目；而非政策條件中值的數目。

**警告**  
將集合運算子搭配單一值條件索引鍵使用，可以建立過度寬鬆 (或過度限制) 的政策陳述式。只能將集合運算子與多值條件索引鍵搭配使用。  
如果您建立或更新的政策包含具有 kms:EncryptionContext：*context-key* 或`aws:RequestTag/tag-key`條件索引鍵的`ForAllValues`集合運算子， 會 AWS KMS 傳回下列錯誤訊息：  
`OverlyPermissiveCondition: Using the ForAllValues set operator with a single-valued condition key matches requests without the specified [encryption context or tag] or with an unspecified [encryption context or tag]. To fix, remove ForAllValues.`

如需 `ForAnyValue` 和 `ForAllValues` 集合運算子的詳細資訊，請參閱《*IAM 使用者指南*》中的[使用多個金鑰和值](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_multi-value-conditions.html#reference_policies_multi-key-or-value-conditions)。如需使用具有單一值條件的 `ForAllValues` 集合運算子的風險資訊，請參閱《*IAM 使用者指南*》中的[安全性警告 – 具有單一值索引鍵的 ForAllValues](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-reference-policy-checks.html#access-analyzer-reference-policy-checks-security-warning-forallvalues-with-single-valued-key)。

**Topics**
+ [kms:BypassPolicyLockoutSafetyCheck](#conditions-kms-bypass-policy-lockout-safety-check)
+ [kms:CallerAccount](#conditions-kms-caller-account)
+ [kms:CustomerMasterKeySpec (已被取代)](#conditions-kms-key-spec-replaced)
+ [kms: CustomerMasterKeyUsage (已被取代)](#conditions-kms-key-usage-replaced)
+ [kms:DataKeyPairSpec](#conditions-kms-data-key-spec)
+ [kms:EncryptionAlgorithm](#conditions-kms-encryption-algorithm)
+ [kms:EncryptionContext:*context-key*](#conditions-kms-encryption-context)
+ [kms:EncryptionContextKeys](#conditions-kms-encryption-context-keys)
+ [kms:ExpirationModel](#conditions-kms-expiration-model)
+ [kms:GrantConstraintType](#conditions-kms-grant-constraint-type)
+ [kms:GrantIsForAWSResource](#conditions-kms-grant-is-for-aws-resource)
+ [kms:GrantOperations](#conditions-kms-grant-operations)
+ [kms:GranteePrincipal](#conditions-kms-grantee-principal)
+ [kms:KeyAgreementAlgorithm](#conditions-kms-key-agreement-algorithm)
+ [kms:KeyOrigin](#conditions-kms-key-origin)
+ [kms:KeySpec](#conditions-kms-key-spec)
+ [kms:KeyUsage](#conditions-kms-key-usage)
+ [kms:MacAlgorithm](#conditions-kms-mac-algorithm)
+ [kms:MessageType](#conditions-kms-message-type)
+ [kms:MultiRegion](#conditions-kms-multiregion)
+ [kms:MultiRegionKeyType](#conditions-kms-multiregion-key-type)
+ [kms:PrimaryRegion](#conditions-kms-primary-region)
+ [kms:ReEncryptOnSameKey](#conditions-kms-reencrypt-on-same-key)
+ [kms:RequestAlias](#conditions-kms-request-alias)
+ [kms:ResourceAliases](#conditions-kms-resource-aliases)
+ [kms:ReplicaRegion](#conditions-kms-replica-region)
+ [kms:RetiringPrincipal](#conditions-kms-retiring-principal)
+ [kms:RotationPeriodInDays](#conditions-kms-rotation-period-in-days)
+ [kms:ScheduleKeyDeletionPendingWindowInDays](#conditions-kms-schedule-key-deletion-pending-window-in-days)
+ [kms:SigningAlgorithm](#conditions-kms-signing-algorithm)
+ [kms:ValidTo](#conditions-kms-valid-to)
+ [kms:ViaService](#conditions-kms-via-service)
+ [kms:WrappingAlgorithm](#conditions-kms-wrapping-algorithm)
+ [kms:WrappingKeySpec](#conditions-kms-wrapping-key-spec)

## kms:BypassPolicyLockoutSafetyCheck
<a name="conditions-kms-bypass-policy-lockout-safety-check"></a>


| AWS KMS 條件索引鍵 | 條件類型 | 值類型 | API 操作 | Policy type (政策類型) | 
| --- | --- | --- | --- | --- | 
|  `kms:BypassPolicyLockoutSafetyCheck`  |  Boolean  | 單一值 |  `CreateKey` `PutKeyPolicy`  |  僅限 IAM 政策 金鑰政策和 IAM 政策  | 

根據請求中的 `BypassPolicyLockoutSafetyCheck` 參數值，`kms:BypassPolicyLockoutSafetyCheck` 條件索引鍵會控制對 [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 政策陳述式在 `CreateKey` 請求中的 `BypassPolicyLockoutSafetyCheck` 參數值是 `true.` 時，拒絕使用者建立 KMS 金鑰的許可，來防止使用者繞過政策鎖定安全檢查。

```
{
  "Effect": "Deny",
  "Action": [
    "kms:CreateKey",
    "kms:PutKeyPolicy"
  ],
  "Resource": "*",
  "Condition": {
    "Bool": {
      "kms:BypassPolicyLockoutSafetyCheck": true
    }
  }
}
```

您也可以在 IAM 政策或金鑰政策中使用 `kms:BypassPolicyLockoutSafetyCheck` 條件索引鍵，以控制對 `PutKeyPolicy` 操作的存取。來自金鑰政策的以下範例政策陳述式防止使用者在變更 KMS 金鑰的政策時繞過政策鎖定安全檢查。

除了使用明確 `Deny`，此政策陳述式使用 `Allow` 搭配 [Null 條件運算子](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_Null)，只在請求不包含 `BypassPolicyLockoutSafetyCheck` 參數時才允許存取。不使用參數時，預設值為 `false`。在極少數需要繞過的情況下，您可以覆寫這個比較弱的政策陳述式。

```
{
  "Effect": "Allow",
  "Action": "kms:PutKeyPolicy",
  "Resource": "*",
  "Condition": {
    "Null": {
      "kms:BypassPolicyLockoutSafetyCheck": true
    }
  }
}
```

**另請參閱**
+ [kms:KeySpec](#conditions-kms-key-spec)
+ [kms:KeyOrigin](#conditions-kms-key-origin)
+ [kms:KeyUsage](#conditions-kms-key-usage)

## kms:CallerAccount
<a name="conditions-kms-caller-account"></a>


| AWS KMS 條件索引鍵 | 條件類型 | 值類型 | API 操作 | Policy type (政策類型) | 
| --- | --- | --- | --- | --- | 
|  `kms:CallerAccount`  |  String  | 單一值 |  KMS 金鑰資源操作 自訂金鑰存放操作  |  金鑰政策和 IAM 政策  | 

您可以使用此條件索引鍵，來允許或拒絕 AWS 帳戶中所有身分 (使用者和角色) 的存取。在金鑰政策中，您可以使用 `Principal` 元素來指定政策陳述式套用的身分。`Principal` 元素的語法不提供用來指定 AWS 帳戶中所有身分的方式。但是，您可以將此條件索引鍵與指定所有 AWS 身分的 `Principal`元素結合，以達到此效果。

您可以使用它來控制對任何 *KMS 金鑰資源操作*的存取，也就是使用特定 KMS 金鑰的任何 AWS KMS 操作。若要識別 KMS 金鑰資源操作，請在[動作與資源表](kms-api-permissions-reference.md#kms-api-permissions-reference-table)中尋找操作之 `Resources` 資料欄的 `KMS key` 值。其也適用於管理[自訂金鑰存放](key-store-overview.md#custom-key-store-overview)的操作。

例如，以下金鑰政策陳述式示範了如何使用 `kms:CallerAccount` 條件索引鍵。此政策陳述式位於 AWS 受管金鑰 適用於 Amazon EBS 的 金鑰政策中。它結合了指定所有 AWS 身分的 `Principal`元素與`kms:CallerAccount`條件索引鍵，以有效地允許存取 AWS 帳戶 111122223333 中的所有身分。它包含額外的 AWS KMS 條件金鑰 (`kms:ViaService`)，只允許透過 Amazon EBS 發出的請求，以進一步限制許可。如需詳細資訊，請參閱[kms:ViaService](#conditions-kms-via-service)。

```
{
  "Sid": "Allow access through EBS for all principals in the account that are authorized to use EBS",
  "Effect": "Allow",
  "Principal": {"AWS": "*"},
  "Condition": {
    "StringEquals": {
      "kms:CallerAccount": "111122223333",
      "kms:ViaService": "ec2.us-west-2.amazonaws.com"
    }
  },
  "Action": [
    "kms:Encrypt",
    "kms:Decrypt",
    "kms:ReEncrypt*",
    "kms:GenerateDataKey*",
    "kms:CreateGrant",
    "kms:DescribeKey"
  ],
  "Resource": "*"
}
```

## kms:CustomerMasterKeySpec (已被取代)
<a name="conditions-kms-key-spec-replaced"></a>

`kms:CustomerMasterKeySpec` 條件索引鍵已被取代。請改用 [kms:KeySpec](#conditions-kms-key-spec) 條件索引鍵。

`kms:CustomerMasterKeySpec` 和 `kms:KeySpec` 條件索引鍵的運作方式相同。只有名稱不同。建議您使用 `kms:KeySpec`。不過，為了避免中斷變更， AWS KMS 支援兩個條件索引鍵。

## kms: CustomerMasterKeyUsage (已被取代)
<a name="conditions-kms-key-usage-replaced"></a>

`kms:CustomerMasterKeyUsage` 條件索引鍵已被取代。請改用 [kms:KeyUsage](#conditions-kms-key-usage) 條件索引鍵。

`kms:CustomerMasterKeyUsage` 和 `kms:KeyUsage` 條件索引鍵的運作方式相同。只有名稱不同。建議您使用 `kms:KeyUsage`。不過，為了避免中斷變更， AWS KMS 支援兩個條件索引鍵。

## kms:DataKeyPairSpec
<a name="conditions-kms-data-key-spec"></a>


| AWS KMS 條件索引鍵 | 條件類型 | 值類型 | API 操作 | Policy type (政策類型) | 
| --- | --- | --- | --- | --- | 
|  `kms:DataKeyPairSpec`  |  String  | 單一值 |  `GenerateDataKeyPair` `GenerateDataKeyPairWithoutPlaintext`  |  金鑰政策和 IAM 政策  | 

根據請求中的 `KeyPairSpec` 參數值，您可以使用此條件索引鍵控制對 [GenerateDataKeyPair](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyPair.html) 和 [GenerateDataKeyPairWithoutPlaintext](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyPairWithoutPlaintext.html) 操作的存取。例如，您可以允許使用者產生僅限特定類型的資料金鑰對。

下列範例金鑰政策陳述式使用 `kms:DataKeyPairSpec` 條件索引鍵，允許使用者使用 KMS 金鑰只產生 RSA 資料金鑰對。

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/ExampleRole"
  },
  "Action": [
    "kms:GenerateDataKeyPair",
    "kms:GenerateDataKeyPairWithoutPlaintext"
  ],
  "Resource": "*",
  "Condition": {
    "StringLike": {
      "kms:DataKeyPairSpec": "RSA*"
    }
  }
}
```

**另請參閱**
+ [kms:KeySpec](#conditions-kms-key-spec)
+ [kms:EncryptionAlgorithm](#conditions-kms-encryption-algorithm)
+ [kms:EncryptionContext:*context-key*](#conditions-kms-encryption-context)
+ [kms:EncryptionContextKeys](#conditions-kms-encryption-context-keys)

## kms:EncryptionAlgorithm
<a name="conditions-kms-encryption-algorithm"></a>


| AWS KMS 條件索引鍵 | 條件類型 | 值類型 | API 操作 | Policy type (政策類型) | 
| --- | --- | --- | --- | --- | 
|  `kms:EncryptionAlgorithm`  |  String  | 單一值 |  `Decrypt` `Encrypt` `GenerateDataKey` `GenerateDataKeyPair` `GenerateDataKeyPairWithoutPlaintext` `GenerateDataKeyWithoutPlaintext` `ReEncrypt`  |  金鑰政策和 IAM 政策  | 

您可以使用 `kms:EncryptionAlgorithm` 條件金鑰，根據操作中使用的加密演算法控制對密碼編譯操作的存取。對於 [Encrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Encrypt.html)、[Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) 和 [ReEncrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.html) 操作，則根據請求中的 [EncryptionAlgorithm](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html#KMS-Decrypt-request-EncryptionAlgorithm) 參數值控制存取。對於產生資料金鑰和資料金鑰對的操作，根據加密資料金鑰所用之加密演算法控制存取。

此條件金鑰不會影響在 外部執行的操作 AWS KMS，例如在 外部的非對稱 KMS 金鑰對中使用公有金鑰加密 AWS KMS。

**請求中的 EncryptionAlgorithm 參數**

若要允許使用者只使用特定加密演算法搭配 KMS 金鑰，請使用具有 `Deny` 效果的政策陳述式和 `StringNotEquals` 條件運算子。例如，下列範例金鑰政策陳述式禁止擔任 `ExampleRole` 角色的主體在指定的密碼編譯操作中使用此 KMS 金鑰，除非請求中的加密演算法是 `RSAES_OAEP_SHA_256` (即與 RSA KMS 金鑰搭配使用的非對稱加密演算法)。

與允許使用者使用特定加密演算法的政策陳述式不同，具有像這樣的雙負數的政策陳述式可防止此 KMS 金鑰的其他政策和授權讓此角色使用其他加密演算法。此金鑰政策陳述式中的 `Deny` 優先於任何金鑰政策或具有 `Allow` 效果的 IAM 政策，也優先於此 KMS 金鑰及其主體的所有授權。

```
{
  "Sid": "Allow only one encryption algorithm with this asymmetric KMS key",
  "Effect": "Deny",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/ExampleRole"
  },
  "Action": [
    "kms:Encrypt",
    "kms:Decrypt",
    "kms:ReEncrypt*"
  ],
  "Resource": "*",
  "Condition": {
    "StringNotEquals": {
      "kms:EncryptionAlgorithm": "RSAES_OAEP_SHA_256"
    }
  }
}
```

**用於操作的加密演算法**

您也可以使用 `kms:EncryptionAlgorithm` 條件索引鍵，即使在請求中未指定演算法，也可根據操作中使用的加密演算法來控制對操作的存取。這可讓您需要或禁止 `SYMMETRIC_DEFAULT` 演算法，這可能不會在請求中指定，因為其是預設值。

此功能能讓您使用 `kms:EncryptionAlgorithm` 條件索引鍵控制對產生資料金鑰和資料金鑰對之操作的存取。這些操作只使用對稱加密 KMS 金鑰和 `SYMMETRIC_DEFAULT` 演算法。

例如，此 IAM 政策會將其主體限制在對稱加密。除非請求中指定或操作中使用的加密演算法是 SYMMETRIC\$1DEFAULT，否則拒絕存取範例帳戶中密碼編譯操作的任何 KMS 金鑰。包含 `GenerateDataKey*` 新增 [GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html)、[GenerateDataKeyWithoutPlaintext](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyWithoutPlaintext.html)、[GenerateDataKeyPair](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyPair.html) 和 [GenerateDataKeyPairWithoutPlaintext](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyPairWithoutPlaintext.html) 至許可。條件對這些操作沒有影響，因為其一律使用對稱式加密演算法。

```
{
  "Sid": "AllowOnlySymmetricAlgorithm",
  "Effect": "Deny",
  "Action": [
    "kms:Encrypt",
    "kms:Decrypt",
    "kms:ReEncrypt*",
    "kms:GenerateDataKey*"
  ],
  "Resource": "arn:aws:kms:us-west-2:111122223333:key/*",
  "Condition": {
    "StringNotEquals": {
      "kms:EncryptionAlgorithm": "SYMMETRIC_DEFAULT"
    }
  }
}
```

**另請參閱**
+ [kms:MacAlgorithm](#conditions-kms-mac-algorithm)
+ [kms:SigningAlgorithm](#conditions-kms-signing-algorithm)

## kms:EncryptionContext:*context-key*
<a name="conditions-kms-encryption-context"></a>


| AWS KMS 條件索引鍵 | 條件類型 | 值類型 | API 操作 | Policy type (政策類型) | 
| --- | --- | --- | --- | --- | 
|  `kms:EncryptionContext:context-key`  |  String  | 單一值 |  `CreateGrant` `Encrypt` `Decrypt` `GenerateDataKey` `GenerateDataKeyPair` `GenerateDataKeyPairWithoutPlaintext` `GenerateDataKeyWithoutPlaintext` `ReEncrypt` `RetireGrant`  |  金鑰政策和 IAM 政策  | 

您可以使用 `kms:EncryptionContext:context-key` 條件金鑰，依據[密碼編譯操作](kms-cryptography.md#cryptographic-operations)請求中的[加密內容](encrypt_context.md)，控制對[對稱加密 KMS 金鑰](symm-asymm-choose-key-spec.md#symmetric-cmks)的存取。使用此條件索引鍵可同時評估加密內容對中的金鑰和值。若只評估加密內容索引鍵，或需要加密內容，而不考慮金鑰或值，請使用 [kms:EncryptionContextKeys](#conditions-kms-encryption-context-keys) 條件索引鍵。

**注意**  
條件金鑰值必須符合金鑰政策和 IAM 政策的字元規則。某些在加密內容中有效的字元在政策中無效。您可能無法使用此條件金鑰來表示所有的有效加密內容值。如需有關金鑰政策文件規則的詳細資訊，請參閱[金鑰政策格式](key-policy-overview.md#key-policy-format)。如需有關 IAM 政策文件規則的詳細資訊，請參閱《IAM 使用者指南》**中的 [IAM 名稱需求](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html#reference_iam-quotas-names)。

您不能使用[非對稱 KMS 金鑰](symmetric-asymmetric.md)或 [HMAC KMS 金鑰](hmac.md)在密碼編譯操作中指定加密內容。非對稱演算法和 MAC 演算法不支援加密內容。

若要使用 kms:EncryptionContext:*context-key* 條件索引鍵，請使用加密內容索引鍵取代 *context-key* 預留位置。將 *context-value* 預留位置取代為加密內容值。

```
"kms:EncryptionContext:context-key": "context-value"
```

例如，以下條件索引鍵指定加密內容，其中金鑰是 `AppName`，值是 `ExampleApp` (`AppName = ExampleApp`)。

```
"kms:EncryptionContext:AppName": "ExampleApp"
```

這是[單一值條件索引鍵](#set-operators)。條件索引鍵中的金鑰會指定特定的加密內容索引鍵 (*context-key*)。雖然您可以在每個 API 請求中包含多個加密內容對，但是與指定 *context-key* 對的加密內容只能有一個值。例如，`kms:EncryptionContext:Department` 條件索引鍵僅適用於與 `Department` 金鑰對的加密內容，以及任何與 `Department` 金鑰對的指定加密內容只能有一個值。

請勿將集合運算子與 `kms:EncryptionContext:context-key` 條件索引鍵搭配使用。如果您建立的政策陳述式包含 `Allow` 動作、`kms:EncryptionContext:context-key` 條件索引鍵和 `ForAllValues` 集合運算子，則條件會允許沒有加密內容的請求，以及未在政策條件中指定的加密內容對的請求。

**警告**  
請勿將 `ForAnyValue` 或 `ForAllValues` 集合運算子與此單一值條件索引鍵搭配使用。這些集合運算子可以建立不需要您想要要求之值的政策條件，並允許您想要禁止的值。  
如果您建立或更新的政策包含具有 kms:EncryptionContext：*context-key* 的`ForAllValues`集合運算子， 會 AWS KMS 傳回下列錯誤訊息：  
`OverlyPermissiveCondition:EncryptionContext: Using the ForAllValues set operator with a single-valued condition key matches requests without the specified encryption context or with an unspecified encryption context. To fix, remove ForAllValues.`

若要要求特定的加密內容對，請將 `kms:EncryptionContext:context-key` 條件索引鍵與 `StringEquals` 運算子搭配使用。

以下範例金鑰政策陳述式，僅當請求中的加密內容包含 `AppName:ExampleApp` 對時，才允許可以擔任角色的主體使用 `GenerateDataKey` 請求中的 KMS 金鑰。允許其他加密內容對。

金鑰名稱不會區分大小寫。值是否區分大小寫，取決於條件運算子，例如 `StringEquals`。如需詳細資訊，請參閱[加密內容條件需區分大小寫](#conditions-kms-encryption-context-case)。

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp"
  },
  "Action": "kms:GenerateDataKey",
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:EncryptionContext:AppName": "ExampleApp"
    }
  }
}
```

若要要求加密內容對並禁止所有其他加密內容對，請同時使用政策陳述式中的 kms:EncryptionContext:*context-key* 和 [`kms:EncryptionContextKeys`](#conditions-kms-encryption-context-keys)。以下範例政策陳述式使用 `kms:EncryptionContext:AppName` 條件索引鍵，要求請求中有 `AppName=ExampleApp` 加密內容對。它還會將 `kms:EncryptionContextKeys` 條件索引鍵與 `ForAllValues` 集合運算子搭配使用，以僅允許 `AppName` 加密內容索引鍵。

`ForAllValues` 集合運算子將請求中的加密內容索引鍵限制為 `AppName`。如果具有 `ForAllValues` 集合運算子的 `kms:EncryptionContextKeys` 條件在政策陳述式中單獨使用，則此集合運算子會允許沒有加密內容的請求。不過，如果請求沒有加密內容，則 `kms:EncryptionContext:AppName` 條件將會失敗。如需 `ForAllValues` 集合運算子的詳細資訊，請參閱《*IAM 使用者指南*》中的[使用多個索引鍵和值](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_multi-value-conditions.html#reference_policies_multi-key-or-value-conditions)。

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/KeyUsers"
  },
  "Action": "kms:GenerateDataKey",
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:EncryptionContext:AppName": "ExampleApp"
    },
    "ForAllValues:StringEquals": {
      "kms:EncryptionContextKeys": [
        "AppName"
      ]
    }
  }
}
```

您也可以使用此條件索引鍵來拒絕存取特定操作的 KMS 金鑰。以下範例金鑰政策陳述式使用 `Deny` 效果，在請求中加密內容包含 `Stage=Restricted` 加密內容對的情形下，禁止主體使用 KMS 金鑰。此條件允許使用其他加密內容對的請求，包括具有 `Stage` 金鑰和其他值的加密內容對，例如 `Stage=Test`。

```
{
  "Effect": "Deny",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp"
  },
  "Action": "kms:GenerateDataKey",
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:EncryptionContext:Stage": "Restricted"
    }
  }
}
```

### 使用多個加密內容對
<a name="conditions-kms-encryption-context-many"></a>

您可以要求或禁止多個加密內容對。您也可以要求其中一個加密內容對。如需用來解譯這些條件之邏輯的詳細資訊，請參閱《IAM 使用者指南》中的[建立具有多個索引鍵或值的條件](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_multi-value-conditions.html)。

**注意**  
本主題的舊版會顯示使用具有 kms:EncryptionContext:*context-key* 條件索引鍵之 `ForAnyValue` 和 `ForAllValues` 集合運算子的政策陳述式。使用具有[單一值條件索引鍵](#set-operators)的集合運算子可能會導致政策允許沒有加密內容和未指定加密內容對的請求。  
例如，政策條件具有 `Allow` 效果、`ForAllValues` 集合運算子和 `"kms:EncryptionContext:Department": "IT"` 條件索引鍵不會將加密內容限制為 "Department=IT" 對。它允許沒有加密內容的請求和未指定加密內容對的請求，例如 `Stage=Restricted`。  
請檢閱您的政策，並從任何具有 kms:EncryptionContext:*context-key* 的條件中排除集合運算子。嘗試使用此格式建立或更新政策會失敗，`OverlyPermissiveCondition` 為例外狀況。若要解決錯誤，請刪除集合運算子。

若要要求多個加密內容對，請以相同的條件列出對。以下範例金鑰政策陳述式需要兩個加密內容對，`Department=IT` 和 `Project=Alpha`。因為條件有不同的索引鍵 (`kms:EncryptionContext:Department` 和 `kms:EncryptionContext:Project`)，所以它們由 AND 運算子隱式連線。允許其他加密內容對，但不是必需的。

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp"
  },
  "Action": "kms:Decrypt",
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:EncryptionContext:Department": "IT",
      "kms:EncryptionContext:Project": "Alpha"
    }
  }
}
```

若需要一個加密內容對 OR 另一個對，請將每個條件索引鍵放在個別的政策陳述式中。以下範例金鑰政策需要 `Department=IT` *或* `Project=Alpha` 對，或兩者。允許其他加密內容對，但不是必需的。

```
{
 "Effect": "Allow",
 "Principal": {
  "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp"
 },
 "Action": "kms:GenerateDataKey",
 "Resource": "*",
 "Condition": {
  "StringEquals": {
   "kms:EncryptionContext:Department": "IT"
  }
 }
},
{
 "Effect": "Allow",
 "Principal": {
  "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp"
 },
 "Action": "kms:GenerateDataKey",
 "Resource": "*",
 "Condition": {
  "StringEquals": {
   "kms:EncryptionContext:Project": "Alpha"
  }
 }
}
```

若需要特定的加密對並排除所有其他加密內容對，請同時使用政策陳述式中的 kms:EncryptionContext:*context-key* 和 [`kms:EncryptionContextKeys`](#conditions-kms-encryption-context-keys)。以下金鑰政策陳述式使用 kms:EncryptionContext:*context-key* 條件來要求同時使用 `Department=IT` *和* `Project=Alpha` 對的加密內容。它會將 `kms:EncryptionContextKeys` 條件索引鍵與 `ForAllValues` 集合運算子搭配使用，以僅允許 `Department` 和 `Project` 加密內容索引鍵。

`ForAllValues` 集合運算子將請求中的加密內容索引鍵限制為 `Department` 和 `Project`。如果它是單獨使用的條件，則此集合運算子將允許沒有加密內容的請求，但在此組態中，kms:EncryptionContext:*context-key* 在這種情況下將失敗。

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp"
  },
  "Action": "kms:GenerateDataKey",
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:EncryptionContext:Department": "IT",
      "kms:EncryptionContext:Project": "Alpha"
    },
    "ForAllValues:StringEquals": {
      "kms:EncryptionContextKeys": [
        "Department",
        "Project"
      ]
    }
  }
}
```

您也可以禁止多個加密內容對。以下範例金鑰政策陳述式使用 `Deny` 效果，在請求中的加密內容包含 `Stage=Restricted` 和 `Stage=Production` 對的情形下，禁止主體使用 KMS 金鑰。

相同索引鍵 (`kms:EncryptionContext:Stage`) 的多個值 (`Restricted` 和 `Production`) 由 OR 隱式連線。如需詳細資訊，請參閱《*IAM 使用者指南*》中的[具有多個索引鍵或值之條件的評估邏輯](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_multi-value-conditions.html#reference_policies_multiple-conditions-eval)。

```
{
  "Effect": "Deny",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp"
  },
  "Action": "kms:GenerateDataKey",
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:EncryptionContext:Stage": [
         "Restricted",
         "Production"
      ] 
    }
  }
}
```

### 加密內容條件需區分大小寫
<a name="conditions-kms-encryption-context-case"></a>

解密操作中指定的加密內容和加密操作中指定的加密內容必須完全一樣，且大小寫相符。只有具有多對之加密內容中的配對順序可以改變。

不過，在政策條件中，條件金鑰不區分大小寫。條件值是否區分大小寫，取決於您使用的[政策條件運算子](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html)，例如 `StringEquals` 或 `StringEqualsIgnoreCase`。

因此，由 `kms:EncryptionContext:` 字首和 *`context-key`* 替換組成的條件金鑰不區分大小寫。使用此條件的政策不會檢查條件金鑰任一元素的大小寫。值 (亦即 *`context-value`* 替換) 是否區分大小寫，取決於政策條件運算子。

例如，以下政策陳述式允許操作的加密內容包含 `Appname` 金鑰，無論其大小寫。`StringEquals` 條件要求 `ExampleApp` 符合指定的大寫形式。

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp"
  },
  "Action": "kms:Decrypt",
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:EncryptionContext:Appname": "ExampleApp"
    }
  }
}
```

若需要區分大小寫的加密內容金鑰，請使用 [kms:EncryptionContextKeys](#conditions-kms-encryption-context-keys) 政策條件並搭配區分大小寫的條件運算子，例如 `StringEquals`。在這個政策條件中，因為加密內容索引鍵是此政策條件的值，所以其是否區分大小寫取決於條件運算子。

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp"
  },
  "Action": "kms:GenerateDataKey",
  "Resource": "*",
  "Condition": {
    "ForAnyValue:StringEquals": {
      "kms:EncryptionContextKeys": "AppName"
    }
  }
}
```

若需要同時評估加密內容索引鍵和值是否區分大小寫，請在相同的政策陳述式中一起使用 `kms:EncryptionContextKeys` 和 kms:EncryptionContext:*context-key* 政策條件。區分大小寫的條件運算子 (例如 `StringEquals`) 一律適用於條件的值。加密內容索引鍵 (例如 `AppName`) 是 `kms:EncryptionContextKeys` 條件的值。加密內容值 (例如 `ExampleApp`) 是 kms:EncryptionContext:*context-key* 條件的值。

例如，在以下範例政策陳述式中，因為 `StringEquals` 運算子區分大小寫，所以加密內容索引鍵和加密內容值會區分大小寫。

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp"
  },
  "Action": "kms:GenerateDataKey",
  "Resource": "*",
  "Condition": {
    "ForAnyValue:StringEquals": {
      "kms:EncryptionContextKeys": "AppName"
    },
    "StringEquals": {
      "kms:EncryptionContext:AppName": "ExampleApp"
    }
  }
}
```

### 在加密內容條件中使用變數
<a name="conditions-kms-encryption-context-variables"></a>

加密內容對中的金鑰和值必須是簡單的常值字串。它們不能是整數或物件，或任何未完全解析的類型。如果您使用不同的類型，例如整數或浮點數， 會將其 AWS KMS 解譯為文字字串。

```
"encryptionContext": {
    "department": "10103.0"
}
```

不過，`kms:EncryptionContext:context-key` 條件索引鍵的值可以是 [IAM 政策變數](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_variables.html)。這些政策變數會根據要求中的值在執行時間中解析。例如，`aws:CurrentTime ` 解析為請求的時間，而 `aws:username` 解析為易記的發起人名稱。

您可以使用這些政策變數來建立政策陳述式，其條件加密內容中需要非常特定的資訊，例如發起人的使用者名稱。由於它包含變數，因此您可以對可擔任角色的所有使用者使用相同的政策陳述式。您不需要為每個使用者個別編寫政策陳述式。

請考慮以下情況，您想要所有可擔任角色的使用者使用相同的 KMS 金鑰來加密和解密其資料。不過，您只想要允許他們解密由他們加密的資料。首先，要求每個請求都 AWS KMS 包含加密內容，其中金鑰為 `user`，而值為發起人的 AWS 使用者名稱，例如下列使用者名稱。

```
"encryptionContext": {
    "user": "bob"
}
```

然後，若要強制執行此需求，您可以使用類似以下範例中的政策陳述式。此政策陳述式提供 `TestTeam` 角色使用 KMS 金鑰加密和解密資料的許可。不過，許可只有在請求中的加密內容包含 `"user": "<username>"` 對時才有效。為了代表使用者名稱，條件使用 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_variables.html#policy-vars-infotouse](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_variables.html#policy-vars-infotouse) 政策變數。

評估請求時，發起人的使用者名稱會取代條件中的變數。因此，條件需要 `"user": "bob"` 的「bob」和 `"user": "alice"` 的「alice」加密內容。

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/TestTeam"
  },
  "Action": [
    "kms:Decrypt",
    "kms:Encrypt"
  ],
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:EncryptionContext:user": "${aws:username}"
    }
  }
}
```

您只能在 `kms:EncryptionContext:context-key` 條件索引鍵的值中使用 IAM 政策變數。您不能在金鑰中使用變數。

您也可以在變數中使用[供應商特定的內容金鑰](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_oidc_user-id.html)。這些內容金鑰可唯一識別 AWS 使用 Web 聯合身分登入的使用者。

如同所有變數，這些變數只能用於 `kms:EncryptionContext:context-key` 政策條件，不能用於實際的加密內容。而且只能用於條件的值，不能用於金鑰。

例如，下列金鑰政策陳述式與前一個陳述式類似。不過，條件需要加密內容，其金鑰是 `sub` 而值是可唯一識別登入 Amazon Cognito 使用者集區的使用者。如需有關在 Amazon Cognito 中識別使用者和角色的詳細資訊，請參閱《[Amazon Cognito 開發人員指南](https://docs.aws.amazon.com/cognito/latest/developerguide/)》中的 [IAM 角色](https://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html)。

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/TestTeam"
  },
  "Action": [
    "kms:Decrypt",
    "kms:Encrypt"
  ],
  "Resource": "*",
  "Condition": {
    "StringEquals": {
       "kms:EncryptionContext:sub": "${cognito-identity.amazonaws.com:sub}"
    }
  }
}
```

**另請參閱**
+ [kms:EncryptionContextKeys](#conditions-kms-encryption-context-keys)
+ [kms:GrantConstraintType](#conditions-kms-grant-constraint-type)

## kms:EncryptionContextKeys
<a name="conditions-kms-encryption-context-keys"></a>


| AWS KMS 條件索引鍵 | 條件類型 | 值類型 | API 操作 | Policy type (政策類型) | 
| --- | --- | --- | --- | --- | 
|  `kms:EncryptionContextKeys`  |  字串 (清單)  | 多重值 |  `CreateGrant` `Decrypt` `Encrypt` `GenerateDataKey` `GenerateDataKeyPair` `GenerateDataKeyPairWithoutPlaintext` `GenerateDataKeyWithoutPlaintext` `ReEncrypt` `RetireGrant`  |  金鑰政策和 IAM 政策  | 

您可以使用 `kms:EncryptionContextKeys` 條件金鑰，依據密碼編譯操作請求中的[加密內容](encrypt_context.md)，控制對[對稱加密 KMS 金鑰](symm-asymm-choose-key-spec.md#symmetric-cmks)的存取。使用此條件索引鍵，只評估每個加密內容對中的金鑰。若要同時評估加密內容中的金鑰和值，請使用 `kms:EncryptionContext:context-key` 條件索引鍵。

您不能使用[非對稱 KMS 金鑰](symmetric-asymmetric.md)或 [HMAC KMS 金鑰](hmac.md)在密碼編譯操作中指定加密內容。非對稱演算法和 MAC 演算法不支援加密內容。

**注意**  
條件金鑰值，包括加密內容金鑰，必須符合 AWS KMS 金鑰政策的字元和編碼規則。您可能無法使用此條件金鑰來表示所有的有效加密內容金鑰。如需有關金鑰政策文件規則的詳細資訊，請參閱[金鑰政策格式](key-policy-overview.md#key-policy-format)。如需有關 IAM 政策文件規則的詳細資訊，請參閱《IAM 使用者指南》**中的 [IAM 名稱需求](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html#reference_iam-quotas-names)。

這是[多重值條件索引鍵](#set-operators)。您可以在每個 API 請求中指定多個加密內容對。`kms:EncryptionContextKeys` 會將請求中的加密內容索引鍵與政策中的加密內容索引鍵集合進行比較。若要判斷這些集合的比較方式，您必須提供政策條件中的 `ForAnyValue` 或 `ForAllValues` 集合運算子。如需集合運算子的詳細資訊，請參閱《IAM 使用者指南》中的[使用多個索引鍵和值](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_multi-value-conditions.html#reference_policies_multi-key-or-value-conditions)。
+ `ForAnyValue`：請求中至少有一個加密內容索引鍵必須符合政策條件中的加密內容索引鍵。允許使用其他加密內容索引鍵。如果請求沒有加密內容，則不符合條件。
+ `ForAllValues`：請求中每個加密內容索引鍵必須符合政策條件中的加密內容索引鍵。此集合運算子會將加密內容索引鍵限制為政策條件中的索引鍵。它不需要任何加密內容索引鍵，但它禁止未指定的加密內容索引鍵。

以下範例金鑰政策陳述式將 `kms:EncryptionContextKeys` 條件索引鍵與 `ForAnyValue` 集合運算子搭配使用。此政策陳述式僅在請求中的至少一個加密內容對包含 `AppName` 金鑰時 (無論其值為何)，才允許使用指定操作的 KMS 金鑰。

例如，此金鑰政策陳述式允許具有兩個加密內容對、`AppName=Helper` 和 `Project=Alpha` 的 `GenerateDataKey` 請求，因為第一個加密內容對符合條件。僅具有 `Project=Alpha` 或沒有加密內容的請求將失敗。

由於 [StringEquals](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html) 條件操作會區分大小寫，因此此政策陳述式需要加密內容索引鍵的拼字和大小寫。但是，您也可以使用忽略金鑰大小寫的條件運算子，例如 `StringEqualsIgnoreCase`。

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp"
  },
  "Action": [
    "kms:Encrypt",
    "kms:GenerateDataKey*"
  ],
  "Resource": "*",
  "Condition": {
    "ForAnyValue:StringEquals": {
      "kms:EncryptionContextKeys": "AppName"
    }
  }
}
```

您也可以使用 `kms:EncryptionContextKeys` 條件索引鍵來要求使用 KMS 金鑰之密碼編譯操作中的加密內容 (任何加密內容)。

以下範例金鑰政策陳述式使用 `kms:EncryptionContextKeys` 條件索引鍵搭配 [Null 條件運算子](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_Null)，僅在 API 請求中存在加密內容 (不是 null) 時，才允許存取 KMS 金鑰。此情況不會檢查加密內容的索引鍵或值。它只會驗證加密內容是否存在。

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp"
  },
  "Action": [
    "kms:Encrypt",
    "kms:GenerateDataKey*"
  ],
  "Resource": "*",
  "Condition": {
    "Null": {
      "kms:EncryptionContextKeys": false
    }
  }
}
```

**另請參閱**
+ [kms:EncryptionContext:*context-key*](#conditions-kms-encryption-context)
+ [kms:GrantConstraintType](#conditions-kms-grant-constraint-type)

## kms:ExpirationModel
<a name="conditions-kms-expiration-model"></a>


| AWS KMS 條件索引鍵 | 條件類型 | 值類型 | API 操作 | Policy type (政策類型) | 
| --- | --- | --- | --- | --- | 
|  `kms:ExpirationModel`  |  String  | 單一值 |  `ImportKeyMaterial`  |  金鑰政策和 IAM 政策  | 

`kms:ExpirationModel` 條件索引鍵會根據請求中的 [ExpirationModel](https://docs.aws.amazon.com/kms/latest/APIReference/API_ImportKeyMaterial.html#KMS-ImportKeyMaterial-request-ExpirationModel) 參數值，控制對 [ImportKeyMaterial](https://docs.aws.amazon.com/kms/latest/APIReference/API_ImportKeyMaterial.html) 操作的存取。

`ExpirationModel` 是選擇性參數，用來決定匯入的金鑰材料是否過期。有效值為 `KEY_MATERIAL_EXPIRES` 和 `KEY_MATERIAL_DOES_NOT_EXPIRE`。`KEY_MATERIAL_EXPIRES` 為預設值。

過期日期和時間取決於 [ValidTo](https://docs.aws.amazon.com/kms/latest/APIReference/API_ImportKeyMaterial.html#KMS-ImportKeyMaterial-request-ValidTo) 參數的值。除非 `ExpirationModel` 參數的值是 `KEY_MATERIAL_DOES_NOT_EXPIRE`，否則 `ValidTo` 參數為必要。您也可以使用 [kms:ValidTo](#conditions-kms-valid-to) 條件金鑰來要求特定過期日期做為存取條件。

以下範例政策陳述式使用 `kms:ExpirationModel` 條件索引鍵，只在請求包含 `ExpirationModel` 參數且其值為 `KEY_MATERIAL_DOES_NOT_EXPIRE` 時，才允許使用者將金鑰材料匯入 KMS 金鑰。

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp"
  },
  "Action": "kms:ImportKeyMaterial",
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:ExpirationModel": "KEY_MATERIAL_DOES_NOT_EXPIRE"
    }
  }
}
```

您也可以使用 `kms:ExpirationModel` 條件索引鍵，只在金鑰材料過期時才允許使用者匯入金鑰材料。以下範例金鑰政策陳述式使用 `kms:ExpirationModel` 條件索引鍵搭配 [Null 條件運算子](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_Null)，僅當請求沒有 `ExpirationModel` 參數時，才允許使用者匯入金鑰材料。ExpirationModel 的預設值為 `KEY_MATERIAL_EXPIRES`。

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp"
  },
  "Action": "kms:ImportKeyMaterial",
  "Resource": "*",
  "Condition": {
    "Null": {
      "kms:ExpirationModel": true
    }
  }
}
```

**另請參閱**
+ [kms:ValidTo](#conditions-kms-valid-to)
+ [kms:WrappingAlgorithm](#conditions-kms-wrapping-algorithm)
+ [kms:WrappingKeySpec](#conditions-kms-wrapping-key-spec)

## kms:GrantConstraintType
<a name="conditions-kms-grant-constraint-type"></a>


| AWS KMS 條件索引鍵 | 條件類型 | 值類型 | API 操作 | Policy type (政策類型) | 
| --- | --- | --- | --- | --- | 
|  `kms:GrantConstraintType`  |  String  | 單一值 |  `CreateGrant` `RetireGrant`  |  金鑰政策和 IAM 政策  | 

您可以使用此條件索引鍵，根據請求中的[授予限制條件](create-grant-overview.md#grant-constraints)來控制對 [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html) 操作的存取。

建立授與時，您可以選擇指定授與限制以允許操作，僅在特定[加密內容](encrypt_context.md)存在時才授與許可。授與限制可以是兩種類型其中之一：`EncryptionContextEquals` 或 `EncryptionContextSubset`。您可以使用此條件金鑰來檢查請求是否包含其中一個類型。

**重要**  
請勿在此欄位包含機密或敏感資訊。此欄位可能在 CloudTrail 日誌與其他輸出中以純文字顯示。

以下範例金鑰政策陳述式使用 `kms:GrantConstraintType` 條件索引鍵，只在請求包含 `EncryptionContextEquals` 授予限制條件時才允許使用者建立授予。此範例顯示金鑰政策中的政策陳述式。

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp"
  },
  "Action": "kms:CreateGrant",
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:GrantConstraintType": "EncryptionContextEquals"
    }
  }
}
```

**另請參閱**
+ [kms:EncryptionContext:*context-key*](#conditions-kms-encryption-context)
+ [kms:EncryptionContextKeys](#conditions-kms-encryption-context-keys)
+ [kms:GrantIsForAWSResource](#conditions-kms-grant-is-for-aws-resource)
+ [kms:GrantOperations](#conditions-kms-grant-operations)
+ [kms:GranteePrincipal](#conditions-kms-grantee-principal)
+ [kms:RetiringPrincipal](#conditions-kms-retiring-principal)

## kms:GrantIsForAWSResource
<a name="conditions-kms-grant-is-for-aws-resource"></a>


| AWS KMS 條件索引鍵 | 條件類型 | 值類型 | API 操作 | Policy type (政策類型) | 
| --- | --- | --- | --- | --- | 
|  `kms:GrantIsForAWSResource`  |  Boolean  | 單一值 |  `CreateGrant` `ListGrants` `RevokeGrant`  |  金鑰政策和 IAM 政策  | 

只有在[AWS 與 整合的服務 AWS KMS](https://aws.amazon.com/kms/features/#AWS_Service_Integration)代表使用者呼叫操作時，才允許或拒絕 [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html)、[ListGrants](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListGrants.html) 或 [RevokeGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_RevokeGrant.html) 操作的許可。此政策條件不允許使用者直接呼叫這些授予操作。

以下範例金鑰政策陳述式會使用 `kms:GrantIsForAWSResource` 條件索引鍵。它允許與 整合 AWS 的服務 AWS KMS，例如 Amazon EBS，代表指定的委託人為此 KMS 金鑰建立授予。

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/ExampleRole"
  },
  "Action": "kms:CreateGrant",
  "Resource": "*",
  "Condition": {
    "Bool": {
      "kms:GrantIsForAWSResource": true
    }
  }
}
```

**另請參閱**
+ [kms:GrantConstraintType](#conditions-kms-grant-constraint-type)
+ [kms:GrantOperations](#conditions-kms-grant-operations)
+ [kms:GranteePrincipal](#conditions-kms-grantee-principal)
+ [kms:RetiringPrincipal](#conditions-kms-retiring-principal)

## kms:GrantOperations
<a name="conditions-kms-grant-operations"></a>


| AWS KMS 條件索引鍵 | 條件類型 | 值類型 | API 操作 | Policy type (政策類型) | 
| --- | --- | --- | --- | --- | 
|  `kms:GrantOperations`  |  String  | 多重值 |  `CreateGrant`  |  金鑰政策和 IAM 政策  | 

您可以使用此條件索引鍵，根據請求中的[授予操作](grants.md#terms-grant-operations)來控制對 [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html) 操作的存取。例如，您可以允許使用者建立授予，以委派加密 (但不是解密) 的許可。如需授予的詳細資訊，請參閱[使用授予](grants.md)。

這是[多重值條件索引鍵](#set-operators)。`kms:GrantOperations` 會將 `CreateGrant` 請求中的一組授予操作與政策中的一組授予操作進行比較。若要判斷這些集合的比較方式，您必須提供政策條件中的 `ForAnyValue` 或 `ForAllValues` 集合運算子。如需集合運算子的詳細資訊，請參閱《IAM 使用者指南》中的[使用多個索引鍵和值](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_multi-value-conditions.html#reference_policies_multi-key-or-value-conditions)。
+ `ForAnyValue`：請求中至少有一個授予操作必須符合政策條件中的其中一個授予操作。允許其他授予操作。
+ ForAllValues：請求中每個授予操作必須符合政策條件中的授予操作。此集合運算子會將授予操作限制為政策條件中指定的操作。它不需要任何授予操作，但它禁止未指定的授予操作。

  當請求中沒有授予操作時，ForAllValues 也會傳回 true，但 `CreateGrant` 不允許。如果 `Operations` 參數遺失或具有空值時，則 `CreateGrant` 請求會失敗。

以下範例政策陳述式使用 `kms:GrantOperations` 條件索引鍵，僅當授予操作為 `Encrypt`、`ReEncryptTo` 或兩者時，才允許建立授予。如果授予包含任何其他操作，則 `CreateGrant` 請求會失敗。

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/ExampleRole"
  },
  "Action": "kms:CreateGrant",
  "Resource": "*",
  "Condition": {
    "ForAllValues:StringEquals": {
      "kms:GrantOperations": [
        "Encrypt",
        "ReEncryptTo"
      ]
    }
  }
}
```

如果您將政策條件中的集合運算子變更為 `ForAnyValue`，則政策陳述式會要求授予中至少有一個授予操作為 `Encrypt` 或 `ReEncryptTo`，但它會允許其他授予操作，例如 `Decrypt` 或 `ReEncryptFrom`。

**另請參閱**
+ [kms:GrantConstraintType](#conditions-kms-grant-constraint-type)
+ [kms:GrantIsForAWSResource](#conditions-kms-grant-is-for-aws-resource)
+ [kms:GranteePrincipal](#conditions-kms-grantee-principal)
+ [kms:RetiringPrincipal](#conditions-kms-retiring-principal)

## kms:GranteePrincipal
<a name="conditions-kms-grantee-principal"></a>


| AWS KMS 條件索引鍵 | 條件類型 | 值類型 | API 操作 | Policy type (政策類型) | 
| --- | --- | --- | --- | --- | 
|  `kms:GranteePrincipal`  |  String  | 單一值 |  `CreateGrant`  |  IAM 和金鑰政策  | 

您可以使用此條件索引鍵，根據請求中的 [GranteePrincipal](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html#KMS-CreateGrant-request-GranteePrincipal) 參數值，控制對 [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html) 操作的存取。例如，您可以只在 `CreateGrant` 請求中的承授者主體符合條件陳述式中指定的主體時，才可建立授予來使用 KMS 金鑰。

若要指定承授者委託人，請使用委託人的 AWS Amazon Resource Name (ARN)。有效主體包括 AWS 帳戶 IAM 使用者、IAM 角色、聯合身分使用者和擔任的角色使用者。如需主體 ARN 語法的說明，請參閱《[IAM 使用者指南》中的 IAM ARNs](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-arns)。 **

以下範例政策陳述式使用 `kms:GranteePrincipal` 條件索引鍵，僅當授予中的承授者主體是 `LimitedAdminRole` 時，才可建立 KMS 金鑰的授予。

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/ExampleRole"
  },
  "Action": "kms:CreateGrant",
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:GranteePrincipal": "arn:aws:iam::111122223333:role/LimitedAdminRole"
    }
  }
}
```

**另請參閱**
+ [kms:GrantConstraintType](#conditions-kms-grant-constraint-type)
+ [kms:GrantIsForAWSResource](#conditions-kms-grant-is-for-aws-resource)
+ [kms:GrantOperations](#conditions-kms-grant-operations)
+ [kms:RetiringPrincipal](#conditions-kms-retiring-principal)

## kms:KeyAgreementAlgorithm
<a name="conditions-kms-key-agreement-algorithm"></a>


| AWS KMS 條件索引鍵 | 條件類型 | 值類型 | API 操作 | Policy type (政策類型) | 
| --- | --- | --- | --- | --- | 
|  `kms:KeyAgreementAlgorithm`  |  String  | 單一值 | `DeriveSharedSecret` |  金鑰政策和 IAM 政策  | 

您可以使用 `kms:KeyAgreementAlgorithm`條件金鑰，根據請求中的 `KeyAgreementAlgorithm` 參數值來控制對 [DeriveSharedSecret](https://docs.aws.amazon.com/kms/latest/APIReference/API_DeriveSharedSecret.html) 操作的存取。的唯一有效值`KeyAgreementAlgorithm`是 `ECDH`。

例如，下列金鑰政策陳述式使用 `kms:KeyAgreementAlgorithm` 條件金鑰拒絕對 DeriveSharedSecret 的所有存取，除非 `KeyAgreementAlgorithm`是 `ECDH`。

```
{
       "Effect": "Deny",
       "Principal": {
         "AWS": "arn:aws:iam::111122223333:role/ExampleRole"
       },
       "Action": "kms:DeriveSharedSecret",
       "Resource": "*",
       "Condition": {
            "StringNotEquals": {
               "kms:KeyAgreementAlgorithm": "ECDH"
         }
       }
}
```

**另請參閱**
+ [kms:KeyUsage](#conditions-kms-key-usage)

## kms:KeyOrigin
<a name="conditions-kms-key-origin"></a>


| AWS KMS 條件索引鍵 | 條件類型 | 值類型 | API 操作 | Policy type (政策類型) | 
| --- | --- | --- | --- | --- | 
|  `kms:KeyOrigin`  |  String  | 單一值 |  `CreateKey` KMS 金鑰資源操作  |  IAM 政策 金鑰政策和 IAM 政策  | 

`kms:KeyOrigin` 條件索引鍵會根據此操作建立或使用之 KMS 金鑰的 `Origin` 屬性值，控制對操作的存取。以資源條件或請求條件運作。

您可以使用此條件索引鍵，根據請求中的 [Origin](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html#KMS-CreateKey-request-Origin) 參數值，控制對 [CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html) 操作的存取。的有效值`Origin`為 `AWS_KMS`、`EXTERNAL_KEY_STORE`、 `AWS_CLOUDHSM`和 `EXTERNAL`。

例如，只有在 AWS KMS (`AWS_KMS`) 中產生金鑰材料時、只有在與 [CloudHSM 自訂金鑰存放](key-store-overview.md#custom-key-store-overview)區相關聯的 AWS CloudHSM 叢集中產生金鑰材料時 (`AWS_CLOUDHSM`)、只有在[外部金鑰存放區中產生金鑰材料時 ](key-store-overview.md#custom-key-store-overview)(`EXTERNAL_KEY_STORE`)，或只有在從外部來源[匯入金鑰材料時 ](importing-keys.md)()，您才能建立 KMS 金鑰`EXTERNAL`。

下列範例金鑰政策陳述式使用 `kms:KeyOrigin` 條件金鑰，僅在 建立金鑰材料時 AWS KMS 建立 KMS 金鑰。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:role/ExampleRole"
      },
      "Action": "kms:CreateKey",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "kms:KeyOrigin": "AWS_KMS"
        }
      }
    },
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:role/ExampleRole"
      },
      "Action": [
        "kms:Encrypt",
        "kms:Decrypt",
        "kms:GenerateDataKey",
        "kms:GenerateDataKeyWithoutPlaintext",
        "kms:GenerateDataKeyPair",
        "kms:GenerateDataKeyPairWithoutPlaintext",
        "kms:ReEncrypt*"
      ],
      "Resource": "arn:aws:kms:us-west-2:111122223333:key/*",
      "Condition": {
        "StringEquals": {
          "kms:KeyOrigin": "AWS_CLOUDHSM"
        }
      }
    }
  ]
}
```

------

您也可以使用 `kms:KeyOrigin` 條件索引鍵，根據用於操作之 KMS 金鑰的 `Origin` 屬性控制對使用或管理 KMS 金鑰之操作的存取。操作必須是 *KMS 金鑰資源操作*，也就是授權特定 KMS 金鑰的操作。若要識別 KMS 金鑰資源操作，請在[動作與資源表](kms-api-permissions-reference.md#kms-api-permissions-reference-table)中尋找操作之 `Resources` 資料欄的 `KMS key` 值。

例如，下列 IAM 政策允許主體執行指定的 KMS 金鑰資源操作，但僅能使用帳戶中於自訂金鑰存放區中建立的 KMS 金鑰。

```
{
  "Effect": "Allow",  
  "Action": [
    "kms:Encrypt",
    "kms:Decrypt",
    "kms:GenerateDataKey",
    "kms:GenerateDataKeyWithoutPlaintext",
    "kms:GenerateDataKeyPair",
    "kms:GenerateDataKeyPairWithoutPlaintext",
    "kms:ReEncrypt*"
  ],
  "Resource": "arn:aws:kms:us-west-2:111122223333:key/*",
  "Condition": {
    "StringEquals": {
      "kms:KeyOrigin": "AWS_CLOUDHSM"
    }
  }
}
```

**另請參閱**
+ [kms:BypassPolicyLockoutSafetyCheck](#conditions-kms-bypass-policy-lockout-safety-check)
+ [kms:KeySpec](#conditions-kms-key-spec)
+ [kms:KeyUsage](#conditions-kms-key-usage)

## kms:KeySpec
<a name="conditions-kms-key-spec"></a>


| AWS KMS 條件索引鍵 | 條件類型 | 值類型 | API 操作 | Policy type (政策類型) | 
| --- | --- | --- | --- | --- | 
|  `kms:KeySpec`  |  String  | 單一值 |  `CreateKey` KMS 金鑰資源操作 |  IAM 政策 金鑰政策和 IAM 政策  | 

`kms:KeySpec` 條件索引鍵會根據此操作建立或使用之 KMS 金鑰的 `KeySpec` 屬性值，控制對操作的存取。

您可以使用 IAM 政策中的此條件索引鍵，根據 `CreateKey` 請求中的 [KeySpec](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html#KMS-CreateKey-request-KeySpec) 參數值，控制對 [CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html) 操作的存取。例如，您可以使用此條件，允許使用者僅建立對稱加密 KMS 金鑰，或僅建立 HMAC KMS 金鑰。

下列範例 IAM 政策陳述式會使用 `kms:KeySpec` 條件金鑰，允許主體僅建立 RSA 非對稱 KMS 金鑰。僅在請求中的 `KeySpec` 以 `RSA_` 開頭時，許可才有效。

```
{
  "Effect": "Allow",
  "Action": "kms:CreateKey",
  "Resource": "*",
  "Condition": {
    "StringLike": {
      "kms:KeySpec": "RSA_*"
    }
  }
}
```

您也可以使用 `kms:KeySpec` 條件索引鍵，根據用於操作之 KMS 金鑰的 `KeySpec` 屬性控制對使用或管理 KMS 金鑰之操作的存取。操作必須是 *KMS 金鑰資源操作*，也就是授權特定 KMS 金鑰的操作。若要識別 KMS 金鑰資源操作，請在[動作與資源表](kms-api-permissions-reference.md#kms-api-permissions-reference-table)中尋找操作之 `Resources` 資料欄的 `KMS key` 值。

例如，下列 IAM 政策允許主體執行指定的 KMS 金鑰資源操作，但僅能使用帳戶中的對稱加密 KMS 金鑰。

```
{
  "Effect": "Allow",
  "Action": [
    "kms:Encrypt",
    "kms:Decrypt",
    "kms:ReEncrypt*",
    "kms:DescribeKey"
  ],
  "Resource": "arn:aws:kms:us-west-2:111122223333:key/*",
  "Condition": {
    "StringEquals": {
      "kms:KeySpec": "SYMMETRIC_DEFAULT"
    }
  }
}
```

**另請參閱**
+ [kms:BypassPolicyLockoutSafetyCheck](#conditions-kms-bypass-policy-lockout-safety-check)
+ [kms:CustomerMasterKeySpec (已被取代)](#conditions-kms-key-spec-replaced)
+ [kms:DataKeyPairSpec](#conditions-kms-data-key-spec)
+ [kms:KeyOrigin](#conditions-kms-key-origin)
+ [kms:KeyUsage](#conditions-kms-key-usage)

## kms:KeyUsage
<a name="conditions-kms-key-usage"></a>


| AWS KMS 條件索引鍵 | 條件類型 | 值類型 | API 操作 | Policy type (政策類型) | 
| --- | --- | --- | --- | --- | 
|  `kms:KeyUsage`  |  String  | 單一值 |  `CreateKey` KMS 金鑰資源操作  |  IAM 政策 金鑰政策和 IAM 政策  | 

`kms:KeyUsage` 條件索引鍵會根據此操作建立或使用之 KMS 金鑰的 `KeyUsage` 屬性值，控制對操作的存取。

您可以使用此條件索引鍵，根據請求中的 [KeyUsage](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html#KMS-CreateKey-request-KeyUsage) 參數值，控制對 [CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html) 操作的存取。的有效值`KeyUsage`為 `ENCRYPT_DECRYPT`、`GENERATE_VERIFY_MAC`、 `SIGN_VERIFY`和 `KEY_AGREEMENT`。

例如，您只能在 `KeyUsage` 為 `ENCRYPT_DECRYPT` 時建立 KMS 金鑰，或在 `KeyUsage` 為 `SIGN_VERIFY` 時拒絕使用者許可。

下列範例 IAM 政策陳述式會使用 `kms:KeyUsage` 條件索引鍵，僅在 `KeyUsage` 為 `ENCRYPT_DECRYPT` 時才建立 KMS 金鑰。

```
{
  "Effect": "Allow",  
  "Action": "kms:CreateKey",
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:KeyUsage": "ENCRYPT_DECRYPT"
    }
  }
}
```

您也可以使用 `kms:KeyUsage` 條件索引鍵，根據操作中 KMS 金鑰的 `KeyUsage` 屬性控制對使用或管理 KMS 金鑰之操作的存取。操作必須是 *KMS 金鑰資源操作*，也就是授權特定 KMS 金鑰的操作。若要識別 KMS 金鑰資源操作，請在[動作與資源表](kms-api-permissions-reference.md#kms-api-permissions-reference-table)中尋找操作之 `Resources` 資料欄的 `KMS key` 值。

例如，下列 IAM 政策允許主體執行指定的 KMS 金鑰資源操作，但僅能使用帳戶中用於簽署和驗證的 KMS 金鑰。

```
{
  "Effect": "Allow",
  "Action": [
    "kms:CreateGrant",
    "kms:DescribeKey",
    "kms:GetPublicKey",
    "kms:ScheduleKeyDeletion"
  ],
  "Resource": "arn:aws:kms:us-west-2:111122223333:key/*",
  "Condition": {
    "StringEquals": {
      "kms:KeyUsage": "SIGN_VERIFY"
    }
  }
}
```

**另請參閱**
+ [kms:BypassPolicyLockoutSafetyCheck](#conditions-kms-bypass-policy-lockout-safety-check)
+ [kms: CustomerMasterKeyUsage (已被取代)](#conditions-kms-key-usage-replaced)
+ [kms:KeyOrigin](#conditions-kms-key-origin)
+ [kms:KeySpec](#conditions-kms-key-spec)

## kms:MacAlgorithm
<a name="conditions-kms-mac-algorithm"></a>


| AWS KMS 條件索引鍵 | 條件類型 | 值類型 | API 操作 | Policy type (政策類型) | 
| --- | --- | --- | --- | --- | 
|  `kms:MacAlgorithm`  |  String  | 單一值 | `GenerateMac``VerifyMac` |  金鑰政策和 IAM 政策  | 

您可以使用 `kms:MacAlgorithm` 條件金鑰，依據請求中的 `MacAlgorithm` 參數值，控制對 [GenerateMac](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateMac.html) 和 [VerifyMac](https://docs.aws.amazon.com/kms/latest/APIReference/API_VerifyMac.html) 操作的存取。

以下範例金鑰政策允許可擔任 `testers` 角色的使用者，僅可在請求中的 MAC 演算法為 `HMAC_SHA_384` 或 `HMAC_SHA_512` 時，使用 HMAC KMS 金鑰來產生及驗證 HMAC 標籤。此政策會使用兩個不同的政策陳述式，每個陳述式都有各自的條件。若您在單一條件陳述式中指定多個 MAC 演算法，則該條件會同時需要兩個演算法，而非僅任一個演算法。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:role/testers"
      },
      "Action": [
        "kms:GenerateMac",
        "kms:VerifyMac"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "kms:MacAlgorithm": "HMAC_SHA_384"
        }
      }
    },
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:role/testers"
      },
      "Action": [
        "kms:GenerateMac",
        "kms:VerifyMac"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "kms:MacAlgorithm": "HMAC_SHA_512"
        }
      }
    }
  ]
}
```

------

**另請參閱**
+ [kms:EncryptionAlgorithm](#conditions-kms-encryption-algorithm)
+ [kms:SigningAlgorithm](#conditions-kms-signing-algorithm)

## kms:MessageType
<a name="conditions-kms-message-type"></a>


| AWS KMS 條件索引鍵 | 條件類型 | 值類型 | API 操作 | Policy type (政策類型) | 
| --- | --- | --- | --- | --- | 
|  `kms:MessageType`  |  String  | 單一值 |  `Sign` `Verify`  | 金鑰政策和 IAM 政策 | 

根據請求中的 `MessageType` 參數值，`kms:MessageType` 條件索引鍵會控制對 [Sign](https://docs.aws.amazon.com/kms/latest/APIReference/API_Sign.html) 和 [Verify](https://docs.aws.amazon.com/kms/latest/APIReference/API_Verify.html) 操作的存取。`MessageType` 的有效值為 `RAW` 和 `DIGEST`。

例如，下列金鑰政策陳述式使用 `kms:MessageType` 條件索引鍵，以使用非對稱 KMS 金鑰簽署訊息，而非訊息摘要。

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/ExampleRole"
  },
  "Action": "kms:Sign",
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:MessageType": "RAW"
    }
  }
}
```

**另請參閱**
+ [kms:SigningAlgorithm](#conditions-kms-signing-algorithm)

## kms:MultiRegion
<a name="conditions-kms-multiregion"></a>


| AWS KMS 條件索引鍵 | 條件類型 | 值類型 | API 操作 | Policy type (政策類型) | 
| --- | --- | --- | --- | --- | 
|  `kms:MultiRegion`  |  Boolean  | 單一值 |  `CreateKey` KMS 金鑰資源操作  |  金鑰政策和 IAM 政策  | 

您可以使用此條件索引鍵，僅允許對單一區域金鑰的操作，或僅允許對[多區域金鑰](multi-region-keys-overview.md)的操作。`kms:MultiRegion` 條件金鑰會根據 KMS 金鑰的 `MultiRegion` 屬性值，控制對 KMS 金鑰上 AWS KMS 操作和 [CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html) 操作的存取。有效值為 `true` (多區域) 和 `false` (單一區域)。所有 KMS 金鑰都有 `MultiRegion` 屬性。

例如，下列 IAM 政策陳述式會使用 `kms:MultiRegion` 條件索引鍵，允許主體僅建立單一區域金鑰。

```
{
  "Effect": "Allow",
  "Action": "kms:CreateKey",
  "Resource": "*",
  "Condition": {
    "Bool": {
      "kms:MultiRegion": false
    }
  }
}
```

## kms:MultiRegionKeyType
<a name="conditions-kms-multiregion-key-type"></a>


| AWS KMS 條件索引鍵 | 條件類型 | 值類型 | API 操作 | Policy type (政策類型) | 
| --- | --- | --- | --- | --- | 
|  `kms:MultiRegionKeyType`  |  String  | 單一值 |  `CreateKey` KMS 金鑰資源操作  |  金鑰政策和 IAM 政策  | 

您可以使用此條件索引鍵，僅允許對[多區域主要金鑰](multi-region-keys-overview.md#mrk-primary-key)的操作，或僅允許對[多區域複本金鑰](multi-region-keys-overview.md#mrk-replica-key)的操作。`kms:MultiRegionKeyType` 條件金鑰會根據 KMS 金鑰的 `MultiRegionKeyType` 屬性，控制對 KMS 金鑰 AWS KMS 和 [CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html) 操作的存取。有效值為 `PRIMARY` 和 `REPLICA`。只有多區域金鑰具有 `MultiRegionKeyType` 屬性。

一般而言，您需要使用 IAM 政策中的 `kms:MultiRegionKeyType` 條件索引鍵，以控制對多個 KMS 金鑰的存取。不過，由於指定的多區域金鑰可以變更為主要或複本金鑰，因此您可能想要在金鑰政策中使用此條件，僅當特定的多區域金鑰是主要金鑰或複本金鑰時才允許操作。

例如，以下 IAM 政策陳述式使用 `kms:MultiRegionKeyType` 條件索引鍵，以允許主體僅對指定 AWS 帳戶中的多區域複本金鑰排程和取消金鑰刪除。

```
{
  "Effect": "Allow",
  "Action": [
    "kms:ScheduleKeyDeletion",
    "kms:CancelKeyDeletion"
  ],
  "Resource": "arn:aws:kms:*:111122223333:key/*",
  "Condition": {
    "StringEquals": {
      "kms:MultiRegionKeyType": "REPLICA"
    }
  }
}
```

若要允許或拒絕存取所有多區域金鑰，您可以將兩個值或 Null 值與 `kms:MultiRegionKeyType` 搭配使用。不過，會建議 [kms:MultiRegion](#conditions-kms-multiregion) 條件索引鍵用於此目的。

## kms:PrimaryRegion
<a name="conditions-kms-primary-region"></a>


| AWS KMS 條件索引鍵 | 條件類型 | 值類型 | API 操作 | Policy type (政策類型) | 
| --- | --- | --- | --- | --- | 
|  `kms:PrimaryRegion`  |  字串 (清單)  | 單一值 |  `UpdatePrimaryRegion`  |  金鑰政策和 IAM 政策  | 

您可以使用此條件索引鍵來限制 [UpdatePrimaryRegion](https://docs.aws.amazon.com/kms/latest/APIReference/API_UpdatePrimaryRegion.html) 操作中的目的地區域。這些 AWS 區域 可以託管您的多區域主索引鍵。

`kms:PrimaryRegion` 條件索引鍵會根據 `PrimaryRegion` 參數值控制對 [UpdatePrimaryRegion](https://docs.aws.amazon.com/kms/latest/APIReference/API_UpdatePrimaryRegion.html) 操作的存取。`PrimaryRegion` 參數會指定要提升為主要 AWS 區域 節點的[多區域複本金鑰](multi-region-keys-overview.md#mrk-replica-key)的 。條件的值是一或多個 AWS 區域 名稱，例如 `us-east-1`或 `ap-southeast-2`，或區域名稱模式，例如 `eu-*`

例如，以下金鑰政策陳述式使用 `kms:PrimaryRegion` 條件索引鍵，以允許主體將多重區域金鑰的主要區域更新為四個指定區域之一。

```
{
  "Effect": "Allow",
  "Action": "kms:UpdatePrimaryRegion",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/Developer"
  },
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:PrimaryRegion": [ 
         "us-east-1",
         "us-west-2",
         "eu-west-3",
         "ap-southeast-2"
      ]
    }
  }
}
```

## kms:ReEncryptOnSameKey
<a name="conditions-kms-reencrypt-on-same-key"></a>


| AWS KMS 條件索引鍵 | 條件類型 | 值類型 | API 操作 | Policy type (政策類型) | 
| --- | --- | --- | --- | --- | 
|  `kms:ReEncryptOnSameKey`  |  Boolean  | 單一值 |  `ReEncrypt`  |  金鑰政策和 IAM 政策  | 

您可以使用此條件索引鍵，根據請求指定的目的地 CMK 是否與原始加密所用的 KMS 金鑰相同，來控制對 [ReEncrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.html) 操作的存取。

例如，下列金鑰政策陳述式使用 `kms:ReEncryptOnSameKey` 條件索引鍵，只在目的地 CMK 與原始加密所用的 KMS 金鑰相同時，才可重新加密。

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/ExampleRole"
  },
  "Action": "kms:ReEncrypt*",
  "Resource": "*",
  "Condition": {
    "Bool": {
      "kms:ReEncryptOnSameKey": true
    }
  }
}
```

## kms:RequestAlias
<a name="conditions-kms-request-alias"></a>


| AWS KMS 條件索引鍵 | 條件類型 | 值類型 | API 操作 | Policy type (政策類型) | 
| --- | --- | --- | --- | --- | 
|  `kms:RequestAlias`  |  字串 (清單)  | 單一值 |  [密碼編譯操作](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)  |  金鑰政策和 IAM 政策  | 

您可以使用此條件索引鍵，僅當請求使用特定別名來識別 KMS 金鑰時，才允許操作。`kms:RequestAlias` 條件索引鍵可根據在請求中識別該 KMS 金鑰的[別名](kms-alias.md)，控制對密碼編譯操作、`GetPublicKey` 或 `DescribeKey` 中所使用 KMS 金鑰的存取。(此政策條件不會影響 [GenerateRandom](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateRandom.html) 操作，因為操作不會使用 KMS 金鑰或別名)。

此條件支援 [中的屬性型存取控制](abac.md) (ABAC) AWS KMS，可讓您根據 KMS 金鑰的標籤和別名來控制對 KMS 金鑰的存取。您可以使用標籤和別名，來允許或拒絕對 KMS 金鑰的存取，而無需變更政策或授予。如需詳細資訊，請參閱[適用於 的 ABAC AWS KMS](abac.md)。

若要在此政策條件中指定別名，請使用[別名名稱](concepts.md#key-id-alias-name)，例如 `alias/project-alpha`，或別名名稱模式，例如 `alias/*test*`。您不能指定此條件索引鍵值中的[別名 ARN](concepts.md#key-id-alias-ARN)。

若要滿足此條件，請求中的 `KeyId` 參數值必須為相符的別名名稱或別名 ARN。如果請求使用不同的[金鑰識別符](concepts.md#key-id)，則其不滿足條件，即使識別為相同的 KMS 金鑰。

例如，下列金鑰政策陳述式允許主體呼叫對 KMS 金鑰的 [GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) 操作。但是，僅當請求中的 `KeyId` 參數值為 `alias/finance-key` 或具有該別名名稱的別名 ARN，例如 `arn:aws:kms:us-west-2:111122223333:alias/finance-key`。

```
{
  "Sid": "Key policy using a request alias condition",
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/developer"
  },
  "Action": "kms:GenerateDataKey",
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:RequestAlias": "alias/finance-key"
    }
  }
}
```

您無法使用此條件索引鍵來控制對別名操作的存取，例如 [CreateAlias](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateAlias.html) 或 [DeleteAlias](https://docs.aws.amazon.com/kms/latest/APIReference/API_DeleteAlias.html)。如需控制對別名操作之存取的詳細資訊，請參閱 [控制對別名的存取](alias-access.md)。

## kms:ResourceAliases
<a name="conditions-kms-resource-aliases"></a>


| AWS KMS 條件索引鍵 | 條件類型 | 值類型 | API 操作 | Policy type (政策類型) | 
| --- | --- | --- | --- | --- | 
|  `kms:ResourceAliases`  |  字串 (清單)  | 多重值 | KMS 金鑰資源操作 |  僅限 IAM 政策  | 

使用此條件索引鍵，根據與 KMS 金鑰相關聯的[別名](kms-alias.md)，控制對 KMS 金鑰的存取。操作必須是 *KMS 金鑰資源操作*，也就是授權特定 KMS 金鑰的操作。若要識別 KMS 金鑰資源操作，請在[動作與資源表](kms-api-permissions-reference.md#kms-api-permissions-reference-table)中尋找操作之 `Resources` 資料欄的 `KMS key` 值。

此條件支援 AWS KMS中的屬性型存取控制 (ABAC)。透過 ABAC，您可以根據指派給 KMS 金鑰的標籤和與 KMS 金鑰相關聯的別名，來控制對 KMS 金鑰的存取。您可以使用標籤和別名，來允許或拒絕對 KMS 金鑰的存取，而無需變更政策或授予。如需詳細資訊，請參閱[適用於 的 ABAC AWS KMS](abac.md)。

別名在 AWS 帳戶 和 區域中必須是唯一的，但此條件可讓您控制對相同區域中多個 KMS 金鑰 （使用`StringLike`比較運算子） 的存取，或對不同帳戶中多個 KMS 金鑰 AWS 區域 的存取。

**注意**  
僅當 KMS 金鑰符合[每個 KMS 金鑰的別名](resource-limits.md#aliases-per-key)配額時，[kms:ResourceAliases](#conditions-kms-resource-aliases) 條件才會有效。如果 KMS 金鑰超過此配額，則會拒絕透過 `kms:ResourceAliases` 條件授權使用 KMS 金鑰的主體存取 KMS 金鑰。

若要在此政策條件中指定別名，請使用[別名名稱](concepts.md#key-id-alias-name)，例如 `alias/project-alpha`，或別名名稱模式，例如 `alias/*test*`。您不能指定此條件索引鍵值中的[別名 ARN](concepts.md#key-id-alias-ARN)。若要滿足條件，操作中使用的 KMS 金鑰必須具有指定的別名。在操作要求中是否識別或如何識別 KMS 金鑰並不重要。

這是多重值條件索引鍵，會將與 KMS 金鑰相關聯的一組別名與政策中的一組別名進行比較。若要判斷這些集合的比較方式，您必須提供政策條件中的 `ForAnyValue` 或 `ForAllValues` 集合運算子。如需集合運算子的詳細資訊，請參閱《IAM 使用者指南》中的[使用多個索引鍵和值](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_multi-value-conditions.html#reference_policies_multi-key-or-value-conditions)。
+ ForAnyValue：至少有一個與 KMS 金鑰相關聯的別名必須與政策條件中的別名相符。允許使用其他別名。如果 KMS 金鑰沒有別名，則不符合條件。
+ ForAllValues：與 KMS 金鑰關聯的每個別名都必須與政策中的別名相符。此集合運算子會將與 KMS 金鑰相關聯的別名限制為政策條件中的別名。它不需要任何別名，但會禁止未指定的別名。

例如，下列 IAM 政策陳述式允許主體在與別名 AWS 帳戶 相關聯的指定 中的任何 KMS 金鑰上呼叫 [GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) `finance-key` 操作。(受影響的 KMS 金鑰的金鑰政策也必須允許主體的帳戶使用這些金鑰來進行此操作。) 若要在可能與 KMS 金鑰相關聯的許多別名之一為 `alias/finance-key` 時滿足該條件，條件會使用 `ForAnyValue` 集合運算子。

由於 `kms:ResourceAliases` 條件是根據資源，而非請求，對於任何與 `finance-key` 別名相關聯的 KMS 金鑰的 `GenerateDataKey` 呼叫會成功，即使請求使用[金鑰 ID](concepts.md#key-id-key-id) 或[金鑰 ARN](concepts.md#key-id-key-ARN) 來識別 KMS 金鑰。

```
{
  "Sid": "AliasBasedIAMPolicy",
  "Effect": "Allow",
  "Action": "kms:GenerateDataKey",
  "Resource": [
    "arn:aws:kms:*:111122223333:key/*",
    "arn:aws:kms:*:444455556666:key/*"
  ],
  "Condition": {
    "ForAnyValue:StringEquals": {
      "kms:ResourceAliases": "alias/finance-key"
    }
  }
}
```

下列範例 IAM 政策陳述式允許主體啟用和停用 KMS 金鑰，但僅當 KMS 金鑰的所有別名都包含 "`Test`" 時。此政策陳述式使用兩個條件。具有 `ForAllValues` 集合運算子的條件需要所有與 KMS 金鑰相關聯的別名都包含「測試」。具有 `ForAnyValue` 集合運算子的條件需要 KMS 金鑰至少有一個具有「測試」的別名。沒有 `ForAnyValue` 條件時，此政策陳述式會允許主體使用沒有別名的 KMS 金鑰。

```
{
  "Sid": "AliasBasedIAMPolicy",
  "Effect": "Allow",
  "Action": [
    "kms:EnableKey",
    "kms:DisableKey"
  ],
  "Resource": "arn:aws:kms:*:111122223333:key/*",
  "Condition": {
    "ForAllValues:StringLike": {
      "kms:ResourceAliases": [
        "alias/*Test*"
      ]
    },
    "ForAnyValue:StringLike": {
      "kms:ResourceAliases": [
        "alias/*Test*"
      ]
    }
  }
}
```

## kms:ReplicaRegion
<a name="conditions-kms-replica-region"></a>


| AWS KMS 條件索引鍵 | 條件類型 | 值類型 | API 操作 | Policy type (政策類型) | 
| --- | --- | --- | --- | --- | 
|  `kms:ReplicaRegion`  |  字串 (清單)  | 單一值 |  `ReplicateKey`  |  金鑰政策和 IAM 政策  | 

您可以使用此條件金鑰來限制委託人可以複寫[多區域金鑰](multi-region-keys-overview.md) AWS 區域 的 。根據請求中的 [ReplicaRegion](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html#KMS-CreateGrant-request-RetiringPrincipal) 參數值，`kms:ReplicaRegion` 條件索引鍵可控制對 [ReplicateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html) 操作的存取。此參數指定為新[複本金鑰](multi-region-keys-overview.md#mrk-replica-key)指定 AWS 區域 。

條件的值是一或多個 AWS 區域 名稱，例如 `us-east-1`或 `ap-southeast-2`，或名稱模式，例如 `eu-*`。如需 AWS 區域 AWS KMS 支援的名稱清單，請參閱 中的[AWS Key Management Service 端點和配額](https://docs.aws.amazon.com/general/latest/gr/kms.html) AWS 一般參考。

例如，以下金鑰政策陳述式使用 `kms:ReplicaRegion` 條件索引鍵，僅在 `ReplicaRegion` 參數值為指定區域之一時，才允許主體呼叫 [ReplicateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReplicateKey.html) 操作。

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/Administrator"
  },
  "Action": "kms:ReplicateKey"
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:ReplicaRegion": [ 
         "us-east-1",
         "eu-west-3",
         "ap-southeast-2"
      ]
    }
  }
}
```

此條件索引鍵僅控制對 [ReplicateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReplicateKey.html) 操作的存取。若要控制對 [UpdatePrimaryRegion](https://docs.aws.amazon.com/kms/latest/APIReference/API_UpdatePrimaryRegion.html) 操作的存取，請使用 [kms:PrimaryRegion](#conditions-kms-primary-region) 條件索引鍵。

## kms:RetiringPrincipal
<a name="conditions-kms-retiring-principal"></a>


| AWS KMS 條件索引鍵 | 條件類型 | 值類型 | API 操作 | Policy type (政策類型) | 
| --- | --- | --- | --- | --- | 
|  `kms:RetiringPrincipal`  |  字串 (清單)  | 單一值 |  `CreateGrant`  |  金鑰政策和 IAM 政策  | 

您可以使用此條件索引鍵，根據請求中的 [RetiringPrincipal](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html#KMS-CreateGrant-request-RetiringPrincipal) 參數值，控制對 [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html) 操作的存取。例如，您可以只在 `CreateGrant` 請求中的 `RetiringPrincipal` 符合條件陳述式中的 `RetiringPrincipal` 時，才可建立授予來使用 KMS 金鑰。

若要指定淘汰委託人，請使用委託人的 AWS Amazon Resource Name (ARN)。有效的委託人包括 AWS 帳戶 IAM 使用者、IAM 角色、聯合身分使用者和擔任的角色使用者。如需主體 ARN 語法的說明，請參閱《[IAM 使用者指南》中的 IAM ARNs](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-arns)。 **

下列範例金鑰政策陳述式允許使用者為 KMS 金鑰建立授予。`kms:RetiringPrincipal` 條件索引鍵會將 許可限制為`CreateGrant`請求，其中授予中的淘汰委託人是 `LimitedAdminRole`。

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/ExampleRole"
  },
  "Action": "kms:CreateGrant",
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:RetiringPrincipal": "arn:aws:iam::111122223333:role/LimitedAdminRole"
    }
  }
}
```

**另請參閱**
+ [kms:GrantConstraintType](#conditions-kms-grant-constraint-type)
+ [kms:GrantIsForAWSResource](#conditions-kms-grant-is-for-aws-resource)
+ [kms:GrantOperations](#conditions-kms-grant-operations)
+ [kms:GranteePrincipal](#conditions-kms-grantee-principal)

## kms:RotationPeriodInDays
<a name="conditions-kms-rotation-period-in-days"></a>


| AWS KMS 條件索引鍵 | 條件類型 | 值類型 | API 操作 | Policy type (政策類型) | 
| --- | --- | --- | --- | --- | 
|  `kms:RotationPeriodInDays`  |  數值  | 單一值 |  `EnableKeyRotation`  |  金鑰政策和 IAM 政策  | 

您可以使用此條件索引鍵來限制主體可以在 [EnableKeyRotation](https://docs.aws.amazon.com/kms/latest/APIReference/API_EnableKeyRotation.html) 請求的 `RotationPeriodInDays` 參數中指定的值。

`RotationPeriodInDays` 指定每個自動金鑰輪換日期之間的天數。 AWS KMS 可讓您指定介於 90 到 2560 天的輪換期間，但您可以使用 `kms:RotationPeriodInDays`條件金鑰進一步限制輪換期間，例如強制執行有效範圍內的最短輪換期間。

例如，下列金鑰政策陳述式使用 `kms:RotationPeriodInDays` 條件金鑰，以防止主體在輪換期間小於或等於 180 天時啟用金鑰輪換。

```
{
  "Effect": "Deny",
  "Action": "kms:EnableKeyRotation",
  "Principal": "*",
  "Resource": "*",
  "Condition" : {
      "NumericLessThanEquals" : {
        "kms:RotationPeriodInDays" : "180"
      }
  }
}
```

## kms:ScheduleKeyDeletionPendingWindowInDays
<a name="conditions-kms-schedule-key-deletion-pending-window-in-days"></a>


| AWS KMS 條件索引鍵 | 條件類型 | 值類型 | API 操作 | Policy type (政策類型) | 
| --- | --- | --- | --- | --- | 
|  `kms:ScheduleKeyDeletionPendingWindowInDays`  |  數值  | 單一值 |  `ScheduleKeyDeletion`  |  金鑰政策和 IAM 政策  | 

您可利用此條件金鑰，針對主體對 [ScheduleKeyDeletion](https://docs.aws.amazon.com/kms/latest/APIReference/API_ScheduleKeyDeletion.html) 請求指定的 `PendingWindowInDays` 參數值加以限制。

`PendingWindowInDays` 指定刪除金鑰之前 AWS KMS 要等待的天數。 AWS KMS 可讓您指定 7 到 30 天的等待期間，但您可以使用 `kms:ScheduleKeyDeletionPendingWindowInDays`條件金鑰進一步限制等待期間，例如強制執行有效範圍內的最短等待期間。

例如，下列金鑰政策陳述式採用 `kms:ScheduleKeyDeletionPendingWindowInDays` 條件金鑰，以便防止主體在等待期間小於或等於 21 天時，排程刪除金鑰。

```
{
  "Effect": "Deny",
  "Action": "kms:ScheduleKeyDeletion",
  "Principal": "*",
  "Resource": "*",
  "Condition" : {
      "NumericLessThanEquals" : {
        "kms:ScheduleKeyDeletionPendingWindowInDays" : "21"
      }
  }
}
```

## kms:SigningAlgorithm
<a name="conditions-kms-signing-algorithm"></a>


| AWS KMS 條件索引鍵 | 條件類型 | 值類型 | API 操作 | Policy type (政策類型) | 
| --- | --- | --- | --- | --- | 
|  `kms:SigningAlgorithm`  |  String  | 單一值 |  `Sign`  `Verify`  |  金鑰政策和 IAM 政策  | 

根據請求中的 [SigningAlgorithm](https://docs.aws.amazon.com/kms/latest/APIReference/API_Sign.html#KMS-Sign-request-SigningAlgorithm) 參數值，您可以使用 `kms:SigningAlgorithm` 條件金鑰控制對 [Sign](https://docs.aws.amazon.com/kms/latest/APIReference/API_Sign.html) 和 [Verify](https://docs.aws.amazon.com/kms/latest/APIReference/API_Verify.html) 操作的存取。此條件金鑰不會影響在 外部執行的操作 AWS KMS，例如在 外部的非對稱 KMS 金鑰對中使用公有金鑰驗證簽章 AWS KMS。

下列範例金鑰政策允許可以擔任 `testers` 角色的使用者只有在請求所用的簽署演算法是 RSASSA\$1PSS 演算法 (例如 `RSASSA_PSS_SHA512`) 時，才能使用 KMS 金鑰簽署訊息。

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/testers"
  },
  "Action": "kms:Sign",
  "Resource": "*",
  "Condition": {
    "StringLike": {
      "kms:SigningAlgorithm": "RSASSA_PSS*"
    }
  }
}
```

**另請參閱**
+ [kms:EncryptionAlgorithm](#conditions-kms-encryption-algorithm)
+ [kms:MacAlgorithm](#conditions-kms-mac-algorithm)
+ [kms:MessageType](#conditions-kms-message-type)

## kms:ValidTo
<a name="conditions-kms-valid-to"></a>


| AWS KMS 條件索引鍵 | 條件類型 | 值類型 | API 操作 | Policy type (政策類型) | 
| --- | --- | --- | --- | --- | 
|  `kms:ValidTo`  |  時間戳記  | 單一值 |  `ImportKeyMaterial`  |  金鑰政策和 IAM 政策  | 

`kms:ValidTo` 條件索引鍵會根據請求中的 [ValidTo](https://docs.aws.amazon.com/kms/latest/APIReference/API_ImportKeyMaterial.html#KMS-ImportKeyMaterial-request-ValidTo) 參數值 (其決定了匯入金鑰材料的過期時間)，控制對 [ImportKeyMaterial](https://docs.aws.amazon.com/kms/latest/APIReference/API_ImportKeyMaterial.html) 操作的存取。這個值是以 [Unix 時間](https://en.wikipedia.org/wiki/Unix_time)表示。

在預設情況下，`ImportKeyMaterial` 請求需要 `ValidTo` 參數。不過，如果 [ExpirationModel](https://docs.aws.amazon.com/kms/latest/APIReference/API_ImportKeyMaterial.html#KMS-ImportKeyMaterial-request-ExpirationModel) 參數的值是 `KEY_MATERIAL_DOES_NOT_EXPIRE`，則 `ValidTo` 參數無效。您也可以使用 [kms:ExpirationModel](#conditions-kms-expiration-model) 條件金鑰來要求 `ExpirationModel` 參數或特定的參數值。

以下範例政策陳述式允許使用者將金鑰材料匯入 KMS 金鑰。`kms:ValidTo` 條件金鑰限制 `ImportKeyMaterial` 請求的許可，其中 `ValidTo` 值小於或等於 `1546257599.0` (2018 年 12 月 31 日下午 11:59:59)。

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/ExampleRole"
  },
  "Action": "kms:ImportKeyMaterial",
  "Resource": "*",
  "Condition": {
    "NumericLessThanEquals": {
      "kms:ValidTo": "1546257599.0"
    }
  }
}
```

**另請參閱**
+ [kms:ExpirationModel](#conditions-kms-expiration-model) 
+ [kms:WrappingAlgorithm](#conditions-kms-wrapping-algorithm)
+ [kms:WrappingKeySpec](#conditions-kms-wrapping-key-spec)

## kms:ViaService
<a name="conditions-kms-via-service"></a>


| AWS KMS 條件索引鍵 | 條件類型 | 值類型 | API 操作 | Policy type (政策類型) | 
| --- | --- | --- | --- | --- | 
|  `kms:ViaService`  |  String  | 單一值 |  KMS 金鑰資源操作  |  金鑰政策和 IAM 政策  | 

`kms:ViaService` 條件金鑰會將 KMS 金鑰的使用限制為來自指定 的請求 AWS 服務。此條件金鑰僅適用於[轉送存取工作階段](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_forward_access_sessions.html)。您可以在每個 `kms:ViaService` 條件金鑰中指定一或多個服務。操作必須是 *KMS 金鑰資源操作*，也就是授權特定 KMS 金鑰的操作。若要識別 KMS 金鑰資源操作，請在[動作與資源表](kms-api-permissions-reference.md#kms-api-permissions-reference-table)中尋找操作之 `Resources` 資料欄的 `KMS key` 值。

例如，以下金鑰政策陳述式使用 `kms:ViaService` 條件索引鍵，僅當代表 `ExampleRole` 的請求來自美國西部 (奧勒岡) 區域的 Amazon EC2 或 Amazon RDS 時，才會允許[客戶受管金鑰](concepts.md#customer-mgn-key)用於指定動作。

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/ExampleRole"
  },
  "Action": [
    "kms:Encrypt",
    "kms:Decrypt",
    "kms:ReEncrypt*",
    "kms:GenerateDataKey*",
    "kms:CreateGrant",
    "kms:ListGrants",
    "kms:DescribeKey"
  ],
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:ViaService": [
        "ec2.us-west-2.amazonaws.com",
        "rds.us-west-2.amazonaws.com"
      ]
    }
  }
}
```

您也可以使用 `kms:ViaService` 條件索引鍵，在請求來自特定的服務時，拒絕使用 KMS 金鑰的許可。例如，以下來自金鑰政策的陳述式使用 `kms:ViaService` 條件索引鍵，當代表 `ExampleRole` 的請求來自 AWS Lambda 時，防止將客戶受管金鑰用於 `Encrypt` 操作。

```
{
  "Effect": "Deny",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/ExampleRole"
  },
  "Action": [
    "kms:Encrypt"    
  ],
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:ViaService": [
          "lambda.us-west-2.amazonaws.com"
      ]
    }
  }
}
```

**重要**  
當您使用 `kms:ViaService` 條件索引鍵時，該服務會代表 AWS 帳戶中的主體提出請求。這些主體必須擁有以下許可：  
使用 KMS 金鑰的許可。主體需要授予這些許可給整合服務，以便該服務可以代表主體使用客戶受管金鑰。如需詳細資訊，請參閱[搭配 AWS 服務使用 AWS KMS 加密](service-integration.md)。
使用整合服務的許可。如需讓使用者存取與 整合之 AWS 服務的詳細資訊 AWS KMS，請參閱整合服務的文件。

所有 [AWS 受管金鑰](concepts.md#aws-managed-key) 在其金鑰政策文件中使用 `kms:ViaService` 條件索引鍵。只在請求是來自建立 KMS 金鑰的服務時，這個條件才僅允許將 KMS 金鑰用於這些請求。若要查看 的金鑰政策 AWS 受管金鑰，請使用 [GetKeyPolicy](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetKeyPolicy.html) 操作。

`kms:ViaService` 條件金鑰在 IAM 和金鑰政策陳述式中有效。您指定的服務必須[與 AWS KMS整合](https://aws.amazon.com/kms/features/#AWS_Service_Integration)，並支援 `kms:ViaService` 條件金鑰。

### 支援 `kms:ViaService` 條件金鑰的服務
<a name="viaService_table"></a>

下表列出與 整合 AWS 的服務， AWS KMS 並支援在客戶受管金鑰中使用 `kms:ViaService`條件金鑰 此表格中的服務可能無法在所有區域中使用。在所有 AWS 分割區中使用 AWS KMS ViaService `.amazonaws.com` 名稱的尾碼。

**注意**  
您可能需要水平或垂直捲動，才能查看此資料表中的所有資料。


| 服務名稱 | AWS KMS ViaService 名稱 | 
| --- | --- | 
| Amazon AI 操作 | aiops.AWS\$1region.amazonaws.com | 
| AWS App Runner | apprunner.AWS\$1region.amazonaws.com | 
| AWS AppFabric | appfabric.AWS\$1region.amazonaws.com | 
| Amazon AppFlow | appflow.AWS\$1region.amazonaws.com | 
| AWS Application Migration Service | mgn.AWS\$1region.amazonaws.com | 
| Amazon Athena | athena.AWS\$1region.amazonaws.com | 
| AWS Audit Manager | auditmanager.AWS\$1region.amazonaws.com | 
| Amazon Aurora | rds.AWS\$1region.amazonaws.com | 
| AWS Backup | backup.AWS\$1region.amazonaws.com | 
| AWS Backup 閘道 | backup-gateway.AWS\$1region.amazonaws.com | 
| Amazon Bedrock 模型複製 | bedrock.AWS\$1region.amazonaws.com | 
| Amazon Chime SDK | chimevoiceconnector.AWS\$1region.amazonaws.com | 
| AWS Clean Rooms ML | cleanrooms-ml.AWS\$1region.amazonaws.com | 
| AWS CodeArtifact | codeartifact.AWS\$1region.amazonaws.com | 
| Amazon CodeGuru Reviewer | codeguru-reviewer.AWS\$1region.amazonaws.com | 
| Amazon Comprehend | comprehend.AWS\$1region.amazonaws.com | 
| Amazon Connect | connect.AWS\$1region.amazonaws.com | 
| Amazon Connect Customer Profiles | profile.AWS\$1region.amazonaws.com | 
| Amazon Q in Connect | wisdom.AWS\$1region.amazonaws.com | 
| AWS Database Migration Service (AWS DMS) | dms.AWS\$1region.amazonaws.com | 
| AWS DeepRacer | deepracer.AWS\$1region.amazonaws.com | 
| AWS Directory Service | directoryservice.AWS\$1region.amazonaws.com | 
| Amazon DocumentDB | docdb-elastic.AWS\$1region.amazonaws.com | 
| Amazon DynamoDB | dynamodb.AWS\$1region.amazonaws.com | 
| Amazon EC2 Systems Manager (SSM) | ssm.AWS\$1region.amazonaws.com | 
| Amazon Elastic Block Store (Amazon EBS) | ec2.AWS\$1region.amazonaws.com (僅 EBS) | 
| Amazon Elastic Container Registry (Amazon ECR) | ecr.AWS\$1region.amazonaws.com | 
| Amazon Elastic File System (Amazon EFS) | elasticfilesystem.AWS\$1region.amazonaws.com | 
| Amazon ElastiCache |  在條件索引鍵值中均包含 ViaService 名稱： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/kms/latest/developerguide/conditions-kms.html)  | 
| AWS Elemental MediaTailor | mediatailor.AWS\$1region.amazonaws.com | 
| AWS 實體解析 | entityresolution.AWS\$1region.amazonaws.com | 
| Amazon EventBridge | events.AWS\$1region.amazonaws.com | 
| Amazon FinSpace | finspace.AWS\$1region.amazonaws.com | 
| Amazon Forecast | forecast.AWS\$1region.amazonaws.com | 
| Amazon FSx | fsx.AWS\$1region.amazonaws.com | 
| AWS Glue | glue.AWS\$1region.amazonaws.com | 
| AWS Ground Station | groundstation.AWS\$1region.amazonaws.com | 
| Amazon GuardDuty | malware-protection.AWS\$1region.amazonaws.com | 
| AWS HealthLake | healthlake.AWS\$1region.amazonaws.com | 
| AWS IoT SiteWise | iotsitewise.AWS\$1region.amazonaws.com | 
| Amazon Kendra | kendra.AWS\$1region.amazonaws.com | 
| Amazon Keyspaces (適用於 Apache Cassandra) | cassandra.AWS\$1region.amazonaws.com | 
| Amazon Kinesis | kinesis.AWS\$1region.amazonaws.com | 
| Amazon Data Firehose | firehose.AWS\$1region.amazonaws.com | 
| Amazon Kinesis Video Streams | kinesisvideo.AWS\$1region.amazonaws.com | 
| AWS Lambda | lambda.AWS\$1region.amazonaws.com | 
| Amazon Lex | lex.AWS\$1region.amazonaws.com | 
| AWS License Manager | license-manager.AWS\$1region.amazonaws.com | 
| Amazon Location Service | geo.AWS\$1region.amazonaws.com | 
| Amazon Lookout for Equipment | lookoutequipment.AWS\$1region.amazonaws.com | 
| Amazon Lookout for Metrics | lookoutmetrics.AWS\$1region.amazonaws.com | 
| Amazon Lookout for Vision | lookoutvision.AWS\$1region.amazonaws.com | 
| Amazon Macie | macie.AWS\$1region.amazonaws.com | 
| AWS Mainframe Modernization | m2.AWS\$1region.amazonaws.com | 
| AWS Mainframe Modernization 應用程式測試 | apptest.AWS\$1region.amazonaws.com | 
| Amazon Managed Blockchain | managedblockchain.AWS\$1region.amazonaws.com | 
| Amazon Managed Streaming for Apache Kafka (Amazon MSK) | kafka.AWS\$1region.amazonaws.com | 
| Amazon Managed Workflows for Apache Airflow (MWAA) | airflow.AWS\$1region.amazonaws.com | 
| Amazon MemoryDB | memorydb.AWS\$1region.amazonaws.com | 
| Amazon Monitron | monitron.AWS\$1region.amazonaws.com | 
| Amazon MQ | mq.AWS\$1region.amazonaws.com | 
| Amazon Neptune | rds.AWS\$1region.amazonaws.com | 
| Amazon Nimble Studio | nimble.AWS\$1region.amazonaws.com | 
| AWS HealthOmics | omics.AWS\$1region.amazonaws.com | 
| Amazon OpenSearch Service | es.AWS\$1region.amazonaws.com, aoss.AWS\$1region.amazonaws.com | 
| Amazon OpenSearch 自訂套件 | custom-packages.AWS\$1region.amazonaws.com | 
| AWS Proton | proton.AWS\$1region.amazonaws.com | 
| Amazon Quantum Ledger Database (Amazon QLDB) | qldb.AWS\$1region.amazonaws.com | 
| Amazon RDS Performance Insights | rds.AWS\$1region.amazonaws.com | 
| Amazon Redshift | redshift.AWS\$1region.amazonaws.com | 
| Amazon Redshift 查詢編輯器第 2 版 | sqlworkbench.AWS\$1region.amazonaws.com | 
| Amazon Redshift Serverless | redshift-serverless.AWS\$1region.amazonaws.com | 
| Amazon Rekognition | rekognition.AWS\$1region.amazonaws.com | 
| Amazon Relational Database Service (Amazon RDS) | rds.AWS\$1region.amazonaws.com | 
| Amazon Replicated Data Store | ards.AWS\$1region.amazonaws.com | 
| Amazon SageMaker AI | sagemaker.AWS\$1region.amazonaws.com | 
| AWS Secrets Manager | secretsmanager.AWS\$1region.amazonaws.com | 
| Amazon Security Lake | securitylake.AWS\$1region.amazonaws.com | 
| Amazon Simple Email Service (Amazon SES) | ses.AWS\$1region.amazonaws.com | 
| Amazon Simple Notification Service (Amazon SNS) | sns.AWS\$1region.amazonaws.com | 
| Amazon Simple Queue Service (Amazon SQS) | sqs.AWS\$1region.amazonaws.com | 
| Amazon Simple Storage Service (Amazon S3) | s3.AWS\$1region.amazonaws.com | 
| Amazon S3 Tables | s3tables.AWS\$1region.amazonaws.com | 
| AWS Snowball Edge | importexport.AWS\$1region.amazonaws.com | 
| AWS Step Functions | states.AWS\$1region.amazonaws.com | 
| AWS Storage Gateway | storagegateway.AWS\$1region.amazonaws.com | 
| AWS Systems Manager Incident Manager | ssm-incidents.AWS\$1region.amazonaws.com | 
| AWS Systems Manager Incident Manager 聯絡人 | ssm-contacts.AWS\$1region.amazonaws.com | 
| Amazon Timestream | timestream.AWS\$1region.amazonaws.com | 
| Amazon Translate | translate.AWS\$1region.amazonaws.com | 
| AWS Verified Access | verified-access.AWS\$1region.amazonaws.com | 
| Amazon WorkMail | workmail.AWS\$1region.amazonaws.com | 
| Amazon WorkSpaces | workspaces.AWS\$1region.amazonaws.com | 
| Amazon WorkSpaces 精簡型客戶端 | thinclient.AWS\$1region.amazonaws.com | 
| Amazon WorkSpaces Web | workspaces-web.AWS\$1region.amazonaws.com | 
| AWS X-Ray | xray.AWS\$1region.amazonaws.com | 

## kms:WrappingAlgorithm
<a name="conditions-kms-wrapping-algorithm"></a>


| AWS KMS 條件索引鍵 | 條件類型 | 值類型 | API 操作 | Policy type (政策類型) | 
| --- | --- | --- | --- | --- | 
|  `kms:WrappingAlgorithm`  |  String  | 單一值 |  `GetParametersForImport`  |  金鑰政策和 IAM 政策  | 

根據請求中的 [WrappingAlgorithm](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetParametersForImport.html#KMS-GetParametersForImport-request-WrappingAlgorithm) 參數值，此條件索引鍵會控制對 [GetParametersForImport](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetParametersForImport.html) 操作的存取。您可以使用此條件，要求主體在匯入過程中使用特定的演算法來加密金鑰材料。在指定不同的包裝演算法時，要求所需的公有金鑰和匯入符記會失敗。

下列範例金鑰政策陳述式會使用 `kms:WrappingAlgorithm` 條件索引鍵來提供範例使用者呼叫 `GetParametersForImport` 操作的​許可，但會防止他們使用 `RSAES_OAEP_SHA_1` 包裝演算法。`GetParametersForImport` 請求中的 `WrappingAlgorithm` 是 `RSAES_OAEP_SHA_1` 時，操作會失敗。

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/ExampleRole"
  },
  "Action": "kms:GetParametersForImport",
  "Resource": "*",
  "Condition": {
    "StringNotEquals": {
      "kms:WrappingAlgorithm": "RSAES_OAEP_SHA_1"
    }
  }
}
```

**另請參閱**
+ [kms:ExpirationModel](#conditions-kms-expiration-model)
+ [kms:ValidTo](#conditions-kms-valid-to)
+ [kms:WrappingKeySpec](#conditions-kms-wrapping-key-spec)

## kms:WrappingKeySpec
<a name="conditions-kms-wrapping-key-spec"></a>


| AWS KMS 條件索引鍵 | 條件類型 | 值類型 | API 操作 | Policy type (政策類型) | 
| --- | --- | --- | --- | --- | 
|  `kms:WrappingKeySpec`  |  String  | 單一值 |  `GetParametersForImport`  |  金鑰政策和 IAM 政策  | 

根據請求中的 [WrappingKeySpec](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetParametersForImport.html#KMS-GetParametersForImport-request-WrappingKeySpec) 參數值，此條件索引鍵會控制對 [GetParametersForImport](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetParametersForImport.html) 操作的存取。您可以使用此條件，要求主體在匯入過程中使用特定類型的公開金鑰。如果請求指定不同的金鑰類型，它會失敗。

由於 `WrappingKeySpec` 參數值的唯一有效值是 `RSA_2048`，防止使用者使用此值可以有效避免他們使用 `GetParametersForImport` 操作。

以下範例政策陳述式使用 `kms:WrappingAlgorithm` 條件金鑰，要求請求中的 `WrappingKeySpec` 必須是 `RSA_4096`。

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/ExampleRole"
  },
  "Action": "kms:GetParametersForImport",
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:WrappingKeySpec": "RSA_4096"
    }
  }
}
```

**另請參閱**
+ [kms:ExpirationModel](#conditions-kms-expiration-model)
+ [kms:ValidTo](#conditions-kms-valid-to)
+ [kms:WrappingAlgorithm](#conditions-kms-wrapping-algorithm)

# AWS KMS 已驗證平台的條件索引鍵
<a name="conditions-attestation"></a>

AWS KMS 提供條件金鑰以支援 [AWS Nitro Enclaves](https://docs.aws.amazon.com/enclaves/latest/user/) 和 NitroTPM 的密碼編譯認證。 AWS Nitro Enclaves 是一種 Amazon EC2 功能，可讓您建立稱為 [enclaves](https://docs.aws.amazon.com/enclaves/latest/user/nitro-enclave-concepts.html#term-enclave) 的隔離運算環境，以保護和處理高度敏感的資料。NitroTPM 將類似的認證功能擴展到 EC2 執行個體。

當您使用已簽署的證明文件呼叫 [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html)、[DeriveSharedSecret](https://docs.aws.amazon.com/kms/latest/APIReference/API_DeriveSharedSecret)、[GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html)、[GenerateDataKeyPair](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyPair.html) 或 [GenerateRandom](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateRandom.html) API 操作時，這些 APIs 會在證明文件的公有金鑰下加密回應中的純文字，並傳回加密文字而非純文字。僅當使用 enclave 的私有金鑰時才能解密此密文。如需詳細資訊，請參閱[中的密碼編譯認證支援 AWS KMS](cryptographic-attestation.md)。

**注意**  
如果您在建立金鑰時未提供 AWS KMS 金鑰政策， 會為您 AWS 建立一個金鑰政策。此[預設金鑰政策](key-policy-default.md)會授予 AWS 帳戶 擁有 KMS 金鑰完整存取金鑰的 ，並允許帳戶使用 IAM 政策來允許存取金鑰。此政策允許 [Decrypt ](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html)等所有動作。 AWS 建議[最低權限許可](least-privilege.md)將 的主體套用至您的 KMS 金鑰政策。您也可以[將 的 KMS 金鑰政策動作修改](key-policy-modifying.md)`kms:*`為 ，以限制存取`[NotAction:](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_notaction.html)kms:Decrypt`。

下列條件鍵可讓您根據已簽署的證明文件內容，限制這些操作的許可。允許 操作之前， 會將證明文件與這些 AWS KMS 條件索引鍵中的值 AWS KMS 進行比較。

# Nitro Enclaves 的條件索引鍵
<a name="conditions-nitro-enclave"></a>

下列條件索引鍵專屬於 Nitro Enclaves 認證：

## kms:RecipientAttestation:ImageSha384
<a name="conditions-kms-recipient-image-sha"></a>


| AWS KMS 條件金鑰 | 條件類型 | 值類型 | API 操作 | 政策類型 | 
| --- | --- | --- | --- | --- | 
|  `kms:RecipientAttestation:ImageSha384`  |  String  | 單一值 |  `Decrypt` `DeriveSharedSecret` `GenerateDataKey` `GenerateDataKeyPair` `GenerateRandom`  |  金鑰政策和 IAM 政策  | 

當請求中已簽署證明文件的映像摘要符合條件金鑰中的值時，`kms:RecipientAttestation:ImageSha384`條件金鑰`GenerateRandom`會使用 KMS 金鑰控制對 `Decrypt` `DeriveSharedSecret``GenerateDataKeyPair`、、`GenerateDataKey`、 和 的存取。`ImageSha384` 值對應證明文件的 PCR0。只有在請求中的 `Recipient` 參數指定 AWS Nitro enclave 的已簽署證明文件時，此條件金鑰才有效。

此值也包含在對 AWS KMS for Nitro enclaves 的請求的 [CloudTrail 事件](ct-nitro-enclave.md)中。

例如，下列金鑰政策陳述式允許`data-processing`角色將 KMS 金鑰用於 [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html)、[DeriveSharedSecret](https://docs.aws.amazon.com/kms/latest/APIReference/API_DeriveSharedSecret)、[GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html)、[GenerateDataKeyPair](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyPair.html) 和 [GenerateRandom](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateRandom.html) 操作。僅當請求中證明文件的影像摘要值 (PCR0) 符合條件的影像摘要值時，`kms:RecipientAttestation:ImageSha384` 條件金鑰才會允許操作。只有在請求中的 `Recipient` 參數指定 AWS Nitro enclave 的已簽署證明文件時，此條件金鑰才有效。

如果請求不包含來自 AWS Nitro enclave 的有效證明文件，則會拒絕許可，因為不符合此條件。

```
{
  "Sid" : "Enable enclave data processing",
  "Effect" : "Allow",
  "Principal" : {
    "AWS" : "arn:aws:iam::111122223333:role/data-processing"
  },
  "Action": [
    "kms:Decrypt",
    "kms:DeriveSharedSecret",
    "kms:GenerateDataKey",
    "kms:GenerateDataKeyPair",
    "kms:GenerateRandom"
  ],
  "Resource" : "*",
  "Condition": {
    "StringEqualsIgnoreCase": {
      "kms:RecipientAttestation:ImageSha384": "9fedcba8abcdef7abcdef6abcdef5abcdef4abcdef3abcdef2abcdef1abcdef1abcdef0abcdef1abcdef2abcdef3abcdef4abcdef5abcdef6abcdef7abcdef99"
    }
  }
}
```

## kms:RecipientAttestation:PCR<PCR\$1ID>
<a name="conditions-kms-recipient-pcrs"></a>


| AWS KMS 條件金鑰 | 條件類型 | 值類型 | API 操作 | 政策類型 | 
| --- | --- | --- | --- | --- | 
|  `kms:RecipientAttestation:PCR<PCR_ID>`  |  String  | 單一值 |  `Decrypt` `DeriveSharedSecret` `GenerateDataKey` `GenerateDataKeyPair` `GenerateRandom`  |  金鑰政策和 IAM 政策  | 

`kms:RecipientAttestation:PCR<PCR_ID>` 只有在請求中簽署的證明文件的平台組態註冊 PCRs) 符合條件金鑰中的 PCRs 時，條件金鑰才會控制對 `Decrypt``DeriveSharedSecret``GenerateDataKey``GenerateDataKeyPair`、、、 和 `GenerateRandom`的存取。只有在請求中的 `Recipient` 參數指定來自 AWS Nitro enclave 的已簽署證明文件時，此條件索引鍵才有效。

此值也包含在 [CloudTrail 事件中，這些事件](ct-nitro-enclave.md)代表對 AWS KMS 的 Nitro enclaves 請求。

若要指定 PCR 值，請使用以下格式。將 PCR ID 串連到條件索引鍵名稱。您可以指定識別[六個 enclave 測量](https://docs.aws.amazon.com/enclaves/latest/user/set-up-attestation.html#where)之一的 PCR ID，或是您為特定使用案例定義的自訂 PCR ID。PCR 值必須是最多 96 個位元組的小寫十六進位字串。

```
"kms:RecipientAttestation:PCRPCR_ID": "PCR_value"
```

例如，下列條件金鑰指定 PCR1 的特定值，對應於用於 enclave 與啟動程序處理的核心雜湊。

```
kms:RecipientAttestation:PCR1: "abc1abcdef2abcdef3abcdef4abcdef5abcdef6abcdef7abcdef8abcdef9abcdef8abcdef7abcdef6abcdef5abcdef4abcdef3abcdef2abcdef1abcdef0abcde"
```

下列範例金鑰政策陳述式允許 `data-processing` 角色利用 KMS 金鑰進行 [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) 操作。

僅當請求中已簽署證明文件中的 PCR1 值符合條件中的 `kms:RecipientAttestation:PCR1` 值時，本陳述式中的 `kms:RecipientAttestation:PCR` 條件索引鍵才會允許操作。使用 `StringEqualsIgnoreCase` 政策運算子要求 PCR 值不區分大小寫的比較。

如請求不含證明文件，則會因未滿足此條件而拒絕許可。

```
{
  "Sid" : "Enable enclave data processing",
  "Effect" : "Allow",
  "Principal" : {
    "AWS" : "arn:aws:iam::111122223333:role/data-processing"
  },
  "Action": "kms:Decrypt",
  "Resource" : "*",
  "Condition": {
    "StringEqualsIgnoreCase": {
      "kms:RecipientAttestation:PCR1": "abc1de4f2dcf774f6e3b679f62e5f120065b2e408dcea327bd1c9dddaea6664e7af7935581474844767453082c6f1586116376cede396a30a39a611b9aad7966c87"
    }
  }
}
```

# NitroTPM 的條件索引鍵
<a name="conditions-nitro-tpm"></a>

下列條件金鑰專屬於 NitroTPM 認證：

## kms:RecipientAttestation：NitroTPMPCR<PCR\$1ID>
<a name="conditions-kms-recipient-nitro-tpm-pcrs"></a>


| AWS KMS 條件金鑰 | 條件類型 | 值類型 | API 操作 | 政策類型 | 
| --- | --- | --- | --- | --- | 
|  `kms:RecipientAttestation:NitroTPMPCR<PCR_ID>`  |  String  | 單一值 |  `Decrypt` `DeriveSharedSecret` `GenerateDataKey` `GenerateDataKeyPair` `GenerateRandom`  |  金鑰政策和 IAM 政策  | 

`kms:RecipientAttestation:NitroTPMPCR<PCR_ID>` 只有在請求中簽署的證明文件的平台組態註冊 PCRs) 符合條件金鑰中的 PCRs 時，條件金鑰才會控制對 `GenerateDataKeyPair`、、`Decrypt``DeriveSharedSecret``GenerateDataKey`、 和 `GenerateRandom`的存取。只有在請求中的 `Recipient` 參數指定來自 NitroTPM 的已簽署證明文件時，此條件金鑰才有效。

此值也包含在代表對 AWS KMS for NitroTPM 請求的 [CloudTrail 事件](ct-nitro-tpm.md)中。

若要指定 PCR 值，請使用以下格式。將 PCR ID 串連到條件索引鍵名稱。PCR 值必須是最多 96 個位元組的小寫十六進位字串。

```
"kms:RecipientAttestation:NitroTPMPCRPCR_ID": "PCR_value"
```

例如，下列條件索引鍵會指定 PCR4 的特定值：

```
kms:RecipientAttestation:NitroTPMPCR4: "abc1abcdef2abcdef3abcdef4abcdef5abcdef6abcdef7abcdef8abcdef9abcdef8abcdef7abcdef6abcdef5abcdef4abcdef3abcdef2abcdef1abcdef0abcde"
```

下列範例金鑰政策陳述式允許 `data-processing` 角色利用 KMS 金鑰進行 [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) 操作。

此陳述式中的`kms:RecipientAttestation:NitroTPMPCR`條件索引鍵僅在請求中已簽署證明文件中的 PCR4 值符合條件中的`kms:RecipientAttestation:NitroTPMPCR4`值時，才允許 操作。使用 `StringEqualsIgnoreCase` 政策運算子要求 PCR 值不區分大小寫的比較。

如請求不含證明文件，則會因未滿足此條件而拒絕許可。

```
{
  "Sid" : "Enable NitroTPM data processing",
  "Effect" : "Allow",
  "Principal" : {
    "AWS" : "arn:aws:iam::111122223333:role/data-processing"
  },
  "Action": "kms:Decrypt",
  "Resource" : "*",
  "Condition": {
    "StringEqualsIgnoreCase": {
      "kms:RecipientAttestation:NitroTPMPCR4": "abc1de4f2dcf774f6e3b679f62e5f120065b2e408dcea327bd1c9dddaea6664e7af7935581474844767453082c6f1586116376cede396a30a39a611b9aad7966c87"
    }
  }
}
```

# 最低權限許可
<a name="least-privilege"></a>

由於 KMS 金鑰會保護敏感資訊，因此建議您遵循最低權限存取原則。當您定義金鑰政策時，委派執行任務所需的最低許可。只有在您計劃使用其他 IAM 政策進一步限制許可時，才允許 KMS 金鑰政策上的所有動作 (`kms:*`)。如果您計劃使用 IAM 政策管理許可，請限制誰能夠建立 IAM 政策並將其連接到 IAM 主體，並[監控政策變更](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudwatch-alarms-for-cloudtrail.html#cloudwatch-alarms-for-cloudtrail-iam-policy-changes)。

如果您同時允許金鑰政策和 IAM 政策中的所有動作 (`kms:*`)，委託人會同時擁有 KMS 金鑰的管理和使用許可。作為安全最佳實務，我們建議僅將這些許可委派給特定委託人。您可以透過在金鑰政策中明確命名主體，或限制 IAM 政策連接的主體來執行此操作。您也可以使用[條件金鑰](policy-conditions.md)來限制許可。例如，如果發出 API 呼叫的委託人具有條件規則中指定的標籤，您可以使用 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principaltag](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principaltag)來允許所有動作。

如需了解政策陳述式如何評估的說明 AWS，請參閱《*IAM 使用者指南*》中的[政策評估邏輯](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html)。我們建議您在撰寫政策之前檢閱此主題，以減少政策產生意外效果的機會，例如提供存取權給不應存取的主體。

**提示**  
在非生產環境中測試應用程式時，請使用 [IAM Access Analyzer](https://aws.amazon.com/iam/features/analyze-access/) 協助您將最低權限套用至 IAM 政策。

如果您使用 IAM 使用者而非 IAM 角色，強烈建議您啟用 AWS [多重要素驗證](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa.html) (MFA)，以減輕長期憑證的漏洞。您可以使用 MFA 執行下列操作：
+ 要求使用者在執行特殊權限動作之前，使用 MFA 驗證其登入資料，例如排程金鑰刪除。
+ 管理員帳戶密碼和 MFA 裝置在個人之間分割擁有權，以實作分割授權。

**進一步了解**
+ [AWS 任務函數的 受管政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions.html)
+ [用於寫入最低權限 IAM 政策的技巧](https://aws.amazon.com//blogs/security/techniques-for-writing-least-privilege-iam-policies/)

## 實作最低權限的許可
<a name="key-policy-least-privilege"></a>

當您授予 AWS 服務使用 KMS 金鑰的許可時，請確定該許可僅適用於服務必須代表您存取的資源。此最低權限策略有助於防止 AWS 在服務之間傳遞請求時，未經授權使用 KMS 金鑰。

若要實作最低權限策略，建議您使用 AWS KMS 加密內容條件金鑰和全域來源 ARN 或來源帳戶條件金鑰。

### 使用加密內容條件金鑰
<a name="least-privilege-encryption-context"></a>

在使用 AWS KMS 資源時實作最低權限許可的最有效方法是在政策中包含 [kms:EncryptionContext:*context-key*](conditions-kms.md#conditions-kms-encryption-context)或 [kms:EncryptionContextKeys](conditions-kms.md#conditions-kms-encryption-context-keys)條件金鑰，允許主體呼叫 AWS KMS 密碼編譯操作。這些條件金鑰特別有效，因為它們會將許可與在資源加密時繫結至加密文字的[加密內容](encrypt_context.md)建立關聯。

只有在政策陳述式中的動作為 [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html) AWS KMS 或採用 `EncryptionContext` 參數的對稱密碼編譯操作，例如 [GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) 或 [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) 等操作時，才能使用加密內容條件金鑰。(如需受支援操作的清單，請參閱 [kms:EncryptionContext:*context-key*](conditions-kms.md#conditions-kms-encryption-context) 或 [kms:EncryptionContextKeys](conditions-kms.md#conditions-kms-encryption-context-keys)。) 如果您使用這些條件金鑰來允許其他操作，例如 [DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html)，則許可會遭到拒絕。

將值設定為服務在加密資源時使用的加密內容。此資訊通常可在服務文件的「安全」一章中取得。例如，[AWS Proton 的加密內容](https://docs.aws.amazon.com/proton/latest/adminguide/data-protection.html#encryption-context)會識別 AWS Proton 資源及其相關聯的範本。[AWS Secrets Manager 加密內容](https://docs.aws.amazon.com/secretsmanager/latest/userguide/security-encryption.html#security-encryption-encryption-context)會識別秘密及其版本。[Amazon Location 的加密內容](https://docs.aws.amazon.com/location/latest/developerguide/encryption-at-rest.html#location-encryption-context)會識別追蹤器或收集。

下列範例金鑰政策陳述式允許 Amazon Location Service 代表授權使用者建立授予。此原則陳述式會藉由使用 [kms:ViaService](conditions-kms.md#conditions-kms-via-service)、[kms:CallerAccount](conditions-kms.md#conditions-kms-caller-account) 和 `kms:EncryptionContext:context-key` 條件金鑰，將許可綁定至特定追蹤器資源來限制許可。

```
{
  "Sid": "Allow Amazon Location to create grants on behalf of authorized users",
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/LocationTeam"
  },
  "Action": "kms:CreateGrant",
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:ViaService": "geo.us-west-2.amazonaws.com",
      "kms:CallerAccount": "111122223333",
      "kms:EncryptionContext:aws:geo:arn": "arn:aws:geo:us-west-2:111122223333:tracker/SAMPLE-Tracker"
    }
  }
}
```

### 使用 `aws:SourceArn` 或 `aws:SourceAccount` 條件金鑰
<a name="least-privilege-source-arn"></a>

當主要政策陳述式中的主體是 [AWS 服務主體時](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#principal-services)，強烈建議您除了 `kms:EncryptionContext:context-key` 條件金鑰之外，再使用 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn) 或 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount) 全域條件金鑰。只有在 AWS KMS 請求來自其他服務時，授權內容才會包含 ARN 和帳戶值 AWS 。這個條件組合會實作最低權限許可，並避免潛在的[混淆代理人案例](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)。服務主體通常不會用作金鑰政策中的主體，但某些 AWS 服務需要它 AWS CloudTrail，例如 。

若要使用 `aws:SourceArn` 或 `aws:SourceAccount` 全域條件金鑰，請將值設定為要加密之資源的 Amazon Resource Name (ARN) 或帳戶。例如，在給予 AWS CloudTrail 許可以加密追蹤的金鑰政策陳述式中，將 `aws:SourceArn` 的值設定為追蹤的 ARN。盡可能使用 `aws:SourceArn`，這更為具體。將值設定為 ARN 或具有萬用字元的 ARN 模式。如果您不知道資源的 ARN，請改為使用 `aws:SourceAccount`。

**注意**  
如果資源 ARN 包含 AWS KMS 金鑰政策中不允許的字元，則無法在`aws:SourceArn`條件金鑰的值中使用該資源 ARN。請改用 `aws:SourceAccount` 條件金鑰。如需有關金鑰政策文件規則的詳細資訊，請參閱[金鑰政策格式](key-policy-overview.md#key-policy-format)。

在下列範例金鑰政策中，取得許可的主體是 AWS CloudTrail 服務主體 `cloudtrail.amazonaws.com`。為了實作最低權限，此政策會使用 `aws:SourceArn` 和 `kms:EncryptionContext:context-key` 條件金鑰。政策陳述式允許 CloudTrail 使用 KMS 金鑰[產生資料金鑰](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html)，它可用來加密追蹤。獨立評估 `aws:SourceArn` 和 `kms:EncryptionContext:context-key` 條件。針對指定操作使用 KMS 金鑰的任何請求都必須滿足這兩個條件。

若要將服務的許可限制為範例帳戶 (111122223333) 和 `us-west-2` 區域中的 `finance` 追蹤，此政策陳述式會將 `aws:SourceArn` 條件金鑰設定為特定追蹤的 ARN。條件陳述式使用 [ArnEquals](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_ARN) 運算子來確保在比對時獨立評估 ARN 中的每個元素。此範例也會使用 `kms:EncryptionContext:context-key` 條件金鑰來限制特定帳戶和區域中追蹤的許可。

在使用此金鑰政策之前，請將範例帳戶 ID、區域和追蹤名稱取代為您帳戶的有效值。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowCloudTrailToEncryptLogs",
      "Effect": "Allow",
      "Principal": {
        "Service": "cloudtrail.amazonaws.com"
      },
      "Action": "kms:GenerateDataKey",
      "Resource": "*",
      "Condition": {
        "ArnEquals": {
          "aws:SourceArn": [
            "arn:aws:cloudtrail:us-west-2:111122223333:trail/finance"
          ]
        },
        "StringLike": {
          "kms:EncryptionContext:aws:cloudtrail:arn": [
            "arn:aws:cloudtrail:*:111122223333:trail/*"
          ]
        }
      }
    }
  ]
}
```

------

# 適用於 的 ABAC AWS KMS
<a name="abac"></a>

屬性型存取控制 (ABAC) 是一種授權策略，可根據屬性定義許可。 AWS KMS 支援 ABAC，可讓您根據與 KMS 金鑰相關聯的標籤和別名來控制對客戶受管金鑰的存取。在 中啟用 ABAC 的標籤和別名條件金鑰 AWS KMS 提供強大且靈活的方式，以授權主體使用 KMS 金鑰，而無需編輯政策或管理授予。但是，您應該謹慎使用這些功能，避免委託人意外被允許或拒絕存取。

如果您使用 ABAC，請注意管理標籤和別名的許可現在是存取控制許可。部署依存於標籤或別名的政策之前，請務必先知曉所有 KMS 金鑰上的現有標籤和別名。新增、刪除和更新別名，以及標記和取消標記金鑰時，請採取合理的預防措施。只將管理標籤和別名的許可授予需要的委託人，並限制他們可以管理的標籤和別名。

**備註**  
使用 ABAC for 時 AWS KMS，請謹慎授予主體管理標籤和別名的許可。變更標籤或別名可能會允許或拒絕 KMS 金鑰的許可。沒有變更主要政策或建立授權之許可的重要管理員可以控制 KMS 金鑰的存取，如果他們擁有管理標籤或別名的許可。  
可能最多需要五分鐘才能將標籤和別名變更體現在 KMS 金鑰授權上。最近的變更可能會在 API 操作中可見，然後才會影響授權。  
若要根據 KMS 金鑰的別名來控制對 KMS 金鑰的存取，您必須使用條件索引鍵。您不能使用別名來代表政策陳述式 `Resource` 元素中的 KMS 金鑰。當別名出現在 `Resource` 元素時，政策陳述式會套用至別名，而不是相關聯的 KMS 金鑰。

**進一步了解**
+ 如需 ABAC AWS KMS 支援的詳細資訊，包括範例，請參閱 [使用別名來控制對 KMS 金鑰的存取](alias-authorization.md)和 [使用標籤來控制對 KMS 金鑰的存取](tag-authorization.md)。
+ 如需使用標籤控制資源 AWS 存取的一般資訊，請參閱《*IAM 使用者指南*》中的 [ABAC 是什麼 AWS？](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction_attribute-based-access-control.html)以及[使用資源標籤控制 AWS 資源存取](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html)。

## 的 ABAC 條件金鑰 AWS KMS
<a name="about-abac-kms"></a>

若要根據 KMS 金鑰的標籤和別名授權存取，請在金鑰政策或 IAM 政策中使用下列條件索引鍵。


| ABAC 條件索引鍵 | Description | Policy type (政策類型) | AWS KMS 操作 | 
| --- | --- | --- | --- | 
| [aws:ResourceTag](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-resourcetag) | KMS 金鑰上的標籤 (鍵和值) 與政策中的標籤 (鍵和值) 或標籤模式相符 | 僅限 IAM 政策 | KMS 金鑰資源操作 2 | 
| [aws:RequestTag/*tag-key*](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-requesttag) | 請求中的標籤 (鍵和值) 與政策中的標籤 (鍵和值) 或標籤模式相符 | 金鑰政策和 IAM 政策 1 | [TagResource](https://docs.aws.amazon.com/kms/latest/APIReference/API_TagResource.html)、[UntagResource](https://docs.aws.amazon.com/kms/latest/APIReference/API_UntagResource.html) | 
| [aws:TagKeys](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-tagkeys) | 請求中的標籤索引鍵與政策中的標籤索引鍵相符 | 金鑰政策和 IAM 政策 1 | [TagResource](https://docs.aws.amazon.com/kms/latest/APIReference/API_TagResource.html)、[UntagResource](https://docs.aws.amazon.com/kms/latest/APIReference/API_UntagResource.html) | 
| [kms:ResourceAliases](conditions-kms.md#conditions-kms-resource-aliases) | 與 KMS 金鑰相關聯的別名符合政策中的別名或別名模式 | 僅限 IAM 政策 | KMS 金鑰資源操作 2 | 
| [kms:RequestAlias](conditions-kms.md#conditions-kms-request-alias) | 代表請求中 KMS 金鑰的別名與政策中的別名或別名模式相符。 | 金鑰政策和 IAM 政策 1 | [Cryptographic operations](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) | 

1 可在金鑰政策中使用的任何條件索引鍵也可以在 IAM 政策中使用，但只能在[金鑰政策允許](key-policy-default.md#key-policy-default-allow-root-enable-iam)的情形下。

2*KMS 金鑰資源操作*是針對特定 KMS 金鑰授權的操作。若要識別 KMS 金鑰資源操作，請在 [AWS KMS 許可表](kms-api-permissions-reference.md#kms-api-permissions-reference-table)中尋找 `Resources` 欄 KMS 金鑰的值，以執行操作。

例如，您可以使用這些條件索引鍵來建立下列政策。
+ 具有 `kms:ResourceAliases` 的 IAM 政策，允許使用具有特定別名或別名模式的 KMS 金鑰的許可。這與依賴標籤的政策略有不同：雖然您可以在政策中使用別名模式，但每個別名在 AWS 帳戶 和 區域中必須是唯一的。這可讓您將政策套用至一組精選 KMS 金鑰，而不會在政策陳述式中列出 KMS 金鑰的金鑰 ARN。若要為集合新增 KMS 金鑰或從中移除 KMS 金鑰，請變更 KMS 金鑰的別名。
+ 具有 `kms:RequestAlias` 的金鑰政策允許委託人在 `Encrypt` 操作中使用 KMS 金鑰，但僅在 `Encrypt` 請求會使用該別名來識別 KMS 金鑰的情形下。
+ 具有 `aws:ResourceTag/tag-key` 的 IAM 政策拒絕將 KMS 金鑰與特定標籤索引鍵和標籤值使用的許可。這可讓您將政策套用至一組精選 KMS 金鑰，而不會在政策陳述式中列出 KMS 金鑰的金鑰 ARN。若要為集合新增 KMS 金鑰或從中移除 KMS 金鑰，請標記或取消標記 KMS 金鑰。
+ 具有 `aws:RequestTag/tag-key` 的 IAM 政策允許委託人只刪除 `"Purpose"="Test"` KMS 金鑰標籤。
+ 具有 `aws:TagKeys` 的 IAM 政策拒絕使用 `Restricted` 標籤索引鍵標記或取消標記 KMS 金鑰的許可。

ABAC 讓存取管理具有靈活性和可擴展性。例如，您可以使用 `aws:ResourceTag/tag-key` 條件索引鍵來建立 IAM 政策，此政策只允許委託人在 KMS 金鑰具有 `Purpose=Test` 標籤時針對特定操作使用 KMS 金鑰。此政策適用於 AWS 帳戶所有區域中的所有 KMS 金鑰。

當連接至使用者或角色時，下列 IAM 政策允許委託人將所有現有的 KMS 金鑰與 `Purpose=Test` 標籤搭配用於指定的操作。若要將此存取權提供給新的或現有的 KMS 金鑰，則您不需要變更政策。只需將 `Purpose=Test` 標籤連接至 KMS 金鑰。同樣地，若要從具有 `Purpose=Test` 標籤的 KMS 金鑰中移除此存取權，請編輯或刪除標籤。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AliasBasedIAMPolicy",
      "Effect": "Allow",
      "Action": [
        "kms:Decrypt",
        "kms:Encrypt",
        "kms:GenerateDataKey*",
        "kms:DescribeKey"
      ],
      "Resource": "arn:aws:kms:*:111122223333:key/*",
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/Purpose": "Test"
        }
      }
    }
  ]
}
```

------

但是，如果您使用此功能，則請謹慎管理標籤和別名。新增、變更或刪除標籤或別名可能會意外允許或拒絕對 KMS 金鑰的存取。如果他們有管理標籤和別名的許可，則沒有變更主要政策或建立授予之許可的金鑰管理員可以控制對 KMS 金鑰的存取。為了減輕這種風險，請考慮[限制管理標籤的許可](tag-permissions.md#tag-permissions-conditions)和[別名](alias-access.md#alias-access-limiting)。例如，您可能只允許選取的委託人管理 `Purpose=Test` 標籤。如需詳細資訊，請參閱 [使用別名來控制對 KMS 金鑰的存取](alias-authorization.md) 和 [使用標籤來控制對 KMS 金鑰的存取](tag-authorization.md)。

## 標籤或別名？
<a name="abac-tag-or-alias"></a>

AWS KMS 支援具有標籤和別名的 ABAC。這兩種選項都提供靈活、可擴展的存取控制策略，但彼此略有不同。

您可以根據您的特定使用模式，決定 AWS 使用標籤或使用別名。例如，如果您已將標記許可指定給大多數管理員，則根據別名來控制授權策略可能會比較容易。或者，如果接近[每個 KMS 金鑰的別名](resource-limits.md#aliases-per-key)配額，則您可能會偏好基於標籤的授權策略。

以下是一般利益的優勢。

**標籤型存取控制的優勢**
+ 適用於不同資源類型的相同授權機制 AWS 。

  您可以使用相同的標籤或標籤金鑰來控制對多種資源類型的存取，例如 Amazon Relational Database Service (Amazon RDS) 叢集、Amazon Elastic Block Store (Amazon EBS) 磁碟區和 KMS 金鑰。此功能可啟用數種不同的授權模式，這些模式比傳統的角色型存取控制更靈活。
+ 授權一組 KMS 金鑰的存取權。

  您可以使用標籤來管理對相同 AWS 帳戶 和區域中一組 KMS 金鑰的存取。將相同的標籤或標籤金鑰指派給您選擇的 KMS 金鑰。然後建立以標籤或標籤索引鍵為基礎的簡單、易於維護的政策陳述式。若要為授權群組新增 KMS 金鑰或從中移除金鑰，請新增或移除標籤；您無需編輯政策。

**別名型存取控制的優勢**
+ 根據別名授權存取密碼編譯操作。

  大部分屬性的請求型政策條件，包括 [aws:RequestTag/*tag-key*](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-requesttag)，僅影響新增、編輯或刪除屬性的操作。但 [kms:RequestAlias](conditions-kms.md#conditions-kms-request-alias) 條件索引鍵根據用於識別請求中 KMS 金鑰的別名控制對密碼編譯操作的存取。例如，您可以授予委託人在 `Encrypt` 操作中使用 KMS 金鑰的許可，但僅在 `KeyId` 參數值為 `alias/restricted-key-1` 的情形下。若要滿足此條件，需要下列所有項目：
  + KMS 金鑰必須與該別名相關聯。
  + 請求必須使用別名來識別 KMS 金鑰。
  + 委託人必須擁有許可才能使用受限於 `kms:RequestAlias` 條件的 KMS 金鑰。

  如果您的應用程式通常使用別名名稱或別名 ARN 來引用 KMS 金鑰，則這會特別有用。
+ 提供非常有限的許可。

  別名在 AWS 帳戶 和 區域中必須是唯一的。因此，授予委託人根據別名存取 KMS 金鑰的許可，可能比為委託人授予標籤型存取權更嚴格。與別名不同的是，標籤可指派給相同帳戶和區域中的多個 KMS 金鑰。如果選擇，則您可以使用別名模式，例如 `alias/test*`，讓委託人可以存取相同帳戶和區域中的一組 KMS 金鑰。不過，允許或拒絕存取特定別名，實現了對 KMS 金鑰非常嚴格的控制。

# 對適用於 的 ABAC 進行故障診斷 AWS KMS
<a name="troubleshooting-tags-aliases"></a>

根據 KMS 金鑰的標籤和別名來控制對 KMS 金鑰的存取非常方便且功能強大。但是，很容易出現一些您想要防止的可預測錯誤。

## 存取因標籤變更而變更
<a name="access-denied-tag"></a>

如果刪除標籤或變更其值，則只能根據該標籤存取 KMS 金鑰的委託人將被拒絕存取 KMS 金鑰。當拒絕政策陳述式中包含的標籤新增至 KMS 金鑰時，也可能會發生這種情況。將政策相關標籤新增至 KMS 金鑰可以允許存取應被拒絕存取 KMS 金鑰的委託人。

例如，假設委託人可以根據 `Project=Alpha` 標籤存取 KMS 金鑰，例如下列範例 IAM 政策陳述式所提供的許可。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "IAMPolicyWithResourceTag",
      "Effect": "Allow",
      "Action": [
        "kms:GenerateDataKeyWithoutPlaintext",
        "kms:Decrypt"
      ],
      "Resource": "arn:aws:kms:ap-southeast-1:111122223333:key/*",
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/Project": "Alpha"
        }
      }
    }
  ]
}
```

------

如果從該 KMS 金鑰刪除標籤或標籤值變更，則委託人就不再具有使用 KMS 金鑰進行指定操作的許可。當委託人嘗試在使用客戶受管金鑰的 AWS 服務中讀取或寫入資料時，這可能會變得很明顯。若要追蹤標籤變更，請檢閱 [TagResource](ct-tagresource.md) 或 [UntagResource 項目](ct-untagresource.md)的 CloudTrail 日誌。

若要在不更新政策的情況下還原存取權，請變更 KMS 金鑰上的標籤。這個動作的影響最小，除了很短的一段時間，該動作會在整個 AWS KMS中有效。為了防止類似錯誤，請僅將標記和取消標記許可提供給需要的委託人，並將[其標記許可限制](tag-permissions.md#tag-permissions-conditions)為他們需要管理的標籤。變更標籤之前，搜尋政策可偵測依存於標籤的存取權，並在具有該標籤的所有區域中取得 KMS 金鑰。當特定標籤變更時，您可能會考慮建立 Amazon CloudWatch 警示。

## 存取因別名變更而變更
<a name="access-denied-alias"></a>

如果別名遭到刪除或與不同的 KMS 金鑰相關聯，則只能以該別名為基礎存取 KMS 金鑰的委託人將會被拒絕存取 KMS 金鑰。當與 KMS 金鑰相關聯的別名包含在拒絕政策陳述式中時，也可能會發生這種情況。將政策相關別名新增至 KMS 金鑰也可以允許存取應被拒絕存取 KMS 金鑰的委託人。

例如，下列 IAM 政策陳述式使用 [kms:ResourceAliases](conditions-kms.md#conditions-kms-resource-aliases) 條件索引鍵，以允許使用任何指定的別名存取帳戶中不同區域的 KMS 金鑰。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AliasBasedIAMPolicy",
      "Effect": "Allow",
      "Action": [
        "kms:List*",
        "kms:Describe*",
        "kms:Decrypt"
      ],
      "Resource": "arn:aws:kms:*:111122223333:key/*",
      "Condition": {
        "ForAnyValue:StringEquals": {
          "kms:ResourceAliases": [
            "alias/ProjectAlpha",
            "alias/ProjectAlpha_Test",
            "alias/ProjectAlpha_Dev"
          ]
        }
      }
    }
  ]
}
```

------

若要追蹤別名變更，請檢閱 CloudTrail 日誌，以取得 [CreateAlias](ct-createalias.md)、[UpdateAlias](ct-updatealias.md) 和 [DeleteAlias](ct-deletealias.md) 項目。

若要在不更新政策的情況下還原存取權，請變更與 KMS 金鑰相關聯的別名。由於每個別名只能與帳戶和區域中的一個 KMS 金鑰相關聯，因此管理別名會比管理標籤困難。還原某個 KMS 金鑰上的某些委託人的存取，可以拒絕相同或其他委託人存取不同的 KMS 金鑰。

若要避免發生此錯誤，請僅將別名管理許可提供給需要的委託人，並將[其別名管理許可](alias-access.md#alias-access-limiting)限制為需要管理的別名。在更新或刪除別名之前，搜尋政策以偵測取決於別名的存取權，並在與別名相關聯的所有區域中尋找 KMS 金鑰。

## 因別名配額而拒絕存取
<a name="access-denied-alias-quota"></a>

如果 KMS 金鑰超過該帳戶和區域中[每個 KMS 金鑰別名](resource-limits.md#aliases-per-key)的預設配額，則已授權透過 [kms:ResourceAliases](conditions-kms.md#conditions-kms-resource-aliases) 條件使用 KMS 金鑰的使用者會遇到 `AccessDenied` 例外狀況。

若要還原存取權，請刪除與 KMS 金鑰相關聯的別名，使其符合配額。或者使用替代機制，讓使用者存取 KMS 金鑰。

## 延遲的授權變更
<a name="tag-alias-auth-delay"></a>

您對標籤和別名所做的變更可能需要最長五分鐘才會體現在 KMS 金鑰授權上。因此，標籤或別名變更可能會反映在 API 操作的回應中，然後才會影響授權。此延遲可能比影響大多數 AWS KMS 操作的短暫最終一致性延遲更長。

例如，您可能擁有 IAM 政策，允許特定委託人將任何 KMS 金鑰與 `"Purpose"="Test"` 標籤搭配使用。然後，您將 `"Purpose"="Test"` 標籤新增至 KMS 金鑰。雖然 [TagResource](https://docs.aws.amazon.com/kms/latest/APIReference/API_TagResource.html) 操作已完成，[ListResourceTags](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListResourceTags.html) 回應會確認標籤已指派給 KMS 金鑰，但委託人最多可能在五分鐘內無法存取 KMS 金鑰。

若要防止錯誤，請將此預期延遲建置到您的程式碼中。

## 因別名更新而失敗的請求
<a name="failed-requests"></a>

當更新別名時，您會將現有的別名關聯至不同的 KMS 金鑰。

指定[別名名稱](concepts.md#key-id-alias-name)或[別名 ARN](concepts.md#key-id-alias-ARN) [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) 和 [ReEncrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.html) 請求可能會失敗，因為別名現在與未加密文字的 KMS 金鑰相關聯。這種情況通常會傳回 `IncorrectKeyException` 或 `NotFoundException`。或者，如果請求沒有 `KeyId` 或 `DestinationKeyId` 參數，則操作可能會失敗，並顯示 `AccessDenied` 例外狀況，因為呼叫者不再具有加密文字之 KMS 金鑰的存取權。

您可以透過查看 CloudTrail 日誌來取得 [CreateAlias](ct-createalias.md)、[UpdateAlias](ct-updatealias.md) 和 [DeleteAlias](ct-deletealias.md) 項目，從而追蹤變更。您也可以使用 [ListAliases](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListAliases.html) 回應中 `LastUpdatedDate` 欄位的值來偵測變更。

例如，下列 [ListAliases](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListAliases.html) 範例回應顯示了 `kms:ResourceAliases` 條件中 `ProjectAlpha_Test` 別名已更新。因此，具有別名型存取權的委託人會失去對先前關聯 KMS 金鑰的存取權。相反地，他們可以存取新關聯的 KMS 金鑰。

```
$ aws kms list-aliases --query 'Aliases[?starts_with(AliasName, `alias/ProjectAlpha`)]'

{
    "Aliases": [
        {
            "AliasName": "alias/ProjectAlpha_Test",
            "AliasArn": "arn:aws:kms:us-west-2:111122223333:alias/ProjectAlpha_Test",
            "TargetKeyId": "0987dcba-09fe-87dc-65ba-ab0987654321",
            "CreationDate": 1566518783.394,
            "LastUpdatedDate": 1605308931.903
        },
        {
            "AliasName": "alias/ProjectAlpha_Restricted",
            "AliasArn": "arn:aws:kms:us-west-2:111122223333:alias/ProjectAlpha_Restricted",
            "TargetKeyId": "1234abcd-12ab-34cd-56ef-1234567890ab",
            "CreationDate": 1553410800.010,
            "LastUpdatedDate": 1553410800.010
        }
    ]
}
```

這項變更的補救措施並不簡單。您可以再次更新別名，將別名與原始 KMS 金鑰相關聯。不過，在採取行動之前，您需要考慮該變更對目前相關聯 KMS 金鑰的影響。如果委託人在密碼編譯操作中使用後一個 KMS 金鑰，則他們可能需要繼續存取該金鑰。在此情形下，您可能想要更新政策，以確保委託人擁有使用這兩個 KMS 金鑰的許可。

您可以避免這樣的錯誤：在更新別名之前，搜尋政策以偵測取決於別名的存取權。然後在與別名相關聯的所有區域中取得 KMS 金鑰。請僅將別名管理許可提供給需要的委託人，並將[其別名管理許可](alias-access.md#alias-access-limiting)限制為需要管理的別名。

# 的 RBAC AWS KMS
<a name="rbac"></a>

角色型存取控制 (RBAC) 是一種授權策略，僅提供使用者執行其任務所需的許可，而無其他功能。 AWS KMS 支援 RBAC，可讓您透過在金鑰[政策中指定金鑰用量的精細許可來控制對金鑰](key-policies.md)的存取。金鑰政策會指定資源、動作、效果、主體和選用條件，以授予對金鑰的存取權。

若要在 中實作 RBAC AWS KMS，我們建議區隔金鑰使用者和金鑰管理員的許可。

------
#### [ Key users ]

下列金鑰政策範例允許 `ExampleUserRole` IAM 角色使用 KMS 金鑰。

```
{
            "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": "*"
  }
```

 您的金鑰使用者可能需要比本範例中的使用者更少的許可。僅指派使用者所需的許可。使用下列問題來協助您進一步精簡許可。
+ 哪些 IAM 主體 （角色或使用者） 需要存取金鑰？
+ 每個委託人需要使用 金鑰執行哪些動作？ 例如，委託人是否只需要加密和簽署許可？
+ 使用者是人類還是 AWS 服務？ 如果是 AWS 服務，您可以使用 [條件金鑰](conditions-kms.md#conditions-kms-via-service)將金鑰用量限制為特定 AWS 服務。

------
#### [ Key administrators ]



下列金鑰政策範例允許 IAM `ExampleAdminRole` 角色管理 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"
            ],
            "Resource": "*"
    }
```

 在此範例中，您的金鑰管理員可能需要比管理員更少的許可。僅指派金鑰管理員所需的許可。

------

僅提供使用者履行其角色所需的許可。使用者的許可可能會因在測試或生產環境中使用金鑰而有所不同。如果您在特定非生產環境中使用較不嚴格的許可，請實作程序來測試政策，然後再發佈至生產環境。

**進一步了解**
+ [IAM 身分 （使用者、使用者群組和角色）](https://docs.aws.amazon.com/IAM/latest/UserGuide/id.html)
+ [存取控制的類型](https://docs.aws.amazon.com/prescriptive-guidance/latest/saas-multitenant-api-access-authorization/access-control-types.html)

# 允許其他帳戶中的使用者使用 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 操作可能會有所不同。如需詳細資訊，請參閱服務文件。

# 控制對多區域金鑰的存取
<a name="multi-region-keys-auth"></a>

您可以在合規、災難復原和備份案例中使用多區域金鑰，而單一區域金鑰會比較複雜。不過，由於多區域金鑰的安全屬性與單一區域金鑰的安全屬性有很大的不同，所以建議在授權建立、管理和使用多區域金鑰時謹慎使用。

**注意**  
在 `Resource` 欄位包含萬用字元的現有 IAM 政策陳述式，現在會同時套用至單一區域和多區域金鑰。若要將其限制為單一區域 KMS 金鑰或多區域金鑰，請使用 [kms:MultiRegion](conditions-kms.md#conditions-kms-multiregion) 條件索引鍵。

使用您的授權工具來防止在任何單一區域足夠的情況下建立和使用多區域金鑰。允許主體僅將多區域金鑰複寫至需要它們 AWS 區域 的 。只將多區域金鑰的許可授予需要這些金鑰的委託人，並且僅為需要這些金鑰的任務授予。

您可以使用金鑰政策、IAM 政策和授權，允許 IAM 主體管理和使用您 中的多區域金鑰 AWS 帳戶。每個多區域金鑰都是具有唯一金鑰 ARN 和金鑰政策的獨立資源。您需要為每個金鑰建立和維護金鑰政策，並確保新的和現有的 IAM 政策會實作您的授權策略。

若要支援多區域金鑰， AWS KMS 會使用 IAM 服務連結角色。這個角色為 AWS KMS 提供其所需的許可，以同步[共用屬性](multi-region-keys-overview.md#mrk-sync-properties)。如需詳細資訊，請參閱[授權 AWS KMS 同步多區域金鑰](multi-region-auth-slr.md)。

**Topics**
+ [多區域金鑰的授權基礎知識](#multi-region-auth-about)
+ [授權多區域主要管理員和使用者](#multi-region-auth-users)

## 多區域金鑰的授權基礎知識
<a name="multi-region-auth-about"></a>

針對多區域金鑰設計金鑰政策和 IAM 政策時，請考慮下列政策。
+ **金鑰政策** – 每個多區域金鑰都是獨立的 KMS 金鑰資源，具有其自己的[金鑰政策](key-policies.md)。您可以將相同或不同的金鑰政策套用至相關多區域金鑰集合中的每個金鑰。金鑰政策*不是*多區域金鑰的[共用屬性](multi-region-keys-overview.md#mrk-sync-properties)。 AWS KMS 不會在相關的多區域金鑰之間複製或同步金鑰政策。

  當您在 AWS KMS 主控台中建立複本金鑰時，主控台會顯示主金鑰的目前金鑰政策，以方便使用。您可以使用此金鑰政策，加以編輯，或刪除並取代。但即使您接受主金鑰政策不變， AWS KMS 也不會同步政策。例如，如果您變更主要金鑰的金鑰政策，複本金鑰的金鑰政策會保持不變。
+ **預設金鑰政策** – 當您使用 [CreateKey](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateKey.html) 和 `ReplicateKey` 操作建立多區域金鑰時，會套用[預設金鑰政策](key-policy-default.md)，除非您在請求中指定金鑰政策。這與套用至單一區域金鑰的預設金鑰政策相同。
+ **IAM 政策** – 與所有 KMS 金鑰一樣，您可以使用 IAM 政策來控制多區域金鑰的存取，僅當[金鑰政策允許](key-policy-default.md#key-policy-default-allow-root-enable-iam)時。根據 AWS 區域 預設，[IAM 政策](iam-policies.md)適用於所有 。不過，您可以使用條件索引鍵，例如 [aws:RequestedRegion](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-requestedregion)，以限制特定區域的許可。

  若要建立主要金鑰和複本金鑰，委託人必須在 IAM 政策中具有 `kms:CreateKey` 許可，該許可會套用至建立金鑰的區域。
+ **授予** - AWS KMS [授予](grants.md)是區域性的。每個授予都允許一個 KMS 金鑰的許可。您可以使用授予來允許多區域主要金鑰或複本金鑰的許可。但是，您無法使用單一授予來允許多個 KMS 金鑰的許可，即使這些金鑰是相關的多區域金鑰。
+ **金鑰 ARN** – 每個多區域金鑰都有[唯一金鑰 ARN](mrk-how-it-works.md)。相關多區域金鑰的金鑰 ARN 具有相同的分割區、帳戶和金鑰 ID，但區域不同。

  若要將 IAM 政策陳述式套用至特定的多區域金鑰，請使用其金鑰 ARN 或包含區域的金鑰 ARN 模式。若要將 IAM 政策陳述式套用到所有相關的多區域金鑰，請在 ARN 的區域元素中使用萬用字元 (\$1)，如下列範例所示。

  ```
  {
    "Effect": "Allow",  
    "Action": [
      "kms:Describe*",
      "kms:List*"
    ],
    "Resource": {
        "arn:aws:kms:*::111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab"
    }
  }
  ```

  若要將政策陳述式套用至 中的所有多區域金鑰 AWS 帳戶，您可以使用 [kms:MultiRegion](conditions-kms.md#conditions-kms-multiregion) 政策條件或包含獨特`mrk-`字首的金鑰 ID 模式。
+ **服務連結角色** – 建立多區域主要金鑰的委託人必須具有 [iam:CreateServiceLinkedRole](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateServiceLinkedRole.html) 許可。

  若要同步相關多區域金鑰的共用屬性， AWS KMS 會擔任 IAM [服務連結角色](multi-region-auth-slr.md)。每當您 AWS KMS 建立多區域主金鑰時， 會在 AWS 帳戶 中建立服務連結角色。(如果角色存在， AWS KMS 會重新建立角色，這沒有任何有害的影響。) 角色在所有區域都有效。若要允許 AWS KMS 建立 （或重新建立） 服務連結角色，建立多區域主金鑰的主體必須具有 [iam：CreateServiceLinkedRole](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateServiceLinkedRole.html) 許可。

## 授權多區域主要管理員和使用者
<a name="multi-region-auth-users"></a>

建立和管理多區域金鑰的委託人需要在主要區域和複本區域中的下列許可：
+ `kms:CreateKey`
+ `kms:ReplicateKey`
+ `kms:UpdatePrimaryRegion`
+ `iam:CreateServiceLinkedRole`

### 建立主要金鑰
<a name="mrk-auth-create-primary"></a>

若要[建立多區域主要金鑰](create-primary-keys.md)，委託人需要 IAM 政策中的 [kms:CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html) 和 [iam:CreateServiceLinkedRole](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateServiceLinkedRole.html) 許可，IAM 政策在主要金鑰的區域中有效。擁有這些許可的委託人可以建立單一區域和多區域金鑰，除非您限制其許可。

`iam:CreateServiceLinkedRole` 許可允許 AWS KMS 建立 [**AWSServiceRoleForKeyManagementServiceMultiRegionKeys** 角色](multi-region-auth-slr.md)，以同步相關多區域金鑰的[共用屬性](multi-region-keys-overview.md#mrk-sync-properties)。

例如，此 IAM 政策允許主體建立多區域金鑰、連接這些金鑰的政策，以及多區域金鑰的服務連結角色。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement":{
      "Action": [
        "kms:CreateKey",
        "iam:CreateServiceLinkedRole"
      ],
      "Effect":"Allow",
      "Resource":"*"
  }
}
```

------

若要允許或拒絕建立多區域主要金鑰的許可，請使用 [kms:MultiRegion](conditions-kms.md#conditions-kms-multiregion) 條件索引鍵。有效值為 `true` (多區域金鑰) 或 `false` (單一區域金鑰)。例如，下列 IAM 政策陳述式會使用具有 `kms:MultiRegion` 條件索引鍵的 `Deny` 動作，以防止委託人建立多區域金鑰。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement":{
      "Action":"kms:CreateKey",
      "Effect":"Deny",
      "Resource":"*",
      "Condition": {
          "Bool": {
            "kms:MultiRegion": true
          }
      }
  }
}
```

------

### 複寫金鑰
<a name="mrk-auth-replicate"></a>

若要[建立多區域複本金鑰](#mrk-auth-replicate)，則委託人需要下列許可：
+  主要金鑰之金鑰政策中的 [kms:ReplicateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReplicateKey.html) 許可。
+ 在複本金鑰區域中有效之 IAM 政策中的 [kms:CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html) 許可。

允許這些許可時請小心謹慎。其允許委託人建立 KMS 金鑰，以及授權其使用的金鑰政策。`kms:ReplicateKey` 許可還授權在 AWS KMS範圍內跨區域邊界傳輸金鑰材料。

若要限制可複寫多區域金鑰 AWS 區域 的 ，請使用 [kms:ReplicaRegion](conditions-kms.md#conditions-kms-replica-region) 條件金鑰。它只限制 `kms:ReplicateKey` 許可。否則，它沒有影響。例如，下列金鑰政策允許委託人複寫該主要金鑰，但僅限於指定區域中。

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/Administrator"
  },
  "Action": "kms:ReplicateKey",
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:ReplicaRegion": [
         "us-east-1",
         "eu-west-3",
         "ap-southeast-2"
      ]
    }
  }
}
```

### 更新主要區域
<a name="mrk-auth-update"></a>

授權的委託人可以將複本金鑰轉換為主要金鑰，這會將先前的主要金鑰變更為複本。這個動作稱為[更新主要區域](multi-region-update.md)。要更新主要區域，委託人需要兩個區域的 [kms:UpdatePrimaryRegion](https://docs.aws.amazon.com/kms/latest/APIReference/API_UpdatePrimaryRegion.html) 許可。您可以在金鑰政策或 IAM 政策中提供這些許可。
+ 主要金鑰上的 `kms:UpdatePrimaryRegion`。此許可必須在主要金鑰區域有效。
+ 複本金鑰上的 `kms:UpdatePrimaryRegion`。此許可必須在複本金鑰區域中生效。

例如，下列金鑰政策會為可以擔任管理員角色的使用者提供許可，以更新 KMS 金鑰的主要區域。此 KMS 金鑰可以是此操作中的主要金鑰或複本金鑰。

```
{
  "Effect": "Allow",
  "Resource": "*",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/Administrator"
  },
  "Action": "kms:UpdatePrimaryRegion"
}
```

若要限制可託管主索引鍵 AWS 區域 的 ，請使用 [kms:PrimaryRegion](conditions-kms.md#conditions-kms-primary-region) 條件索引鍵。例如，下列 IAM 政策陳述式允許主體更新 中多區域金鑰的主要區域 AWS 帳戶，但只有在新的主要區域是其中一個指定的區域時。

```
{
  "Effect": "Allow",  
  "Action": "kms:UpdatePrimaryRegion",
  "Resource": {
      "arn:aws:kms:*:111122223333:key/*"
  },
  "Condition": {
    "StringEquals": {
      "kms:PrimaryRegion": [ 
         "us-west-2",
         "sa-east-1",
         "ap-southeast-1"
      ]
    }
  }
}
```

### 使用和管理多區域金鑰
<a name="mrk-auth-using"></a>

根據預設，在 AWS 帳戶 和區域中擁有使用和管理 KMS 金鑰之許可的委託人也具有使用和管理多區域金鑰的許可。不過，您可以使用 [kms:MultiRegion](conditions-kms.md#conditions-kms-multiregion) 條件索引鍵，只允許單一區域索引鍵或僅允許多區域索引鍵。或者使用 [kms:MultiRegionKeyType](conditions-kms.md#conditions-kms-multiregion-key-type) 條件索引鍵，只允許多區域主要金鑰或只允許複本金鑰。兩個條件索引鍵都會控制對 [CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html) 操作和使用現有 KMS 金鑰之任何操作 (例如，[Encrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Encrypt.html) 或 [EnableKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_EnableKey.html)) 的存取。

下列範例 IAM 政策陳述式使用 `kms:MultiRegion` 條件索引鍵，以防止委託人使用或管理任何多區域金鑰。

```
{
  "Effect": "Deny",  
  "Action": "kms:*",
  "Resource": "*",
  "Condition": {
    "Bool": "kms:MultiRegion": true
  }
}
```

此範例 IAM 政策陳述式使用 `kms:MultiRegionKeyType` 條件，以允許委託人排程和取消金鑰刪除，但僅限於多區域複本金鑰。

```
{
  "Effect": "Allow",  
  "Action": [
    "kms:ScheduleKeyDeletion",
    "kms:CancelKeyDeletion"
  ],
  "Resource": {
      "arn:aws:kms:us-west-2:111122223333:key/*"
  },
  "Condition": {
    "StringEquals": "kms:MultiRegionKeyType": "REPLICA"
  }
}
```

# 判斷對 的存取 AWS KMS keys
<a name="determining-access"></a>

若要判斷目前可存取 的人員或內容的完整範圍 AWS KMS key，您必須檢查 KMS 金鑰的金鑰政策、適用於 KMS 金鑰的所有[授予](grants.md)，以及可能的所有 AWS Identity and Access Management (IAM) 政策。您可以這樣做來判斷 KMS 金鑰的潛在使用範圍，可協助您符合規範或稽核要求。您可以善用下列主題，藉此產生目前有權存取 KMS 金鑰的 AWS 主體 (身分) 完整清單。

**Topics**
+ [檢查金鑰政策](determining-access-key-policy.md)
+ [檢查 IAM 政策](determining-access-iam-policies.md)
+ [檢查授與](determining-access-grants.md)

# 檢查金鑰政策
<a name="determining-access-key-policy"></a>

[金鑰政策](key-policies.md)是控制對 KMS 金鑰之存取的主要方式。每個 KMS 金鑰只有一個金鑰政策。

當金鑰政策包含[預設金鑰政策](key-policy-default.md#key-policy-default-allow-root-enable-iam)時，金鑰政策可讓帳戶中的 IAM 管理員使用 IAM 政策控制 KMS 金鑰的存取。此外，如果金鑰政策授權[另一個 AWS 帳戶](key-policy-modifying-external-accounts.md) 使用 KMS 金鑰，則外部帳戶的 IAM 管理員可以使用 IAM 政策委派這些許可。請[檢查 IAM 政策](determining-access-iam-policies.md)，以判斷可存取 KMS 金鑰之主體的完整清單。

若要檢視 AWS KMS [客戶受管金鑰](concepts.md#customer-mgn-key)或[AWS 受管金鑰](concepts.md#aws-managed-key)帳戶中的金鑰政策，請使用 AWS KMS API 中的 AWS 管理主控台 或 [GetKeyPolicy](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetKeyPolicy.html) 操作。若要檢視金鑰政策，您必須具有 KMS 金鑰的 `kms:GetKeyPolicy` 許可。如需檢視 KMS 金鑰之金鑰政策的說明，請參閱 [檢視金鑰政策](key-policy-viewing.md)。

檢查金鑰政策文件並記下在各政策陳述式 `Principal` 元素中指定的所有主體。在具有 `Allow`效果的政策陳述 AWS 帳戶 式中，IAM 使用者、IAM 角色和 `Principal`元素中的 可以存取此 KMS 金鑰。

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

以下範例使用[預設金鑰政策](key-policy-default.md)中的政策陳述式來示範如何執行此操作。

**Example 政策陳述式 1**  

```
{
  "Sid": "Enable IAM User Permissions",
  "Effect": "Allow",
  "Principal": {"AWS": "arn:aws:iam::111122223333:root"},
  "Action": "kms:*",
  "Resource": "*"
}
```
在政策陳述式 1 中， `arn:aws:iam::111122223333:root` 是參考 AWS 帳戶 111122223333 [AWS 的帳戶委託人](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#principal-accounts)。(其不是帳戶根使用者。) 根據預設，當您使用 建立新的 KMS 金鑰，或以程式設計方式建立新的 KMS 金鑰，但不提供金鑰政策時 AWS 管理主控台，金鑰政策文件中會包含像這樣的政策陳述式。  
金鑰政策文件具有允許存取 的陳述式， AWS 帳戶 可讓[帳戶中的 IAM 政策允許存取 KMS 金鑰](key-policy-default.md#key-policy-default-allow-root-enable-iam)。這表示帳戶中的使用者和角色可能可以存取 KMS 金鑰，即使他們未在金鑰政策文件中被明確列為主體。請注意檢查 AWS 帳戶 所有列為主體的 中的所有 [IAM 政策](determining-access-iam-policies.md)，以判斷它們是否允許存取此 KMS 金鑰。

**Example 政策陳述式 2**  

```
{
  "Sid": "Allow access for Key Administrators",
  "Effect": "Allow",
  "Principal": {"AWS": "arn:aws:iam::111122223333:role/KMSKeyAdmins"},
  "Action": [
    "kms:Describe*",
    "kms:Put*",
    "kms:Create*",
    "kms:Update*",
    "kms:Enable*",
    "kms:Revoke*",
    "kms:List*",
    "kms:Disable*",
    "kms:Get*",
    "kms:Delete*",
    "kms:ScheduleKeyDeletion",
    "kms:CancelKeyDeletion"
  ],
  "Resource": "*"
}
```
在政策陳述式 2 中， `arn:aws:iam::111122223333:role/KMSKeyAdmins`是指名為 KMSKeyAdmins in AWS 帳戶 111122223333 的 IAM 角色。被授權擔任此角色的使用者可以執行政策陳述式中所列的動作，這些是用於管理 KMS 金鑰的管理動作。

**Example 政策陳述式 3**  

```
{
  "Sid": "Allow use of the key",
  "Effect": "Allow",
  "Principal": {"AWS": "arn:aws:iam::111122223333:role/EncryptionApp"},
  "Action": [
    "kms:DescribeKey",
    "kms:GenerateDataKey*",
    "kms:Encrypt",
    "kms:ReEncrypt*",
    "kms:Decrypt"
  ],
  "Resource": "*"
}
```
在政策陳述式 3 中， `arn:aws:iam::111122223333:role/EncryptionApp`是指名為 EncryptionApp in AWS 帳戶 111122223333 的 IAM 角色。被授權擔任此角色的主體可以執行政策陳述式中所列的動作，包括對稱加密 KMS 金鑰的[密碼編譯操作](kms-cryptography.md#cryptographic-operations)。

**Example 政策陳述式 4**  

```
{
  "Sid": "Allow attachment of persistent resources",
  "Effect": "Allow",
  "Principal": {"AWS": "arn:aws:iam::111122223333:role/EncryptionApp"},
  "Action": [
    "kms:ListGrants",
    "kms:CreateGrant",
    "kms:RevokeGrant"
  ],
  "Resource": "*",
  "Condition": {"Bool": {"kms:GrantIsForAWSResource": true}}
}
```
在政策陳述式 4 中， `arn:aws:iam::111122223333:role/EncryptionApp`是指名為 EncryptionApp in AWS 帳戶 111122223333 的 IAM 角色。被授權擔任此角色的主體能夠執行政策陳述式中所列的動作。當這些動作結合**範例政策陳述式 3** 中允許的動作時，是委派 KMS 金鑰的使用給大部分[與 AWS KMS整合的AWS 服務](service-integration.md) (尤其是使用[授予](grants.md)的服務) 的必要動作。`Condition` 元素中的 [kms:GrantIsForAWSResource](conditions-kms.md#conditions-kms-grant-is-for-aws-resource) 值可確保僅當委派代表是與 整合 AWS KMS 並使用授權的 AWS 服務時，才允許委派。

若要了解在金鑰政策文件中指定主體的所有不同方法，請參閱《[IAM 使用者指南](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html#Principal_specifying)》中的 *Specifying a Principal* (指定主體)。

若要進一步了解 AWS KMS 金鑰政策，請參閱 [中的金鑰政策 AWS KMS](key-policies.md)。

# 檢查 IAM 政策
<a name="determining-access-iam-policies"></a>

除了金鑰政策和授予之外，您也可以使用 [IAM 政策](iam-policies.md)，以允許存取 KMS 金鑰。如需金鑰政策與 IAM 政策如何同時運作的相關資訊，請參閱 [故障診斷 AWS KMS 許可](policy-evaluation.md)。

若要判斷哪些主體目前可透過 IAM 政策存取 KMS 金鑰，您可以使用以瀏覽器為基礎的 [IAM 政策模擬器](https://policysim.aws.amazon.com/)工具，或者可以提出請求至 IAM API。

**Contents**
+ [使用 IAM 政策模擬器來檢查 IAM 政策](#determining-access-iam-policy-simulator)
+ [使用 IAM API 檢查 IAM 政策](#determining-access-iam-api)

## 使用 IAM 政策模擬器來檢查 IAM 政策
<a name="determining-access-iam-policy-simulator"></a>

IAM 政策模擬器可協助您了解哪些原則有權限透過 IAM 政策來存取 KMS 金鑰。

**若要使用 IAM 政策模擬器來以判斷是否可存取 KMS 金鑰**

1. 登入 ， AWS 管理主控台 然後在 開啟 IAM 政策模擬器[https://policysim.aws.amazon.com/](https://policysim.aws.amazon.com/)。

1. 在**使用者、群組和角色**窗格，選擇您想要模擬所屬政策的使用者、群組或角色。

1. (選用) 清除任何您想要從模擬中刪除的政策旁的核取方塊。若要模擬所有政策，請保持勾選所有政策。

1. 在 **Policy Simulator** (政策模擬器) 窗格中，執行下列動作：

   1. 在 **Select service (選取服務)** 中，選擇 **Key Management Service (金鑰管理服務)**。

   1. 若要模擬特定 AWS KMS 動作，請在**選取動作**中選擇要模擬的動作。若要模擬所有 AWS KMS 動作，請選擇**全選**。

1. (選用) 政策模擬器根據預設將模擬所有對 KMS 金鑰的存取。若要模擬存取特定 KMS 金鑰，請選擇 **Simulation Settings (模擬設定)**，接著輸入要模擬之 KMS 金鑰的 Amazon Resource Name (ARN)。

1. 選擇 **Run Simulation (執行模擬)**。

您可在 **Results** (結果) 部分查看模擬結果。對於 AWS 帳戶中的每個 IAM 使用者、群組和角色，請重複步驟 2 到步驟 6。

## 使用 IAM API 檢查 IAM 政策
<a name="determining-access-iam-api"></a>

您可以使用 IAM API 來以程式設計方式檢查 IAM 政策。以下步驟提供執行此操作方法的一般概述：

1. 對於金鑰政策中 AWS 帳戶 列為主體的每個 （即此格式指定的每個[AWS 帳戶主體](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#principal-accounts)：`"Principal": {"AWS": "arn:aws:iam::111122223333:root"}`)，請使用 IAM API 中的 [ListUsers](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListUsers.html) 和 [ListRoles](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListRoles.html) 操作來取得帳戶中的所有使用者和角色。

1. 對於清單中的每個使用者和角色，請使用 IAM API 中的 [SimulatePrincipalPolicy](https://docs.aws.amazon.com/IAM/latest/APIReference/API_SimulatePrincipalPolicy.html) 操作，以下列參數傳遞：
   + 針對 `PolicySourceArn`，請指定清單中使用者或角色的 Amazon Resource Name (ARN)。您只能為每個 `SimulatePrincipalPolicy` 請求指定一個 `PolicySourceArn`，因此您必須多次呼叫此操作，針對清單中的每個使用者與角色各呼叫一次。
   + 針對`ActionNames`清單，指定要模擬的每個 AWS KMS API 動作。若要模擬所有 AWS KMS API 動作，請使用 `kms:*`。若要測試個別 AWS KMS API 動作，請在每個 API 動作前面加上 "`kms:`"，例如 "`kms:ListKeys`"。如需 AWS KMS API 動作的完整清單，請參閱 *AWS Key Management Service API 參考*中的[動作](https://docs.aws.amazon.com/kms/latest/APIReference/API_Operations.html)。
   + (選用) 若要判斷使用者或角色是否可以存取特定 KMS 金鑰，請使用 `ResourceArns` 參數來指定 KMS 金鑰的 Amazon Resource Name (ARN) 清單。若要判斷使用者或角色是否可以存取任何 KMS 金鑰，請忽略 `ResourceArns` 參數。

IAM 將以下列評估決定來回應每個 `SimulatePrincipalPolicy` 請求：`allowed`、`explicitDeny` 或 `implicitDeny`。對於包含 評估決策的每個回應`allowed`，回應會包含允許的特定 AWS KMS API 操作的名稱。還會包含評估時所使用的 KMS 金鑰的 ARN (如果有)。

# 檢查授與
<a name="determining-access-grants"></a>

授予是進階機制，用於指定您或與 整合的 AWS 服務 AWS KMS 可以使用的許可，以指定 KMS 金鑰的使用方式和時間。授予會連接到 KMS 金鑰，而且每個授予包含獲得使用 KMS 金鑰之許可的主體以及允許的操作清單。授與是金鑰政策的替代選項，適用於特定的使用案例。如需詳細資訊，請參閱[在 中授予 AWS KMS](grants.md)。

若要取得 KMS 金鑰的授予清單，請使用 AWS KMS [ListGrants](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListGrants.html) 操作。您可以檢查 KMS 金鑰的授予，以判斷何人或何物目前具有透過這些授予使用 KMS 金鑰的存取權。例如，以下是從 AWS CLI中 [list-grants](https://docs.aws.amazon.com/cli/latest/reference/kms/list-grants.html) 命令取得的 JSON 授予表示。

```
{"Grants": [{
  "Operations": ["Decrypt"],
  "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
  "Name": "0d8aa621-43ef-4657-b29c-3752c41dc132",
  "RetiringPrincipal": "arn:aws:iam::123456789012:root",
  "GranteePrincipal": "arn:aws:sts::111122223333:assumed-role/aws:ec2-infrastructure/i-5d476fab",
  "GrantId": "dc716f53c93acacf291b1540de3e5a232b76256c83b2ecb22cdefa26576a2d3e",
  "IssuingAccount": "arn:aws:iam::111122223333:root",
  "CreationDate": 1.444151834E9,
  "Constraints": {"EncryptionContextSubset": {"aws:ebs:id": "vol-5cccfb4e"}}
}]}
```

若要了解何人或何物具有使用 KMS 金鑰的存取權，請查看 `"GranteePrincipal"` 元素。在上述範例中，承授者主體是與 EC2 執行個體 i-5d476fab 相關聯的擔任角色使用者。EC2 基礎設施使用此角色，將加密的 EBS 磁碟區 vol-5cccfb4e 連接到執行個體。在這種情況下，EC2 基礎設施角色有許可使用 KMS 金鑰，因為您之前建立受此 KMS 金鑰保護的加密 EBS 磁碟區。然後，您將此磁碟區連接到 EC2 執行個體。

以下是從 AWS CLI中 [list-grants](https://docs.aws.amazon.com/cli/latest/reference/kms/list-grants.html) 命令取得的另一個範例 JSON 授予表示。在下列範例中，承授者委託人是另一個 AWS 帳戶。

```
{"Grants": [{
  "Operations": ["Encrypt"],
  "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
  "Name": "",
  "GranteePrincipal": "arn:aws:iam::444455556666:root",
  "GrantId": "f271e8328717f8bde5d03f4981f06a6b3fc18bcae2da12ac38bd9186e7925d11",
  "IssuingAccount": "arn:aws:iam::111122223333:root",
  "CreationDate": 1.444151269E9
}]}
```

# 加密內容
<a name="encrypt_context"></a>

**注意**  
您不能使用[非對稱 KMS 金鑰](symmetric-asymmetric.md)或 [HMAC KMS 金鑰](hmac.md)在密碼編譯操作中指定加密內容。非對稱演算法和 MAC 演算法不支援加密內容。

具有[對稱加密 KMS 金鑰](symm-asymm-choose-key-spec.md#symmetric-cmks)的全 AWS KMS [加密操作](kms-cryptography.md#cryptographic-operations)接受*加密內容*，這是一組選用的非私密金鑰/值對，可包含有關資料的其他內容資訊。您可以在 中的`Encrypt`操作中插入加密內容 AWS KMS ，以增強 AWS KMS API 解密呼叫的授權和可稽核性。 AWS KMS 會使用加密內容做為額外的驗證資料 (AAD)，以支援驗證加密。加密內容以密碼編譯方式繫結至加密文字，因此需要相同的加密內容才能解密資料。

加密內容不是秘密，也不被加密。它會以純文字出現在 [AWS CloudTrail Logs](logging-using-cloudtrail.md) 中，因此您可以使用它來識別和分類密碼編譯操作。您的加密內容不應包含敏感資訊。建議在您的加密內容中描述要加密或解密的資料。例如，當您加密檔案時，您可以使用檔案路徑的一部分作為加密內容。

```
"encryptionContext": {
    "department": "10103.0"
}
```

例如，加密使用 [Amazon Elastic Block Store](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AmazonEBS.html) (Amazon EBS) [CreateSnapshot](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateSnapshot.html) 操作建立的磁碟區和快照時，Amazon EBS 會使用磁碟區 ID 作為加密內容值。

```
"encryptionContext": {
  "aws:ebs:id": "vol-abcde12345abc1234"
}
```

您也可以使用加密內容來精簡或限制您帳戶中對 AWS KMS keys 的存取。您可以使用加密內容[做為授與中的限制](grants.md)，以及做為*[政策陳述式中的條件](policy-conditions.md)*。加密內容金鑰及其值可以是使用 的任意字串`aws`。這些值會對比[AWS 產生的標籤](https://docs.aws.amazon.com/tag-editor/latest/userguide/best-practices-and-strats.html#tag-conventions)，例如 [aws：cloudformation：stack-name](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-resource-tags.html)。如需詳細資訊，請參閱[kms:EncryptionContext:*context-key*](conditions-kms.md#conditions-kms-encryption-context) 

若要了解如何使用加密內容來保護加密資料的完整性，請參閱 AWS 安全部落格中的文章[如何使用 AWS Key Management Service 和 EncryptionContext 來保護加密資料的完整性](https://aws.amazon.com/blogs/security/how-to-protect-the-integrity-of-your-encrypted-data-by-using-aws-key-management-service-and-encryptioncontext/)。

## 加密內容規則
<a name="encryption-context-rules"></a>

AWS KMS 針對加密內容金鑰和值強制執行下列規則。
+ 加密內容對中的金鑰和值必須是簡單的常值字串。如果您使用不同的類型，例如整數或浮點數， AWS KMS 會將它解譯為字串。
+ 加密內容中的金鑰和值可以包含 Unicode 字元。如果加密內容包含金鑰政策或 IAM 政策中不允許的字元，則您將無法在政策條件金鑰中指定加密內容，例如 [`kms:EncryptionContext:context-key`](conditions-kms.md#conditions-kms-encryption-context) 和 [`kms:EncryptionContextKeys`](conditions-kms.md#conditions-kms-encryption-context-keys)。如需有關金鑰政策文件規則的詳細資訊，請參閱[金鑰政策格式](key-policy-overview.md#key-policy-format)。如需有關 IAM 政策文件規則的詳細資訊，請參閱《IAM 使用者指南》**中的 [IAM 名稱需求](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html#reference_iam-quotas-names)。

## 政策中的加密內容
<a name="encryption-context-authorization"></a>

加密內容主要用於驗證完整性和真確性。但是，您也可以在金鑰政策和 IAM 政策中，使用加密內容來控制對對稱加密 AWS KMS keys 的存取。

[kms:EncryptionContext:](conditions-kms.md#conditions-kms-encryption-context) 和 [kms:EncryptionContextKeys](conditions-kms.md#conditions-kms-encryption-context) 條件索引鍵只有在請求包含特定加密內容索引鍵或鍵值對時，才會允許 (或拒絕) 許可。

例如，下列金鑰政策陳述式允許 `RoleForExampleApp` 角色在 `Decrypt` 操作中使用 KMS 金鑰。它使用 `kms:EncryptionContext:context-key` 條件金鑰，只在請求中的加密內容包含 `AppName:ExampleApp` 加密內容對時，才允許此許可。

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp"
  },
  "Action": "kms:Decrypt",
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:EncryptionContext:AppName": "ExampleApp"
    }
  }
}
```

如需這些加密內容條件金鑰的詳細資訊，請參閱 [的條件索引鍵 AWS KMS](policy-conditions.md)。

## 授與中的加密內容
<a name="encryption-context-grants"></a>

當您[建立授予](grants.md)時，您可以包含授予[限制](https://docs.aws.amazon.com/kms/latest/APIReference/API_GrantConstraints.html)條件，以建立授予許可的條件。 AWS KMS 支援兩個授予限制，`EncryptionContextEquals`以及 `EncryptionContextSubset`，這兩者都涉及密碼編譯操作請求中的[加密內容](#encrypt_context)。當您使用這些授予限制條件時，只有在密碼編譯操作請求中的加密內容滿足授予限制條件的需求時，授予中的許可才會生效。

例如，您可以將 `EncryptionContextEquals` 授予限制條件新增至允許 [GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) 操作的授予。藉由此限制條件，只有在請求中的加密內容與授予限制條件中的加密內容大小寫全部相符時，授予才會允許操作。

```
$ aws kms create-grant \
    --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \
    --grantee-principal arn:aws:iam::111122223333:user/exampleUser \
    --retiring-principal arn:aws:iam::111122223333:role/adminRole \
    --operations GenerateDataKey \
    --constraints EncryptionContextEquals={Purpose=Test}
```

來自承授者委託人的類似下列請求應當滿足 `EncryptionContextEquals` 限制條件。

```
$ aws kms generate-data-key \
    --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \
    --key-spec AES_256 \
    --encryption-context Purpose=Test
```

如需授予限制條件的詳細資訊，請參閱 [使用授予限制條件](create-grant-overview.md#grant-constraints)。如需授予的詳細資訊，請參閱 [在 中授予 AWS KMS](grants.md)。

## 記錄加密內容
<a name="encryption-context-auditing"></a>

AWS KMS 使用 AWS CloudTrail 記錄加密內容，讓您可以判斷已存取哪些 KMS 金鑰和資料。日誌項目會準確顯示哪個 KMS 金鑰用來加密或解密由日誌項目中加密內容參考的特定資料。

**重要**  
由於加密內容會被記錄，因此不能包含敏感資訊。

## 儲存加密內容
<a name="encryption-context-storing"></a>

如要簡化在您呼叫 [https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) 或 [https://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.html) 操作時的任何加密內容使用，您可以將加密內容與加密的資料存放在一起。我們建議您只存放足夠的加密內容，以協助您在需要用它來加密或解密時建立完整的加密內容。

例如，如果加密內容是完整路徑檔案，只需將部分路徑與加密的檔案內容一起存放。接著，當您需要完整的加密內容，請從存放的片段中重新建構。如果有人擅自竄改檔案，例如重新命名或移到不同的位置，加密內容值會變更，解密請求會失敗。

# 測試您的許可
<a name="testing-permissions"></a>

若要使用 AWS KMS，您必須擁有 AWS 可用於驗證 API 請求的登入資料。憑證必須包含存取 KMS 金鑰與別名的許可。許可由金鑰政策、IAM 政策、授權以及跨帳戶存取控制決定。除控制 KMS 金鑰的存取權之外，您還可控制 CloudHSM 與自訂金鑰存放區的存取權。

您可指定 `DryRun` API 參數，驗證您擁有運用 AWS KMS 金鑰的必要許可。您也可以使用 `DryRun` 來驗證 AWS KMS API 呼叫中的請求參數是否已正確指定。

**Topics**
+ [什麼是 DryRun 參數？](#what-is-dryrun)
+ [利用 API 指定 DryRun](#dryrun-api)

## 什麼是 DryRun 參數？
<a name="what-is-dryrun"></a>

 `DryRun` 是選用的 API 參數，您可加以指定以便驗證 AWS KMS API 呼叫是否成功。在實際呼叫 AWS KMS之前，利用 `DryRun` 來測試 API 呼叫。您可以驗證下列各項。
+ 您擁有必要的許可，可運用 AWS KMS 金鑰。
+ 您已正確指定呼叫的參數。

AWS KMS 支援在特定 API 動作中使用 `DryRun` 參數：
+ [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html)
+ [解密](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html)
+ [DeriveSharedSecret](https://docs.aws.amazon.com/kms/latest/APIReference/API_DeriveSharedSecret.html)
+ [加密](https://docs.aws.amazon.com/kms/latest/APIReference/API_Encrypt.html)
+ [GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html)
+ [GenerateDataKeyPair](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyPair.html)
+ [GenerateDataKeyPairWithoutPlaintext](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyPairWithoutPlaintext.html)
+ [GenerateDataKeyWithoutPlaintext](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyWithoutPlaintext.html)
+ [GenerateMac](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateMac.html)
+ [ReEncrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.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)
+ [符號](https://docs.aws.amazon.com/kms/latest/APIReference/API_Sign.html)
+ [確認](https://docs.aws.amazon.com/kms/latest/APIReference/API_Verify.html)
+ [VerifyMac](https://docs.aws.amazon.com/kms/latest/APIReference/API_VerifyMac.html)

採用 `DryRun` 參數將產生費用，並作為標準 API 請求計費。如需 AWS KMS 定價的詳細資訊，請參閱 [AWS Key Management Service 定價](https://aws.amazon.com/kms/pricing/)。

 採用 `DryRun` 參數的所有 API 請求都會套用至 API 的請求配額，如您超出 API 請求配額，則可能導致限流例外狀況。例如，無論採用 `DryRun` 還是不採用 `DryRun` 來呼叫 [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html)，都會根據相同的密碼編譯操作配額進行計數。如需進一步了解，請參閱《[調節 AWS KMS 請求](throttling.md)》。

每個對 AWS KMS API 操作的呼叫都會擷取為事件，並記錄在 AWS CloudTrail 日誌中。任何指定 `DryRun` 參數的操作輸出均會顯示在 CloudTrail 日誌。如需詳細資訊，請參閱[使用 記錄 AWS KMS API 呼叫 AWS CloudTrail](logging-using-cloudtrail.md)。

## 利用 API 指定 DryRun
<a name="dryrun-api"></a>

若要使用 `DryRun`，請在支援 `—dry-run` 參數的命令和 AWS KMS API 呼叫中 AWS CLI 指定 參數。當您這麼做時， AWS KMS 會驗證您的呼叫是否成功。使用 的 AWS KMS 呼叫`DryRun`一律會失敗，並傳回訊息，其中包含呼叫失敗原因的相關資訊。訊息可能包含下列例外狀況：
+ `DryRunOperationException` ‐ 如未指定 `DryRun`，請求就會成功。
+ `ValidationException` ‐ 請求因指定不正確 API 參數而失敗。
+ `AccessDeniedException` ‐ 您不具權限，無法對 KMS 資源執行指定 API 動作。

例如，下列命令採用 [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html) 操作並建立授權，以便允許獲授權的使用者擔任 `keyUserRole` 角色，並對指定的[對稱 KMS 金鑰](symm-asymm-choose-key-spec.md#symmetric-cmks)呼叫 [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) 操作。指定 `DryRun` 參數。

```
$  aws kms create-grant \
    --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \
    --grantee-principal arn:aws:iam::111122223333:role/keyUserRole \
    --operations Decrypt \
    --dry-run
```

# 故障診斷 AWS KMS 許可
<a name="policy-evaluation"></a><a name="security_iam_troubleshoot"></a>

授權存取 KMS 金鑰時， 會 AWS KMS 評估下列項目：
+ 連接到 KMS 金鑰的[金鑰政策](determining-access-key-policy.md)。金鑰政策一律在擁有 KMS 金鑰的 AWS 帳戶 和 區域中定義。
+ 連接到提出請求的使用者或角色的所有 [IAM 政策](determining-access-iam-policies.md)。管理主體使用 KMS 金鑰的 IAM 政策一律在主體的 AWS 帳戶中定義。
+ 適用於 KMS 金鑰的所有[授予](determining-access-grants.md)。
+ 其他可能套用至使用 KMS 金鑰之請求的政策類型，例如 [AWS Organizations 服務控制政策](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_type-auth.html#orgs_manage_policies_scp)和 [VPC 端點政策](https://docs.aws.amazon.com/vpc/latest/privatelink/interface-endpoints.html#edit-vpc-endpoint-policy)。這些政策是選用的，依預設允許所有動作，但您可以使用其來限制許可，否則會將許可授予主體。

AWS KMS 會一起評估這些政策機制，以判斷是否允許或拒絕存取 KMS 金鑰。若要這樣做， AWS KMS 會使用類似下列流程圖中描述的程序。以下流程圖提供政策評估程序的視覺化呈現。

![\[描述政策評估程序的流程圖\]](http://docs.aws.amazon.com/zh_tw/kms/latest/developerguide/images/updated-kms-authz-diagram.png)


此流程圖分為兩個部分。這兩個部分應有其先後順序，但評估通常會同時進行。
+ *使用授權*可根據其金鑰政策、IAM 政策、授予和其他適用政策決定是否允許您使用 KMS 金鑰。
+ *金鑰信任*會決定您是否應信任您被允許使用的 KMS 金鑰。一般而言，您會信任 中的資源 AWS 帳戶。但是， AWS 帳戶 如果您帳戶中的授予或 IAM 政策允許您使用 KMS 金鑰，您也可以放心在不同的 中使用 KMS 金鑰。

您可以使用此流程圖來探索呼叫者被允許或拒絕使用 KMS 金鑰許可的原因。您也可以使用它來評估政策和授予。例如，流程圖會顯示呼叫者的存取被拒絕可能是由於明確 `DENY` 陳述式或金鑰政策、IAM 政策或授予中缺少明確 `ALLOW` 陳述式。

流程圖可以說明一些常見許可案例。

**Topics**
+ [範例 1：拒絕使用者存取其 中的 KMS 金鑰 AWS 帳戶](#example-no-iam)
+ [範例 2：使用者擔任的角色具有在不同 中使用 KMS 金鑰的許可 AWS 帳戶](#example-cross-acct)

## 範例 1：拒絕使用者存取其 中的 KMS 金鑰 AWS 帳戶
<a name="example-no-iam"></a>

Alice 是 111122223333 AWS 帳戶中的 IAM 使用者。她被拒絕存取同一個 AWS 帳戶中的 KMS 金鑰。為什麼 Alice 無法使用 KMS 金鑰？

在此案例中，Alice 對 KMS 金鑰的存取遭拒，因為沒有賦予她必要許可的金鑰政策、IAM 政策或授予。KMS 金鑰的金鑰政策允許 AWS 帳戶 使用 IAM 政策來控制對 KMS 金鑰的存取，但沒有 IAM 政策會授予 Alice 使用 KMS 金鑰的許可。

![\[描述政策評估程序的流程圖\]](http://docs.aws.amazon.com/zh_tw/kms/latest/developerguide/images/kms-auth-flow-Alice.png)


請考量此範例的相關政策。
+ Alice 想要使用的 KMS 金鑰具有[預設金鑰政策](key-policy-default.md)。本政策[允許擁有 KMS 金鑰的 AWS 帳戶](key-policy-default.md#key-policy-default-allow-root-enable-iam)，以使用 IAM 政策控制對 KMS 金鑰的存取。此金鑰政策符合流程圖中的*金鑰政策是否允許呼叫者帳戶使用 IAM 政策來控制對金鑰的存取？*條件。

------
#### [ JSON ]

****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Id" : "key-test-1",
    "Statement" : [ {
      "Sid" : "DelegateToIAMPolicies",
      "Effect" : "Allow",
      "Principal" : {
        "AWS" : "arn:aws:iam::111122223333:root"
      },
      "Action" : "kms:*",
      "Resource" : "*"
    } ]
  }
  ```

------
+ 不過，沒有可賦予 Alice 使用 KMS 金鑰之許可的金鑰政策、IAM 政策或授予。因此，Alice 使用 KMS 金鑰的許可遭拒。

## 範例 2：使用者擔任的角色具有在不同 中使用 KMS 金鑰的許可 AWS 帳戶
<a name="example-cross-acct"></a>

Bob 是帳戶 1 (111122223333) 的使用者。他獲准在[密碼編譯操作](kms-cryptography.md#cryptographic-operations)中使用帳戶 2 (444455556666) 中的 KMS 金鑰。如何實現？

**提示**  
評估跨帳戶許可時，請記住，金鑰政策已於 KMS 金鑰的帳戶中指定。在呼叫者帳戶中指定 IAM 政策，即使呼叫者位於不同帳戶中。如需提供跨帳戶存取 KMS 金鑰的詳細資訊，請參閱 [允許其他帳戶中的使用者使用 KMS 金鑰](key-policy-modifying-external-accounts.md)。
+ 帳戶 2 中 KMS 金鑰的金鑰政策允許帳戶 2 使用 IAM 政策來控制對 KMS 金鑰的存取。
+ 帳戶 2 中 KMS 金鑰的金鑰政策允許帳戶 1 在密碼編譯操作中使用 KMS 金鑰。不過，帳戶 1 必須使用 IAM 政策賦予其主體存取 KMS 金鑰的權限。
+ 帳戶 1 中的 IAM 政策允許 `Engineering` 角色使用帳戶 2 的 KMS 金鑰進行密碼編譯操作。
+ Bob (帳戶 1 的使用者) 具有採用 `Engineering` 角色的許可。
+ Bob 可以信任此 KMS 金鑰，因為即使它不在他的帳戶中，他帳戶中的 IAM 政策可為他提供此 KMS 金鑰的明確使用許可。

![\[描述政策評估程序的流程圖\]](http://docs.aws.amazon.com/zh_tw/kms/latest/developerguide/images/kms-auth-flow-Bob.png)


讓我們看看可讓 Bob (帳戶 1 的使用者) 使用帳戶 2 中 KMS 金鑰的政策。
+ KMS 金鑰的金鑰政策允許帳戶 2 (444455556666，擁有 KMS 金鑰的帳戶) 使用 IAM 政策來控制對 KMS 金鑰的存取。此金鑰政策也允許帳戶 1 (111122223333) 在密碼編譯操作中使用 KMS 金鑰 (在政策陳述式的 `Action` 元素中指定)。不過，在帳戶 1 定義可賦予主體存取 KMS 金鑰的 IAM 政策前，帳戶 1 中沒有人可以使用帳戶 2 的 KMS 金鑰。

  在流程圖中，帳戶 2 的此金鑰政策符合金鑰政策*是否允許呼叫者帳戶使用 IAM 政策來控制對金鑰的存取？*條件。

------
#### [ JSON ]

****  

  ```
  {
      "Id": "key-policy-acct-2",
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "PermissionUseIAMpolicies",
              "Effect": "Allow",
              "Principal": {
                  "AWS": "arn:aws:iam::444455556666:root"
              },
              "Action": "kms:*",
              "Resource": "*"
          },
          {
              "Sid": "AllowAccount1UseThisKMSKeys",
              "Effect": "Allow",
              "Principal": {
                  "AWS": "arn:aws:iam::111122223333:root"
              },
              "Action": [
                  "kms:Encrypt",
                  "kms:Decrypt",
                  "kms:ReEncryptFrom",
                  "kms:ReEncryptTo",
                  "kms:GenerateDataKey",
                  "kms:GenerateDataKeyWithoutPlaintext",
                  "kms:DescribeKey"
              ],
              "Resource": "*"
          }
      ]
  }
  ```

------
+ 發起人 AWS 帳戶 （帳戶 1，111122223333) 中的 IAM 政策授予委託人使用帳戶 2 ((444455556666) 中的 KMS 金鑰執行密碼編譯操作的許可。`Action` 元素為主體指派了與帳戶 2 中金鑰政策提供給帳戶 1 相同的許可。若要將這些許可提供給帳戶 1 中的 `Engineering` 角色，[此內嵌政策會內嵌於](https://docs.aws.amazon.com/IAM/latest/APIReference/API_PutRolePolicy.html) `Engineering` 角色。

  只有在帳戶 2 中 KMS 金鑰的金鑰政策賦予帳戶 1 使用 KMS 金鑰的許可時，這類的跨帳戶 IAM 政策才有效。此外，帳戶 1 賦予其主體執行動作的許可僅限金鑰政策賦予該帳戶的許可。

  在流程圖中，這可符合 *IAM 政策是否允許呼叫者執行此動作？*條件。

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "kms:Encrypt",
                  "kms:Decrypt",
                  "kms:ReEncryptFrom",
                  "kms:ReEncryptTo",
                  "kms:GenerateDataKey",
                  "kms:GenerateDataKeyWithoutPlaintext",
                  "kms:DescribeKey"
              ],
              "Resource": [
              "arn:aws:kms:us-west-2:444455556666:key/1234abcd-12ab-34cd-56ef-1234567890ab"
              ]
          }
      ]
  }
  ```

------
+ 最後一個必要元素是帳戶 1 中 `Engineering` 角色的定義。該角色的 `AssumeRolePolicyDocument` 可讓 Bob採用 `Engineering` 角色。

  ```
  {
      "Role": {
          "Arn": "arn:aws:iam::111122223333:role/Engineering",
          "CreateDate": "2019-05-16T00:09:25Z",
          "AssumeRolePolicyDocument": {
              "Version": "2012-10-17",		 	 	 
              "Statement": {
                  "Principal": {
                      "AWS": "arn:aws:iam::111122223333:user/bob"
                  },
                  "Effect": "Allow",
                  "Action": "sts:AssumeRole"
              }
          },
          "Path": "/",
          "RoleName": "Engineering",
          "RoleId": "AROA4KJY2TU23Y7NK62MV"
      }
  }
  ```

# AWS KMS 存取控制詞彙表
<a name="access-glossary"></a>

下列主題說明 AWS KMS 存取控制中的重要術語和概念。

## 身分驗證
<a name="permission-concept-authentication"></a>

*身分驗證*是驗證您身分的過程。若要傳送請求至 AWS KMS，您必須 AWS 使用您的 登入資料 AWS 登入。

## Authorization
<a name="permission-concept-authorization"></a>

*授權*提供許可，以傳送建立、管理或使用 AWS KMS 資源的請求。例如，您必須取得授權，才可以在密碼編譯操作中使用 KMS 金鑰。

若要控制對 AWS KMS 資源的存取，請使用[金鑰政策](key-policies.md)、[IAM 政策和](iam-policies.md)[授權](grants.md)。每個 KMS 金鑰都必須有一個金鑰政策。如果金鑰政策允許，您也可以使用 IAM 政策和授予，以允許主體存取 KMS 金鑰。若要優化您的授權，您可以使用[條件金鑰](policy-conditions.md)，只有在請求或資源符合您指定的條件時，條件金鑰才允許或拒絕存取。您也可以允許存取[其他 AWS 帳戶](key-policy-modifying-external-accounts.md) 中您信任的主體。

## 使用身分驗證
<a name="security_iam_authentication"></a>

身分驗證是您 AWS 使用身分憑證登入 的方式。您必須驗證為 AWS 帳戶根使用者、IAM 使用者或擔任 IAM 角色。

您可以使用身分來源的登入資料，例如 AWS IAM Identity Center (IAM Identity Center)、單一登入身分驗證或 Google/Facebook 登入資料，以聯合身分的形式登入。如需有關登入的詳細資訊，請參閱《AWS 登入 使用者指南》**中的[如何登入您的 AWS 帳戶](https://docs.aws.amazon.com/signin/latest/userguide/how-to-sign-in.html)。

對於程式設計存取， AWS 提供 SDK 和 CLI 以密碼編譯方式簽署請求。如需詳細資訊，請參閱《IAM 使用者指南》**中的 [API 請求的AWS 第 4 版簽署程序](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html)。

### AWS 帳戶 根使用者
<a name="security_iam_authentication-rootuser"></a>

 當您建立 時 AWS 帳戶，您會從一個名為 AWS 帳戶 *theroot 使用者的*登入身分開始，該身分具有對所有 AWS 服務 和 資源的完整存取權。強烈建議不要使用根使用者來執行日常任務。有關需要根使用者憑證的任務，請參閱《IAM 使用者指南》**中的[需要根使用者憑證的任務](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks)。

### 聯合身分
<a name="security_iam_authentication-federated"></a>

最佳實務是要求人類使用者使用聯合身分提供者，以 AWS 服務 使用臨時憑證存取 。

*聯合身分*是您企業目錄、Web 身分提供者的使用者，或使用來自身分來源的 AWS 服務 憑證存取 Directory Service 。聯合身分會擔任角色，而該角色會提供臨時憑證。

若需集中化管理存取權限，建議使用 AWS IAM Identity Center。如需詳細資訊，請參閱 *AWS IAM Identity Center 使用者指南*中的[什麼是 IAM Identity Center？](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html)。

### IAM 使用者和群組
<a name="security_iam_authentication-iamuser"></a>

*IAM 使用者*[https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html)是一種身分具備單人或應用程式的特定許可權。建議以臨時憑證取代具備長期憑證的 IAM 使用者。如需詳細資訊，請參閱《*IAM 使用者指南*》中的[要求人類使用者使用聯合身分提供者來 AWS 使用臨時憑證存取](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#bp-users-federation-idp) 。

[IAM 群組](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html)**會指定 IAM 使用者集合，使管理大量使用者的許可權更加輕鬆。如需詳細資訊，請參閱《IAM 使用者指南》**中的 [IAM 使用者的使用案例](https://docs.aws.amazon.com/IAM/latest/UserGuide/gs-identities-iam-users.html)。

### IAM 角色
<a name="security_iam_authentication-iamrole"></a>

*IAM 角色*[https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)的身分具有特定許可權，其可以提供臨時憑證。您可以透過[從使用者切換到 IAM 角色 （主控台） ](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-console.html)或呼叫 AWS CLI 或 AWS API 操作來擔任角色。如需詳細資訊，請參閱《IAM 使用者指南》**中的[擔任角色的方法](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage-assume.html)。

IAM 角色適用於聯合身分使用者存取、臨時 IAM 使用者許可、跨帳戶存取權與跨服務存取，以及在 Amazon EC2 執行的應用程式。如需詳細資訊，請參閱《*IAM 使用者指南*》中的 [IAM 中的快帳戶資源存取](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html)。

## 使用政策管理存取權
<a name="security_iam_access-manage"></a>

您可以透過建立政策並將其連接到身分或資源 AWS 來控制 AWS 中的存取。政策定義與身分或資源相關聯的許可。當委託人提出請求時 AWS ， 會評估這些政策。大多數政策會以 JSON 文件 AWS 形式存放在 中。如需進一步了解 JSON 政策文件，請參閱《*IAM 使用者指南*》中的 [JSON 政策概觀](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#access_policies-json)。

管理員會使用政策，透過定義哪些**主體**可在哪些**條件**下對哪些**資源**執行**動作**，以指定可存取的範圍。

預設情況下，使用者和角色沒有許可。IAM 管理員會建立 IAM 政策並將其新增至角色，供使用者後續擔任。IAM 政策定義動作的許可，無論採用何種方式執行。

### 身分型政策
<a name="security_iam_access-manage-id-based-policies"></a>

身分型政策是附加至身分 (使用者、使用者群組或角色) 的 JSON 許可政策文件。這類政策控制身分可對哪些資源執行哪些動作，以及適用的條件。如需了解如何建立身分型政策，請參閱《*IAM 使用者指南*》中的[透過客戶管理政策定義自訂 IAM 許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)。

身分型政策可分為*內嵌政策* (直接內嵌於單一身分) 與*受管政策* (可附加至多個身分的獨立政策)。如需了解如何在受管政策及內嵌政策之間做選擇，請參閱《IAM 使用者指南》**中的[在受管政策與內嵌政策之間選擇](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-choosing-managed-or-inline.html)。

### 資源型政策
<a name="security_iam_access-manage-resource-based-policies"></a>

 AWS KMS [Ankey 政策](key-policies.md)是以資源為基礎的政策，可控制對 KMS 金鑰的存取。每個 KMS 金鑰都必須有一個金鑰政策。您可以使用其他授權機制來允許存取 KMS 金鑰，但前提是金鑰政策允許。(您可以使用 IAM 政策來*拒絕*對 KMS 金鑰的存取，即使金鑰政策未明確允許。)

資源型政策是連接到資源 (如 KMS 金鑰) 的 JSON 政策文件，以控制對特定資源的存取。資源型政策可定義指定的主體在何種條件下對該資源執行哪些動作。您不要在資源型政策中指定資源，但必須指定委託人，例如帳戶、使用者、角色、聯合身分使用者或 AWS 服務。資源型政策是管理該資源的服務中的內嵌政策。您無法在資源型政策中使用來自 IAM 的 AWS 受管政策，例如 [`AWSKeyManagementServicePowerUser`受](security-iam-awsmanpol.md#security-iam-awsmanpol-AWSKeyManagementServicePowerUser)管政策。

### 其他政策類型
<a name="security_iam_access-manage-other-policies"></a>

AWS 支援其他政策類型，可設定更多常見政策類型授予的最大許可：
+ **許可界限** — 設定身分型政策可授與 IAM 實體的最大許可。如需詳細資訊，請參閱《 IAM 使用者指南》**中的 [IAM 實體許可界限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html)。
+ **服務控制政策 (SCP)** — 為 AWS Organizations中的組織或組織單位指定最大許可。如需詳細資訊，請參閱《AWS Organizations 使用者指南》**中的[服務控制政策](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html)。
+ **資源控制政策 (RCP)** — 設定您帳戶中資源可用許可的上限。如需詳細資訊，請參閱《AWS Organizations 使用者指南》**中的[資源控制政策 (RCP)](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps.html)。
+ **工作階段政策** — 在以程式設計方式為角色或聯合身分使用者建立臨時工作階段時，以參數形式傳遞的進階政策。如需詳細資訊，請參《*IAM 使用者指南*》中的[工作階段政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session)。

### 多種政策類型
<a name="security_iam_access-manage-multiple-policies"></a>

當多種類型的政策適用於請求時，產生的許可會更複雜而無法理解。若要了解如何 AWS 在涉及多種政策類型時決定是否允許請求，請參閱《*IAM 使用者指南*》中的[政策評估邏輯](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html)。

## AWS KMS 資源
<a name="kms-resources-operations"></a>

在 中 AWS KMS，主要資源是 AWS KMS key。 AWS KMS 也支援[別名](kms-alias.md)，這是為 KMS 金鑰提供易記名稱的獨立資源。有些 AWS KMS 操作可讓您使用別名來識別 KMS 金鑰。

KMS 金鑰或別名的每個執行個體都具有唯一的 [Amazon Resource Name](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#arns-syntax) (ARN)，具有標準格式。在 AWS KMS 資源中， AWS 服務名稱為 `kms`。
+ **AWS KMS key**

  ARN 格式：

  `arn:AWS partition name:AWS service name:AWS 區域:AWS 帳戶 ID:key/key ID`

  範例 ARN：

  `arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab`
+ **Alias (別名)**

  ARN 格式：

  `arn:AWS partition name:AWS service name:AWS 區域:AWS 帳戶 ID:alias/alias name`

  範例 ARN：

  `arn:aws:kms:us-west-2:111122223333:alias/example-alias`

AWS KMS 提供一組 API 操作，以使用您的 AWS KMS 資源。如需在 AWS 管理主控台 和 AWS KMS API 操作中識別 KMS 金鑰的詳細資訊，請參閱 [金鑰識別符 (KeyID)](concepts.md#key-id)。如需 AWS KMS 操作清單，請參閱 [AWS Key Management Service API 參考](https://docs.aws.amazon.com/kms/latest/APIReference/)。