

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

# 使用別名來控制對 KMS 金鑰的存取
<a name="alias-authorization"></a>

您可以根據與 KMS 金鑰相關聯的別名來控制對 KMS 金鑰的存取。若要執行這項操作，請使用 [kms:RequestAlias](conditions-kms.md#conditions-kms-request-alias) 和 [kms:ResourceAliases](conditions-kms.md#conditions-kms-resource-aliases) 條件索引鍵。此功能是[屬性型存取控制](abac.md) (ABAC) AWS KMS 支援的一部分。

`kms:RequestAlias` 條件索引鍵允許或拒絕根據請求中的別名存取 KMS 金鑰。`kms:ResourceAliases` 條件索引鍵會根據與 KMS 金鑰相關聯的別名，允許或拒絕存取 KMS 金鑰。

這些功能不允許您使用政策陳述式中 `resource` 元素的別名來識別 KMS 金鑰。當別名是 `resource` 元素的值時，政策會套用至別名資源，而不會套用至可能與其相關聯的任何 KMS 金鑰。

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

使用別名控制 KMS 金鑰的存取時，請考慮下列事項：
+ 使用別名來強化[最低權限存取](iam-policies-best-practices.md)的最佳實務。僅為 IAM 委託人提供他們必須使用或管理之 KMS 金鑰所需的許可。例如，使用別名來識別專案所使用的 KMS 金鑰。然後授予專案小組僅將 KMS 金鑰與專案別名搭配使用的許可。
+ 要謹慎地授予委託人 `kms:CreateAlias`、`kms:UpdateAlias` 或 `kms:DeleteAlias` 許可，讓其新增、編輯和刪除別名。當您使用別名來控制對 KMS 金鑰的存取時，變更別名可授予委託人使用 KMS 金鑰 (否則其沒有使用的許可) 的許可。它也可以拒絕存取其他委託人執行任務所需的 KMS 金鑰。
+ 檢閱 中目前具有管理別名許可 AWS 帳戶 的主體，並視需要調整許可。沒有變更主要政策或建立授權之許可的重要管理員可以控制 KMS 金鑰的存取，如果他們擁有管理別名的許可。

  例如，重要管理員的[主控台預設重要政策](key-policy-default.md#key-policy-default-allow-administrators)會包括 `kms:CreateAlias`、`kms:DeleteAlias` 和 `kms:UpdateAlias` 許可。IAM 政策可能會為您的 AWS 帳戶中的所有 KMS 金鑰提供別名許可。例如，[AWSKeyManagementServicePowerUser](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSKeyManagementServicePowerUser) 受管政策允許委託人建立、刪除和列出所有 KMS 金鑰的別名，但不予以更新。
+ 在設定依賴別名的政策之前，請檢閱您 中 KMS 金鑰上的別名 AWS 帳戶。請確定您的政策僅適用於您想要包含的別名。使用 [CloudTrail 日誌](alias-ct.md)和 [CloudWatch 警示](monitoring-cloudwatch.md)，提醒您可能會影響 KMS 金鑰存取的別名變更。此外，[ListAliases](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListAliases.html) 回應包含每個別名的建立日期和上次更新日期。
+ 別名政策條件使用模式比對；其不會繫結至別名的特定執行個體。使用別名型條件索引鍵的政策會影響所有符合模式的新別名和現有別名。如果您刪除並重新建立符合政策條件的別名，則條件會套用至新別名，就像舊別名一樣。

`kms:RequestAlias` 條件索引鍵依賴於操作請求中明確指定的別名。`kms:ResourceAliases` 條件索引鍵取決於與 KMS 金鑰相關聯的別名，即使其並沒有出現在請求中。

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

根據識別請求中 KMS 金鑰的別名，允許或拒絕存取 KMS 金鑰。您可以使用[金鑰政策](key-policies.md)或 IAM 政策中的 [kms:RequestAlias](conditions-kms.md#conditions-kms-request-alias) 條件索引鍵。它適用於使用別名來識別請求中 KMS 金鑰的操作，也就是[密碼編譯操作](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)。其對別名操作無效，例如 [CreateAlias](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateAlias.html) 或 [DeleteAlias](https://docs.aws.amazon.com/kms/latest/APIReference/API_DeleteAlias.html)。

**重要**  
不建議使用具有 `kms:RequestAlias`條件`Deny`的政策陳述式，因為發起人可以使用[金鑰 ID](concepts.md#key-id-key-id)、[金鑰 ARN](concepts.md#key-id-key-ARN) 或不同的別名來識別請求中的 KMS 金鑰。若要根據與 KMS 金鑰相關聯的別名拒絕存取，請改用 [kms:ResourceAliases](conditions-kms.md#conditions-kms-resource-aliases) 條件金鑰。

在條件索引鍵中，指定[別名名稱](concepts.md#key-id-alias-name)或別名名稱模式。您不能指定[別名 ARN](concepts.md#key-id-alias-ARN)。

例如，下列金鑰政策陳述式可讓委託人對 KMS 金鑰使用指定的操作。僅在請求使用包含 `alpha` 來識別 KMS 金鑰的別名時，許可才有效。

```
{
  "Sid": "Key policy using a request alias condition",
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/alpha-developer"
  },
  "Action": [
    "kms:Decrypt",
    "kms:GenerateDataKey*",
    "kms:DescribeKey"
  ],
  "Resource": "*",
  "Condition": {
    "StringLike": {
      "kms:RequestAlias": "alias/*alpha*"
    }
  }
}
```

下列授權委託人提出的範例請求將滿足條件。不過，使用[金鑰 ID](concepts.md#key-id-key-id) 的請求、[金鑰 ARN](concepts.md#key-id-key-ARN)，或者不同的別名將無法滿足條件，即使這些值識別了相同的 KMS 索引鍵。

```
$ aws kms describe-key --key-id "arn:aws:kms:us-west-2:111122223333:alias/project-alpha"
```

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

根據與 KMS 金鑰相關聯的別名允許或拒絕存取 KMS 金鑰，即使請求中未使用別名。[kms:ResourceAliases](conditions-kms.md#conditions-kms-resource-aliases) 條件索引鍵可讓您指定別名或別名模式，例如 `alias/test*`，因此您可以在 IAM 政策中使用其來控制對相同區域中數個 KMS 金鑰的存取。它適用於使用 KMS 金鑰的任何 AWS KMS 操作。

例如，下列 IAM 政策可讓委託人在 KMS 金鑰上呼叫指定的操作。 AWS 帳戶不過，此許可僅適用於與開頭為 `restricted` 之別名關聯的 KMS 金鑰。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AliasBasedIAMPolicy",
      "Effect": "Allow",
      "Action": [
        "kms:Decrypt",
        "kms:GenerateDataKey*",
        "kms:DescribeKey"
      ],
      "Resource": [
        "arn:aws:kms:*:111122223333:key/*",
        "arn:aws:kms:*:444455556666:key/*"
      ],
      "Condition": {
        "ForAnyValue:StringLike": {
          "kms:ResourceAliases": "alias/restricted*"
        }
      }
    }
  ]
}
```

------

`kms:ResourceAliases` 條件是資源的條件，而不是請求。因此，未指定別名的請求仍然可以滿足條件。

下列範例請求 (指定相符別名) 會滿足條件。

```
$ aws kms enable-key-rotation --key-id "alias/restricted-project"
```

不過，下列範例請求也符合條件，前提是指定的 KMS 金鑰具有以 `restricted` 開頭的別名，即使別名未在請求中使用。

```
$ aws kms enable-key-rotation --key-id "1234abcd-12ab-34cd-56ef-1234567890ab"
```