

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 控制对别名的访问
<a name="alias-access"></a>

创建或更改别名时，会影响别名及其关联的 KMS 密钥。因此，管理别名的委托人必须具有对别名和所有受影响的 KMS 密钥调用别名操作的权限。您可以通过使用[密钥策略](key-policies.md)、[IAM policy](iam-policies.md) 和[授权](grants.md)来提供这些权限。

**注意**  
请谨慎授予委托人管理标签和别名的权限。更改标签或别名可以允许或拒绝对客户托管密钥的权限。有关详细信息，请参阅 [ABAC for AWS KMS](abac.md) 和 [使用别名控制对 KMS 密钥的访问](alias-authorization.md)。

有关控制对所有 AWS KMS 操作的访问权限的信息，请参见[权限参考](kms-api-permissions-reference.md)。

创建和管理别名的权限如下所示。

## kms: CreateAlias
<a name="alias-access-create"></a>

要创建别名，委托人需要别名和相关 KMS 密钥的以下权限。
+ 别名的 `kms:CreateAlias`。在附加到允许创建别名的委托人的 IAM policy 中提供此权限。

  以下示例策略语句在 `Resource` 元素中指定特定别名。但是您可以列出多个别名 ARNs 或指定别名模式，例如 “test\$1”。您还可以指定 `"*"` 的 `Resource` 值以允许委托人在账户和区域中创建任何别名。创建别名的权限也可以包含在对账户和区域中的所有资源的 `kms:Create*` 权限中。

  ```
  {
    "Sid": "IAMPolicyForAnAlias",
    "Effect": "Allow",
    "Action": [
      "kms:CreateAlias",
      "kms:UpdateAlias",
      "kms:DeleteAlias"
    ],
    "Resource": "arn:aws:kms:us-west-2:111122223333:alias/test-key"
  }
  ```
+ KMS 密钥的 `kms:CreateAlias`。此权限必须在密钥策略或者从密钥策略委派的 IAM policy 中提供。

  ```
  {
    "Sid": "Key policy for 1234abcd-12ab-34cd-56ef-1234567890ab",
    "Effect": "Allow",
    "Principal": {"AWS": "arn:aws:iam::111122223333:user/KMSAdminUser"},
    "Action": [
      "kms:CreateAlias",
      "kms:DescribeKey"
    ],
    "Resource": "*"
  }
  ```

您可以使用条件键限制可以与别名关联的 KMS 密钥。例如，您可以使用 k [ms: KeySpec](conditions-kms.md#conditions-kms-key-spec) 条件密钥来允许委托人仅在非对称 KMS 密钥上创建别名。有关您可以用于限制对 KMS 密钥资源的 `kms:CreateAlias` 权限的条件键完整列表，请参阅 [AWS KMS 权限](kms-api-permissions-reference.md)。

## kms: ListAliases
<a name="alias-access-view"></a>

要列出账户和区域中的别名，委托人必须在 IAM policy 中具有 `kms:ListAliases` 权限。由于此策略与任何特定 KMS 密钥或别名资源无关，因此策略中资源元素的值[必须为 `"*"`](iam-policies-best-practices.md#require-resource-star)。

例如，以下 IAM policy 语句授予委托人列出账户和区域中所有 KMS 密钥和别名的权限。

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

****  

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

------

## kms: UpdateAlias
<a name="alias-access-update"></a>

要更改与别名关联的 KMS 密钥，委托人需要三个权限元素：一个用于别名，一个用于当前 KMS 密钥，另一个用于新的 KMS 密钥。

例如，假设您想要将 `test-key` 别名从具有密钥 ID 1234abcd-12ab-34cd-56ef-1234567890ab 的 KMS 密钥更改为具有密钥 ID 0987dcba-09fe-87dc-65ba-ab0987654321 的 KMS 密钥。在这种情况下，请包括类似于本部分中的示例的策略语句。
+ 别名的 `kms:UpdateAlias`。您可以在附加到委托人的 IAM policy 中提供此权限。以下 IAM policy 指定了一个特定的别名。但是您可以列出多个别名 ARNs 或指定别名模式，例如`"test*"`。您还可以指定 `"*"` 的 `Resource` 值以允许委托人在账户和区域中更新任何别名。

  ```
  {
    "Sid": "IAMPolicyForAnAlias",
    "Effect": "Allow",
    "Action": [
      "kms:UpdateAlias",
      "kms:ListAliases",
      "kms:ListKeys"
    ],
    "Resource": "arn:aws:kms:us-west-2:111122223333:alias/test-key"
  }
  ```
+ 当前与别名关联的 KMS 密钥的 `kms:UpdateAlias`。此权限必须在密钥策略或者从密钥策略委派的 IAM policy 中提供。

  ```
  {
    "Sid": "Key policy for 1234abcd-12ab-34cd-56ef-1234567890ab",
    "Effect": "Allow",
    "Principal": {"AWS": "arn:aws:iam::111122223333:user/KMSAdminUser"},
    "Action": [
      "kms:UpdateAlias",
      "kms:DescribeKey"
    ],
    "Resource": "*"
  }
  ```
+ 操作将其与别名关联的 KMS 密钥的 `kms:UpdateAlias`。此权限必须在密钥策略或者从密钥策略委派的 IAM policy 中提供。

  ```
  {
    "Sid": "Key policy for 0987dcba-09fe-87dc-65ba-ab0987654321",
    "Effect": "Allow",
    "Principal": {"AWS": "arn:aws:iam::111122223333:user/KMSAdminUser"},
    "Action": [
      "kms:UpdateAlias", 
      "kms:DescribeKey"
    ],
    "Resource": "*"
  }
  ```

您可以使用条件键在 `UpdateAlias` 操作中限制其中一个或两个 KMS 密钥。例如，您可以使用 k [ms: ResourceAliases](conditions-kms.md#conditions-kms-resource-aliases) 条件密钥来允许委托人仅在目标 KMS 密钥已具有特定别名时才更新别名。有关您可以用于限制对 KMS 密钥资源的 `kms:UpdateAlias` 权限的条件键完整列表，请参阅 [AWS KMS 权限](kms-api-permissions-reference.md)。

## kms: DeleteAlias
<a name="alias-access-delete"></a>

要删除别名，委托人需要别名和相关 KMS 密钥的权限。

与往常一样，在授予委托人删除资源的权限时，您应该谨慎操作。但是，删除别名不会影响关联的 KMS 密钥。虽然这可能会导致依赖别名的应用程序出现故障，但如果错误地删除了别名，您可以重新创建别名。
+ 别名的 `kms:DeleteAlias`。在附加到允许删除别名的委托人的 IAM policy 中提供此权限。

  以下示例策略语句在 `Resource` 元素中指定别名。但是您可以列出多个别名 ARNs 或指定别名模式，例如`"test*"`，您也可以将`Resource`值指定为`"*"`以允许委托人删除账户和区域中的任何别名。

  ```
  {
    "Sid": "IAMPolicyForAnAlias",
    "Effect": "Allow",
    "Action": [
      "kms:CreateAlias",
      "kms:UpdateAlias",
      "kms:DeleteAlias"
    ],
    "Resource": "arn:aws:kms:us-west-2:111122223333:alias/test-key"
  }
  ```
+ 关联的 KMS 密钥的 `kms:DeleteAlias`。此权限必须在密钥策略或者从密钥策略委派的 IAM policy 中提供。

  ```
  {
    "Sid": "Key policy for 1234abcd-12ab-34cd-56ef-1234567890ab",
    "Effect": "Allow",
    "Principal": {
      "AWS": "arn:aws:iam::111122223333:user/KMSAdminUser"
    },
    "Action": [
      "kms:CreateAlias",
      "kms:UpdateAlias",
      "kms:DeleteAlias",
      "kms:DescribeKey"
    ],
    "Resource": "*"
  }
  ```

## 限制别名权限
<a name="alias-access-limiting"></a>

当资源为 KMS 密钥时，您可以使用条件键限制别名权限。例如，以下 IAM policy 允许对特定账户和区域中的 KMS 密钥执行别名操作。但是，它使用 k [ms: KeyOrigin](conditions-kms.md#conditions-kms-key-origin) 条件密钥进一步限制对密钥材料的 KMS 密钥的权限 AWS KMS。

有关您可以用于限制对 KMS 密钥资源的别名权限的条件键完整列表，请参阅 [AWS KMS 权限](kms-api-permissions-reference.md)。

```
{
  "Sid": "IAMPolicyKeyPermissions",
  "Effect": "Allow",
  "Resource": "arn:aws:kms:us-west-2:111122223333:key/*",
  "Action": [
    "kms:CreateAlias",
    "kms:UpdateAlias",
    "kms:DeleteAlias"
  ],
  "Condition": {
    "StringEquals": {
      "kms:KeyOrigin": "AWS_KMS"
    }
  }  
}
```

您不能在资源为别名的策略语句中使用条件键。若要限制委托人可以管理的别名，请使用控制对别名访问的 IAM policy 语句的 `Resource` 元素的值。例如，以下政策声明允许委托人创建、更新或删除 AWS 账户 和区域中的任何别名，除非别名以开头`Restricted`。

```
{
  "Sid": "IAMPolicyForAnAliasAllow",
  "Effect": "Allow",
  "Action": [
    "kms:CreateAlias",
    "kms:UpdateAlias",
    "kms:DeleteAlias"
  ],
  "Resource": "arn:aws:kms:us-west-2:111122223333:alias/*"
},
{
  "Sid": "IAMPolicyForAnAliasDeny",
  "Effect": "Deny",
  "Action": [
    "kms:CreateAlias",
    "kms:UpdateAlias",
    "kms:DeleteAlias"
  ],
  "Resource": "arn:aws:kms:us-west-2:111122223333:alias/Restricted*"
}
```