

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

# 使用標籤來控制對 KMS 金鑰的存取
<a name="tag-authorization"></a>

您可以 AWS KMS keys 根據 KMS 金鑰上的標籤控制對 的存取。例如，您可以撰寫 IAM 政策，允許主體僅啟用和停用具有特定標籤的 KMS 金鑰。或者，您可以使用 IAM 政策來防止主體在密碼編譯操作中使用 KMS 金鑰，除非 KMS 金鑰有特定的標籤。

此功能是[屬性型存取控制](abac.md) (ABAC) AWS KMS 支援的一部分。如需有關使用標籤控制資源 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 相關之存取問題的說明，請參閱 [對適用於 的 ABAC 進行故障診斷 AWS KMS](troubleshooting-tags-aliases.md)。

**注意**  
可能最多需要五分鐘才能將標籤和別名變更體現在 KMS 金鑰授權上。最近的變更可能會在 API 操作中可見，然後才會影響授權。

AWS KMS 支援 [aws：ResourceTag/*tag-key*](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-resourcetag) [全域條件內容金鑰](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html)，可讓您根據 KMS 金鑰上的標籤控制對 KMS 金鑰的存取。由於多個 KMS 金鑰可以具有相同的標籤，所以此功能可讓您將許可套用至一組精選 KMS 金鑰。您也可以透過變更其標籤，輕鬆變更集合中的 KMS 金鑰。

在 中 AWS KMS，只有在 IAM 政策中支援 `aws:ResourceTag/tag-key`條件金鑰。只適用於單一 KMS 金鑰的金鑰政策，或不使用特定 KMS 金鑰的操作 (例如 [ListKeys](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListKeys.html) 或 [ListAliases](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListAliases.html) 操作) 皆不支援此功能。

使用標籤控制存取可提供一種簡單、可擴展且靈活的方式來管理許可。不過，如果沒有正確設計和管理，它可能會意外允許或拒絕存取您的 KMS 金鑰。如果您使用標籤來控制存取，請考慮下列實務。
+ 使用標籤來強化[最低權限存取](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege)的最佳實務。僅為 IAM 主體提供他們必須使用或管理之 KMS 金鑰所需的許可。例如，使用標籤來標註專案所使用的 KMS 金鑰。然後授予專案小組僅將 KMS 金鑰與專案標籤搭配使用的許可。
+ 要謹慎地授予主體 `kms:TagResource` 和 `kms:UntagResource` 許可，讓其新增、編輯和刪除別名。當您使用標籤來控制對 KMS 金鑰的存取時，變更標籤可授予主體使用 KMS 金鑰 (否則其沒有使用的許可) 的許可。它也可以拒絕存取其他主體執行任務所需的 KMS 金鑰。如果他們有管理標籤的許可，則沒有變更主要政策或建立授予之許可的金鑰管理員可以控制對 KMS 金鑰的存取。

  如果可能，請使用政策條件，例如 `aws:RequestTag/tag-key` 或 `aws:TagKeys`，將[主體的標記許可限制](tag-permissions.md#tag-permissions-conditions)為特定 KMS 金鑰上的特定標籤或標籤模式。
+ 檢閱 中目前具有標記和取消標記許可 AWS 帳戶 的主體，並視需要進行調整。例如，主控台[金鑰管理員的預設金鑰政策](key-policy-default.md#key-policy-default-allow-administrators)包含該 KMS 金鑰的 `kms:TagResource` 和 `kms:UntagResource` 許可。IAM 政策可能允許所有 KMS 金鑰的標記和取消標記許可。例如，[AWSKeyManagementServicePowerUser](security-iam-awsmanpol.md#security-iam-awsmanpol-AWSKeyManagementServicePowerUser) 受管政策允許主體在所有 KMS 金鑰上標記、取消標記和列出標籤。
+ 在設定取決於標籤的政策之前，請檢閱 中 KMS 金鑰上的標籤 AWS 帳戶。請確定您的政策僅適用於您想要包含的標籤。使用 [CloudTrail 日誌](logging-using-cloudtrail.md)和 [CloudWatch 警示](monitoring-overview.md)，提醒您可能會影響 KMS 金鑰存取的標籤變更。
+ 標籤型政策條件使用模式比對；其不會繫結至標籤的特定執行個體。使用標籤型條件索引鍵的政策會影響所有符合模式的新標籤和現有標籤。如果您刪除並重新建立符合政策條件的標籤，則條件會套用至新標籤，就像舊標籤一樣。

例如，請考慮以下 IAM 政策。它允許主體會僅針對亞太區域 (新加坡) 區域和擁有 `"Project"="Alpha"` 標籤之帳戶中的 KMS 金鑰呼叫 [GenerateDataKeyWithoutPlaintext](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyWithoutPlaintext.html) 和 [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) 操作。您可以將此政策連接至 Alpha 專案範例中的角色。

------
#### [ 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"
        }
      }
    }
  ]
}
```

------

以下 IAM 政策範例允許主體使用帳戶中的任何 KMS 金鑰來進行密碼編譯操作。但其禁止主體針對具有 `"Type"="Reserved"` 標籤或不具有 `"Type"` 標籤的 KMS 金鑰使用這些密碼編譯操作。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "IAMAllowCryptographicOperations",
      "Effect": "Allow",
      "Action": [
        "kms:Encrypt",
        "kms:GenerateDataKey*",
        "kms:Decrypt",
        "kms:ReEncrypt*"
      ],
      "Resource": "arn:aws:kms:*:111122223333:key/*"
    },
    {
      "Sid": "IAMDenyOnTag",
      "Effect": "Deny",
      "Action": [
        "kms:Encrypt",
        "kms:GenerateDataKey*",
        "kms:Decrypt",
        "kms:ReEncrypt*"
      ],
      "Resource": "arn:aws:kms:*:111122223333:key/*",
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/Type": "Reserved"
        }
      }
    },
    {
      "Sid": "IAMDenyNoTag",
      "Effect": "Deny",
      "Action": [
        "kms:Encrypt",
        "kms:GenerateDataKey*",
        "kms:Decrypt",
        "kms:ReEncrypt*"
      ],
      "Resource": "arn:aws:kms:*:111122223333:key/*",
      "Condition": {
        "Null": {
          "aws:ResourceTag/Type": "true"
        }
      }
    }
  ]
}
```

------