

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

# 適用於 的 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 金鑰非常嚴格的控制。