

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

# 中的別名 AWS KMS
<a name="kms-alias"></a>

*別名*是 AWS KMS key的易記名稱。例如，別名可讓您將 KMS 金鑰稱為 `test-key`，而不是 `1234abcd-12ab-34cd-56ef-1234567890ab`。

您可以使用別名在 AWS KMS 主控台、[DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html) 操作和[密碼編譯操作](kms-cryptography.md#cryptographic-operations)中識別 KMS 金鑰，例如 [Encrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Encrypt.html) 和 [GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html)。別名也可以很容易地識別 [AWS 受管金鑰](concepts.md#aws-managed-key)。這些 KMS 金鑰的別名一律具有 `aws/<service-name>` 格式。例如， AWS 受管金鑰 適用於 Amazon DynamoDB 的 別名為 `aws/dynamodb`。您可以為專案建立類似的別名標準，例如在別名前面加上專案或品類的名稱。

您也可以根據其別名允許和拒絕存取 KMS 金鑰，而不需編輯政策或管理授權。此功能是[屬性型存取控制](abac.md) (ABAC) AWS KMS 支援的一部分。如需詳細資訊，請參閱[使用別名來控制對 KMS 金鑰的存取](alias-authorization.md)。

別名的大部分功能來自於您隨時變更與別名相關聯之 KMS 金鑰的能力。別名可以讓您的程式碼更容易撰寫和維護。例如，假設您使用別名來指代特定的 KMS 金鑰，而且您想要變更 KMS 金鑰。在這種情況下，只要將別名與不同的 KMS 金鑰建立關聯即可。您不需要變更程式碼。

別名也可以更容易在不同的 AWS 區域中重複使用相同的程式碼。在多個區域中建立具有相同名稱的別名，並將每個別名與其區域中的 KMS 金鑰產生關聯。當程式碼在每個區域中執行時，別名是指該區域中相關聯的 KMS 金鑰。如需範例，請參閱 [了解如何在應用程式中使用別名](alias-using.md)。

您可以在 AWS KMS 主控台中使用 [CreateAlias](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateAlias.html) API 或使用 [AWS::KMS::Alias CloudFormation 範本](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kms-alias.html)來建立 KMS 金鑰的別名。

 AWS KMS API 可完全控制每個帳戶和區域中的別名。API 包含用於建立別名 ([CreateAlias](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateAlias.html))、檢視別名名稱和別名 ARN ([ListAliases](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListAliases.html))、變更與別名相關聯的 KMS 金鑰 ([UpdateAlias](https://docs.aws.amazon.com/kms/latest/APIReference/API_UpdateAlias.html)) 和刪除別名 ([DeleteAlias](https://docs.aws.amazon.com/kms/latest/APIReference/API_DeleteAlias.html)) 的操作。

## 別名的運作方式
<a name="alias-about"></a>

了解別名如何在 AWS KMS運作。

**別名是獨立的 AWS 資源**  
別名不是 KMS 金鑰的屬性。您對別名所採取的動作不會影響其關聯的 KMS 金鑰。您可以為 KMS 金鑰建立別名，然後更新別名，讓其與不同的 KMS 金鑰相關聯。您甚至可以刪除別名，而不會對相關聯的 KMS 金鑰造成任何影響。不過，如果您刪除 KMS 金鑰，則會刪除與該 KMS 金鑰相關聯的所有別名。  
如果您在 IAM 政策中指定別名作為資源，則政策會指代別名，而不是關聯的 KMS 金鑰。

**每個別名都有兩種格式**  
當您建立別名時，您可以指定別名 name. AWS KMS creates the alias ARN。  
+ [別名 ARN](concepts.md#key-id-alias-ARN) 是唯一可識別別名的 Amazon Resource Name (ARN)。

  ```
  # Alias ARN
  arn:aws:kms:us-west-2:111122223333:alias/<alias-name>
  ```
+ 在帳戶和區域中，[別名名稱](concepts.md#key-id-alias-name)必須是唯一的。在 AWS KMS API 中，別名名稱一律以 為字首`alias/`。在 AWS KMS 主控台中省略該字首。

  ```
  # Alias name
  alias/<alias-name>
  ```

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

**每個別名一次都與一個 KMS 金鑰相關聯**  
別名及其 KMS 金鑰必須位於相同的帳戶和區域中。  
您可以將別名與相同 AWS 帳戶 和區域中的任何[客戶受管金鑰](concepts.md#customer-mgn-key)建立關聯。不過，您沒有將別名與 [AWS 受管金鑰](concepts.md#aws-managed-key) 相關聯的許可。  
例如，此 [ListAliases](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListAliases.html) 輸出顯示 `test-key` 別名僅與一個目標 KMS 金鑰相關聯，這由 `TargetKeyId` 屬性表示。  

```
{
     "AliasName": "alias/test-key",
     "AliasArn": "arn:aws:kms:us-west-2:111122223333:alias/test-key",
     "TargetKeyId": "1234abcd-12ab-34cd-56ef-1234567890ab",
     "CreationDate": 1593622000.191,
     "LastUpdatedDate": 1593622000.191
}
```

**多個別名可以與相同的 KMS 金鑰建立關聯**  
例如，您可以將 `test-key` 和 `project-key` 別名與相同的 KMS 金鑰相關聯。  

```
{
     "AliasName": "alias/test-key",
     "AliasArn": "arn:aws:kms:us-west-2:111122223333:alias/test-key",
     "TargetKeyId": "1234abcd-12ab-34cd-56ef-1234567890ab",
     "CreationDate": 1593622000.191,
     "LastUpdatedDate": 1593622000.191
},
{
     "AliasName": "alias/project-key",
     "AliasArn": "arn:aws:kms:us-west-2:111122223333:alias/project-key",
     "TargetKeyId": "1234abcd-12ab-34cd-56ef-1234567890ab",
     "CreationDate": 1516435200.399,
     "LastUpdatedDate": 1516435200.399
}
```

**別名在帳戶和區域中必須是唯一的。**  
例如，您在每個帳戶和區域只能有一個 `test-key` 別名。別名區分大小寫，但只有大小寫不同的別名很容易出錯。您無法變更別名名稱。但是，您可以刪除別名，並使用所需名稱建立新別名。

**但是，您可以在不同區域中使用相同的名稱建立別名。**  
例如，您可以在美國東部 (維吉尼亞北部) 有一個 `finance-key` 別名和在歐洲 (法蘭克福) 有一個 `finance-key` 別名。每個別名都會與其區域中的 KMS 金鑰相關聯。如果您的程式碼引用了類似 `alias/finance-key` 的別名名稱，則可以在多個區域中執行。在每個區域中，它會使用不同的 KMS 金鑰。如需詳細資訊，請參閱[了解如何在應用程式中使用別名](alias-using.md)。

**您可以變更與別名相關聯的 KMS 金鑰**  
您可以使用 [UpdateAlias](https://docs.aws.amazon.com/kms/latest/APIReference/API_UpdateAlias.html) 操作將別名與不同的 KMS 金鑰相關聯。例如，如果 `finance-key` 別名與 `1234abcd-12ab-34cd-56ef-1234567890ab` KMS 金鑰相關聯，則您可以對其進行更新，使其與 `0987dcba-09fe-87dc-65ba-ab0987654321` KMS 金鑰相關聯。  
不過，目前的和新的 KMS 金鑰必須是相同類型 (兩個皆為對稱或兩個皆為非對稱或兩個皆為 HMAC)，並且必須具有相同的[金鑰使用情形](create-keys.md#key-usage) (ENCRYPT\$1DECRYPT 或 SIGN\$1VERIFY 或 GENERATE\$1VERIFY\$1MAC)。此限制可避免使用別名之程式碼中的錯誤。如果您必須將別名與不同類型的金鑰建立關聯，且已降低風險，則可以刪除並重新建立別名。

**某些 KMS 金鑰沒有別名**  
在 AWS KMS 主控台中建立 KMS 金鑰時，您必須為其提供新的別名。但是，當使用 [CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.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 金鑰可能有數個別名，有些金鑰可能沒有。

**AWS 會在您的帳戶中建立別名**  
AWS 會在您的帳戶中為 建立別名[AWS 受管金鑰](concepts.md#aws-managed-key)。這些別名有 `alias/aws/<service-name>` 格式的名稱，例如 `alias/aws/s3`。  
有些別名沒有 KMS AWS 金鑰。當您開始使用服務 AWS 受管金鑰 時，這些預先定義的別名通常與 相關聯。

**使用別名來識別 KMS 金鑰**  
您可以使用[別名名稱](concepts.md#key-id-alias-name)或[別名 ARN](concepts.md#key-id-alias-ARN) 來識別[密碼編譯操作](kms-cryptography.md#cryptographic-operations)中的 KMS 金鑰、[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 金鑰位於不同的 AWS 帳戶](key-policy-modifying-external-accounts.md)，您必須使用其[金鑰 ARN](concepts.md#key-id-key-ARN) 或別名 ARN。) 別名在其他 AWS KMS 操作中不是 KMS 金鑰的有效識別符。如需每個 AWS KMS API 操作之有效[金鑰識別符](concepts.md#key-id)的相關資訊，請參閱 *AWS Key Management Service API 參考*中的`KeyId`參數說明。  
您不能使用別名名稱或別名 ARN 來[識別 IAM 政策中的 KMS 金鑰](cmks-in-iam-policies.md)。若要根據其別名控制對 KMS 金鑰的存取權，請使用 [kms:RequestAlias](conditions-kms.md#conditions-kms-request-alias) 或 [kms:ResourceAliases](conditions-kms.md#conditions-kms-resource-aliases) 條件索引鍵。如需詳細資訊，請參閱[適用於 的 ABAC AWS KMS](abac.md)。

# 控制對別名的存取
<a name="alias-access"></a>

當您建立或變更別名時，會影響別名及其關聯的 KMS 金鑰。因此，管理別名的委託人必須具有對別名和所有受影響之 KMS 金鑰呼叫別名操作的許可。您可以使用[金鑰政策](key-policies.md)、[IAM 政策](iam-policies.md)和[授權](grants.md)來提供這些許可。

**注意**  
授予委託人管理標籤和別名的許可時，請務必謹慎。變更標記或別名可允許或拒絕客戶受管金鑰的許可。如需詳細資訊，請參閱 [適用於 的 ABAC 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 政策中提供此許可。

  下列範例政策陳述式會指定 `Resource` 元素中的特定別名。但是，您可以列出多個別名 ARN 或指定別名模式，例如 "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 政策中提供此許可。

  ```
  {
    "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 金鑰。例如，您可使用 [kms: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 政策的 `kms:ListAliases` 許可。由於此政策與任何特定 KMS 金鑰或別名資源無關，因此政策中資源元素的值[必須為 `"*"`](iam-policies-best-practices.md#require-resource-star)。

例如，下列 IAM 政策陳述式會授予委託人許可，以列出帳戶和區域中的所有 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 政策中提供此許可。下列 IAM 政策會指定特定別名。但是，您可以列出多個別名 ARN 或指定別名模式，例如 `"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 政策中提供此許可。

  ```
  {
    "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 政策中提供此許可。

  ```
  {
    "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 金鑰，或者兩個金鑰皆限制。例如，您可以使用 [kms: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 政策中提供此許可。

  下列範例政策陳述式會指定 `Resource` 元素中的別名。但是，您可以列出多個別名 ARN 或指定別名模式，例如 `"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 政策中提供此許可。

  ```
  {
    "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 政策允許在特定帳戶和區域中對 KMS 金鑰執行別名操作。不過，它會使用 [kms: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 政策陳述式 (可控制對別名的存取) 之 `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*"
}
```

# 建立別名
<a name="alias-create"></a>

您可以在 AWS KMS 主控台或使用 AWS KMS API 操作建立別名。

別名必須是 1-256 個字元的字串。它只能包含英數字元、斜線 (/)、底線 (\$1) 和破折號 (-)。[客戶受管金鑰](concepts.md#customer-mgn-key)的別名名稱不能以 `alias/aws/` 開頭。此 `alias/aws/` 字首已保留供 [AWS 受管金鑰](concepts.md#aws-managed-key) 使用。

您可以為新的 KMS 金鑰或現有的 KMS 金鑰建立別名。您可以新增別名，以便在專案或應用程式中使用特定的 KMS 金鑰。

您也可以使用 AWS CloudFormation 範本來建立 KMS 金鑰的別名。如需詳細資訊，請參閱*AWS CloudFormation 《 使用者指南*》中的 [AWS::KMS::Alias](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kms-alias.html)。

## 使用 AWS KMS 主控台
<a name="alias-create-console"></a>

在 AWS KMS 主控台中[建立 KMS 金鑰](create-keys.md)時，您必須為新的 KMS 金鑰建立別名。若要為現有的 KMS 金鑰建立別名，請使用 KMS 金鑰詳細資訊頁面上的 **Aliases** (別名) 索引標籤。

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

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

1. 在導覽窗格中，選擇 **Customer managed keys** (客戶受管金鑰)。您無法管理 AWS 受管金鑰 或 的別名 AWS 擁有的金鑰。

1. 在資料表中，選擇 KMS 金鑰的金鑰 ID 或別名。然後，在 KMS 金鑰詳細資訊頁面上，選擇 **Aliases** (別名) 索引標籤。

   如果 KMS 金鑰有多個別名，**Aliases** (別名) 資料行會顯示一個別名和別名摘要，例如 **(\$1*n* 等)**。選擇別名摘要會直接帶您前往 KMS 金鑰詳細資訊頁面上的 **Aliases** (別名) 索引標籤。

1. 在 **Aliases** (別名) 索引標籤中，選擇 **Create alias** (建立別名)。輸入別名名稱，然後選擇 **Create alias** (建立別名)。
**重要**  
請勿在此欄位包含機密或敏感資訊。此欄位可能在 CloudTrail 日誌與其他輸出中以純文字顯示。
**注意**  
請勿加入 `alias/` 字首。主控台會自動執行此操作。如果您輸入 `alias/ExampleAlias`，實際的別名名稱將是 `alias/alias/ExampleAlias`。

## 使用 AWS KMS API
<a name="alias-create-api"></a>

若要建立別名，請使用 [CreateAlias](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateAlias.html) 操作。不同於在主控台中建立 KMS 金鑰的程序，[CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html) 操作不會為新的 KMS 金鑰建立別名。

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

您可以使用 `CreateAlias` 操作為沒有別名的新 KMS 金鑰建立別名。您也可以使用 `CreateAlias` 操作將別名新增至任何現有的 KMS 金鑰，或重新建立意外刪除的別名。

在 AWS KMS API 操作中，別名名稱必須以 開頭，`alias/`後面接著名稱，例如 `alias/ExampleAlias`。別名在帳戶和區域中必須是唯一的。若要尋找已在使用中的別名，請使用 [ListAliases](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListAliases.html) 操作。別名名稱區分大小寫。

`TargetKeyId` 可以為相同 AWS 區域中的任一項[客戶受管金鑰](concepts.md#customer-mgn-key)。若要識別 KMS 金鑰，請使用它的[金鑰 ID](concepts.md#key-id-key-id) 或[金鑰 ARN](concepts.md#key-id-key-ARN)。您無法使用另一個別名。

下列範例會建立 `example-key` 別名，並將其與指定的 KMS 金鑰建立關聯。這些範例使用 AWS Command Line Interface (AWS CLI)。如需多種程式設計語言的範例，請參閱[`CreateAlias` 搭配 AWS SDK 或 CLI 使用](example_kms_CreateAlias_section.md)。

```
$ aws kms create-alias \
    --alias-name alias/example-key \
    --target-key-id 1234abcd-12ab-34cd-56ef-1234567890ab
```

`CreateAlias` 不會傳回任何輸出。若要查看新別名，請使用 `ListAliases` 操作。如需詳細資訊，請參閱[使用 AWS KMS API](alias-view.md#alias-view-api)。

# 尋找 KMS 金鑰的別名名稱和別名 ARN
<a name="alias-view"></a>

別名可讓您在 AWS KMS 主控台中輕鬆識別 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 金鑰的屬性) 不包含別名。

下列程序示範如何使用 AWS KMS 主控台和 AWS KMS API 檢視和識別與 KMS 金鑰相關聯的別名。 AWS KMS API 範例使用 [AWS Command Line Interface (AWS CLI)](https://aws.amazon.com/cli/)，但您可以使用任何支援的程式設計語言。

## 使用 AWS KMS 主控台
<a name="alias-view-console"></a>

 AWS KMS 主控台會顯示與 KMS 金鑰相關聯的別名。

1. 在 https：//[https://console.aws.amazon.com/kms](https://console.aws.amazon.com/kms) 開啟 AWS KMS 主控台。

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

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

1. **Aliases** (別名) 欄會顯示每個 KMS 金鑰的別名。如果 KMS 金鑰沒有別名，則會在 **Aliases** (別名) 資料欄中使用破折號 (**-**) 顯示。

   如果 KMS 金鑰有多個別名，**Aliases** (別名) 資料欄也有別名摘要，例如 **(\$1*n* more)** (\$1n 等)。例如，下列 KMS 金鑰有兩個別名，其中一個是 `key-test`。

   若要尋找 KMS 金鑰所有別名的別名名稱和別名 ARN，請使用 **Aliases** (別名) 索引標籤。
   + 若要直接移至 **Aliases** (別名) 欄中的 **Aliases** (別名) 索引標籤，請選擇別名摘要 (**\$1*n* 等**)。只有在 KMS 金鑰具有多個別名時，才會顯示別名摘要。
   + 或者，選擇 KMS 金鑰的別名或金鑰 ID (這會開啟 KMS 金鑰的詳細資訊頁面)，然後選擇 **Aliases** (別名) 索引標籤。索引標籤位於 **General configuration** (一般組態) 區段。  
![\[客戶受管金鑰 interface showing a list with one key and options to create or filter keys.\]](http://docs.aws.amazon.com/zh_tw/kms/latest/developerguide/images/find-alias-name-1-sm.png)

1. **Aliases** (別名) 索引標籤會顯示 KMS 金鑰所有別名的別名名稱和別名 ARN。您也可以在此索引標籤上建立並刪除 KMS 金鑰的別名。  
![\[Aliases tab showing two key aliases with their names and ARNs listed in a table format.\]](http://docs.aws.amazon.com/zh_tw/kms/latest/developerguide/images/alias-tab-1.png)

**AWS 受管金鑰**  
您可以使用別名來辨識 AWS 受管金鑰，如本範例**AWS 受管金鑰**頁面所示。 AWS 受管金鑰 的別名一律具有以下格式：`aws/<service-name>`。例如， AWS 受管金鑰 適用於 Amazon DynamoDB 的 別名為 `aws/dynamodb`。

![\[AWS KMS 主控台 AWS 受管金鑰 頁面中的別名\]](http://docs.aws.amazon.com/zh_tw/kms/latest/developerguide/images/alias-console-aws-managed-sm.png)


## 使用 AWS KMS API
<a name="alias-view-api"></a>

[ListAliases](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListAliases.html) 操作會傳回帳戶和區域中別名的別名名稱和別名 ARN。輸出包含客戶受管金鑰的 AWS 受管金鑰 和 別名。 AWS 受管金鑰 別名具有格式 `aws/<service-name>`，例如 `aws/dynamodb`。

回應可能也包含沒有 `TargetKeyId` 欄位的別名。這些是 AWS 已建立但尚未與 KMS 金鑰建立關聯的預先定義別名。

```
$ aws kms list-aliases
{
    "Aliases": [
        {
            "AliasName": "alias/access-key",
            "AliasArn": "arn:aws:kms:us-west-2:111122223333:alias/access-key",
            "TargetKeyId": "0987dcba-09fe-87dc-65ba-ab0987654321",
            "CreationDate": 1516435200.399,
            "LastUpdatedDate": 1516435200.399
        },        
        {
            "AliasName": "alias/ECC-P521-Sign",
            "AliasArn": "arn:aws:kms:us-west-2:111122223333:alias/ECC-P521-Sign",
            "TargetKeyId": "1234abcd-12ab-34cd-56ef-1234567890ab",
            "CreationDate": 1693622000.704,
            "LastUpdatedDate": 1693622000.704
        },
        {
            "AliasName": "alias/ImportedKey",
            "AliasArn": "arn:aws:kms:us-west-2:111122223333:alias/ImportedKey",
            "TargetKeyId": "1a2b3c4d-5e6f-1a2b-3c4d-5e6f1a2b3c4d",
            "CreationDate": 1493622000.704,
            "LastUpdatedDate": 1521097200.235
        },
        {
            "AliasName": "alias/finance-project",
            "AliasArn": "arn:aws:kms:us-west-2:111122223333:alias/finance-project",
            "TargetKeyId": "0987dcba-09fe-87dc-65ba-ab0987654321",
            "CreationDate": 1604958290.014,
            "LastUpdatedDate": 1604958290.014
        },
        {
            "AliasName": "alias/aws/dynamodb",
            "AliasArn": "arn:aws:kms:us-west-2:111122223333:alias/aws/dynamodb",
            "TargetKeyId": "0987ab65-43cd-21ef-09ab-87654321cdef",
            "CreationDate": 1521097200.454,
            "LastUpdatedDate": 1521097200.454
        },
        {
            "AliasName": "alias/aws/ebs",
            "AliasArn": "arn:aws:kms:us-west-2:111122223333:alias/aws/ebs",
            "TargetKeyId": "abcd1234-09fe-ef90-09fe-ab0987654321",
            "CreationDate": 1466518990.200,
            "LastUpdatedDate": 1466518990.200
        }
    ]
}
```

若要取得與特定 KMS 金鑰關聯的所有別名，請使用 `ListAliases` 操作的選用 `KeyId` 參數。`KeyId` 參數採用 KMS 金鑰的[金鑰 ID](concepts.md#key-id-key-id) 或[金鑰 ARN](concepts.md#key-id-key-ARN)。

此範例會將所有別名與 `0987dcba-09fe-87dc-65ba-ab0987654321` KMS 金鑰關聯。

```
$ aws kms list-aliases --key-id 0987dcba-09fe-87dc-65ba-ab0987654321
{
    "Aliases": [
        {
            "AliasName": "alias/access-key",
            "AliasArn": "arn:aws:kms:us-west-2:111122223333:alias/access-key",
            "TargetKeyId": "0987dcba-09fe-87dc-65ba-ab0987654321",
            "CreationDate": "2018-01-20T15:23:10.194000-07:00",
            "LastUpdatedDate": "2018-01-20T15:23:10.194000-07:00"
        },
        {
            "AliasName": "alias/finance-project",
            "AliasArn": "arn:aws:kms:us-west-2:111122223333:alias/finance-project",
            "TargetKeyId": "0987dcba-09fe-87dc-65ba-ab0987654321",
            "CreationDate": 1604958290.014,
            "LastUpdatedDate": 1604958290.014
        }
    ]
}
```

`KeyId` 參數不會採用萬用字元，但您可以使用程式設計語言的功能來篩選回應。

例如，下列 AWS CLI 命令只會取得 的別名 AWS 受管金鑰。

```
$ aws kms list-aliases --query 'Aliases[?starts_with(AliasName, `alias/aws/`)]'
```

下列命令只會取得 `access-key` 別名。別名名稱區分大小寫。

```
$ aws kms list-aliases --query 'Aliases[?AliasName==`alias/access-key`]'
[
    {
        "AliasName": "alias/access-key",
        "AliasArn": "arn:aws:kms:us-west-2:111122223333:alias/access-key",
        "TargetKeyId": "0987dcba-09fe-87dc-65ba-ab0987654321",
        "CreationDate": "2018-01-20T15:23:10.194000-07:00",
        "LastUpdatedDate": "2018-01-20T15:23:10.194000-07:00"
    }
]
```

# 更新別名
<a name="alias-update"></a>

由於別名是獨立的資源，因此您可以變更與別名相關聯的 KMS 金鑰。例如，如果 `test-key` 別名與一個 KMS 金鑰相關聯，則您可以使用 [UpdateAlias](https://docs.aws.amazon.com/kms/latest/APIReference/API_UpdateAlias.html) 操作，將其與不同的 KMS 金鑰建立關聯。這是[手動輪換 KMS 金鑰](rotate-keys.md)的幾種方式之一，不會變更其金鑰材料。您也可以更新 KMS 金鑰，以便針對新資源使用 KMS 金鑰的應用程式現在使用不同的 KMS 金鑰。

您無法在 AWS KMS 主控台中更新別名。您也無法使用 `UpdateAlias` (或任何其他操作) 來變更別名名名稱。若要變更別名名稱，請刪除目前別名，然後為 KMS 金鑰建立新的別名。

更新別名時，當前 KMS 金鑰和新 KMS 金鑰必須為相同類型 (兩者皆為對稱或非對稱或 HMAC)。也必須有相同的金鑰用途 (`ENCRYPT_DECRYPT` 或 `SIGN_VERIFY` 或 GENERATE\$1VERIFY\$1MAC)。這項限制可防止使用別名的程式碼中出現密碼編譯錯誤。

下列範例透過使用 [ListAliases](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListAliases.html) 操作開始，以顯示 `test-key` 別名目前與 KMS 金鑰 `1234abcd-12ab-34cd-56ef-1234567890ab` 建立關聯。

```
$ aws kms list-aliases --key-id 1234abcd-12ab-34cd-56ef-1234567890ab
{
    "Aliases": [
        {
            "AliasName": "alias/test-key",
            "AliasArn": "arn:aws:kms:us-west-2:111122223333:alias/test-key",
            "TargetKeyId": "1234abcd-12ab-34cd-56ef-1234567890ab",
            "CreationDate": 1593622000.191,
            "LastUpdatedDate": 1593622000.191
        }
    ]
}
```

接下來，它使用 `UpdateAlias` 操作來將與 `test-key` 別名關聯的 KMS 金鑰變更為 KMS 金鑰 `0987dcba-09fe-87dc-65ba-ab0987654321`。您不需要指定目前關聯的 KMS 金鑰，只需指定新的 (「目標」) KMS 金鑰。別名名稱區分大小寫。

```
$ aws kms update-alias --alias-name 'alias/test-key' --target-key-id 0987dcba-09fe-87dc-65ba-ab0987654321
```

若要驗證別名是否已與目標 KMS 金鑰關聯，請再次使用 `ListAliases` 操作。此 AWS CLI 命令使用 `--query` 參數僅取得`test-key`別名。`TargetKeyId` 和 `LastUpdatedDate` 欄位會更新。

```
$ aws kms list-aliases --query 'Aliases[?AliasName==`alias/test-key`]'
[
    {
        "AliasName": "alias/test-key",
        "AliasArn": "arn:aws:kms:us-west-2:111122223333:alias/test-key",
        "TargetKeyId": "0987dcba-09fe-87dc-65ba-ab0987654321",
        "CreationDate": 1593622000.191,
        "LastUpdatedDate": 1604958290.154
    }
]
```

# 刪除別名
<a name="alias-delete"></a>

您可以在 AWS KMS 主控台或使用 [DeleteAlias](https://docs.aws.amazon.com/kms/latest/APIReference/API_DeleteAlias.html) 操作來刪除別名。在刪除別名前，請確認別名未處於使用中狀態。雖然刪除別名並不會影響相關聯的 KMS 金鑰，但它可能會對使用別名的任何應用程式造成問題。如果不小心刪除了別名，您可以建立具有相同名稱的新別名，並將其與相同或不同的 KMS 金鑰產生關聯。

如果刪除 KMS 金鑰，則會刪除與該 KMS 金鑰相關聯的所有別名。

## 使用 AWS KMS 主控台
<a name="alias-delete-console"></a>

若要刪除 AWS KMS 主控台中的別名，請使用 KMS 金鑰詳細資訊頁面上的**別名**索引標籤。您可以一次刪除 KMS 金鑰的多個別名。

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

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

1. 在導覽窗格中，選擇 **Customer managed keys** (客戶受管金鑰)。您無法管理 AWS 受管金鑰 或 的別名 AWS 擁有的金鑰。

1. 在資料表中，選擇 KMS 金鑰的金鑰 ID 或別名。然後，在 KMS 金鑰詳細資訊頁面上，選擇 **Aliases** (別名) 索引標籤。

   如果 KMS 金鑰有多個別名，**Aliases** (別名) 資料行會顯示一個別名和別名摘要，例如 **(\$1*n* 等)**。選擇別名摘要會直接帶您前往 KMS 金鑰詳細資訊頁面上的 **Aliases** (別名) 索引標籤。

1. 在 **Aliases** (別名) 索引標籤上，選取您要刪除之別名旁邊的核取方塊。然後選擇**刪除**。

## 使用 AWS KMS API
<a name="alias-delete-api"></a>

若要刪除別名，請使用 [DeleteAlias](https://docs.aws.amazon.com/kms/latest/APIReference/API_DeleteAlias.html) 操作。此操作一次會刪除一個別名。別名名稱區分大小寫，且前面必須加上 `alias/` 字首。

例如，以下命令會刪除 `test-key` 別名。此命令不會傳回任何輸出。

```
$ aws kms delete-alias --alias-name alias/test-key
```

若要確認是否已刪除別名，請使用 [ListAliases](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListAliases.html) 操作。下列命令使用 中的 `--query` 參數 AWS CLI 來僅取得`test-key`別名。回應中的空括號表示 `ListAliases` 回應中未包含 `test-key` 別名。若要消除括號，請使用 `--output text` 參數和值。

```
$ aws kms list-aliases --query 'Aliases[?AliasName==`alias/test-key`]'
[]
```

# 使用別名來控制對 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"
```

# 了解如何在應用程式中使用別名
<a name="alias-using"></a>

您可以使用別名來代表應用程式程式碼中的 KMS 金鑰。`KeyId` 參數 AWS 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) 接受別名名稱或別名 ARN。

例如，下列 `GenerateDataKey` 命令會使用別名名稱 (`alias/finance`) 來識別 KMS 金鑰。別名名稱為 `KeyId` 參數的值。

```
$ aws kms generate-data-key --key-id alias/finance --key-spec AES_256
```

如果 KMS 金鑰位於不同的 中 AWS 帳戶，您必須在這些操作中使用金鑰 ARN 或別名 ARN。使用別名 ARN 時，請記住 KMS 金鑰的別名是在擁有 KMS 金鑰的帳戶中定義的，且在每個區域中可能會有所不同。如需尋找別名 ARN 的說明，請參閱 [尋找 KMS 金鑰的別名名稱和別名 ARN](alias-view.md)。

例如，下列 `GenerateDataKey` 命令會使用不位於呼叫者帳戶中的 KMS 金鑰。`ExampleAlias` 別名與指定帳戶和區域中的 KMS 金鑰相關聯。

```
$ aws kms generate-data-key --key-id arn:aws:kms:us-west-2:444455556666:alias/ExampleAlias --key-spec AES_256
```

其中一個最強大的別名用途是在多個 AWS 區域中執行之應用程式中使用。例如，您可能有使用 RSA [非對稱 KMS 金鑰](symmetric-asymmetric.md)的全域應用程式，以進行簽章和驗證。
+ 在美國西部 (奧勒岡) (us-west-2) 中，您想要使用 `arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab`。
+ 在歐洲 (法蘭克福) (eu-central-1) 中，您想要使用 `arn:aws:kms:eu-central-1:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321`
+ 在亞太區域 (新加坡) (ap-southeast-1) 中，您想要使用 `arn:aws:kms:ap-southeast-1:111122223333:key/1a2b3c4d-5e6f-1a2b-3c4d-5e6f1a2b3c4d`。

您可以在每個區域中建立不同版本的應用程式，或使用字典或 switch 陳述式為每個區域選取正確的 KMS 金鑰。但是，更輕鬆的方式是在每個區域中建立具有相同別名名稱的別名。請記住，別名名稱區分大小寫。

```
aws --region us-west-2 kms create-alias \
    --alias-name alias/new-app \
    --key-id arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab

aws --region eu-central-1 kms create-alias \
    --alias-name alias/new-app \
    --key-id arn:aws:kms:eu-central-1:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321

aws --region ap-southeast-1 kms create-alias \
    --alias-name alias/new-app \
    --key-id arn:aws:kms:ap-southeast-1:111122223333:key/1a2b3c4d-5e6f-1a2b-3c4d-5e6f1a2b3c4d
```

然後，在程式碼中使用別名。當程式碼在每個區域中執行時，別名會參照其在該區域中關聯的 KMS 金鑰。例如，此程式碼會使用別名名稱呼叫 [Sign](https://docs.aws.amazon.com/kms/latest/APIReference/API_Sign.html) 操作。

```
aws kms sign --key-id alias/new-app \
    --message $message \
    --message-type RAW \
    --signing-algorithm RSASSA_PSS_SHA_384
```

不過，風險是有可能會刪除或更新別名，以與不同的 KMS 金鑰相關聯。在這種情況下，應用程式嘗試使用別名名稱驗證簽章將會失敗，您可能需要重新建立或更新別名。

若要降低此風險，請謹慎授予委託人管理您在應用程式中使用之別名的許可。如需詳細資訊，請參閱[控制對別名的存取](alias-access.md)。

對於在多個 AWS 區域中加密資料的應用程式，還有幾個其他解決方案，包括 [AWS Encryption SDK](https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/)。

# 在 AWS CloudTrail 日誌中尋找別名
<a name="alias-ct"></a>

您可以使用別名來代表 AWS KMS API 操作 AWS KMS key 中的 。當您這麼做時，KMS 金鑰的別名和金鑰 ARN 會記錄在事件的 AWS CloudTrail 日誌項目中。別名會顯示在 `requestParameters` 欄位。金鑰 ARN 會顯示在 `resources` 欄位。即使 AWS 服務在您的帳戶 AWS 受管金鑰 中使用 ，也是如此。

例如，下列 [GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) 請求會使用 `project-key` 別名來代表 KMS 金鑰。

```
$ aws kms generate-data-key --key-id alias/project-key --key-spec AES_256
```

當此請求記錄在 CloudTrail 日誌中時，日誌項目會包含實際使用 KMS 金鑰的別名和金鑰 ARN。

```
{
    "eventVersion": "1.05",
    "userIdentity": {
        "type": "IAMUser",
        "principalId": "ABCDE",
        "arn": "arn:aws:iam::111122223333:role/ProjectDev",
        "accountId": "111122223333",
        "accessKeyId": "FFHIJ",
        "userName": "example-dev"
    },
    "eventTime": "2020-06-29T23:36:41Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "GenerateDataKey",
    "awsRegion": "us-west-2",
    "sourceIPAddress": "205.205.123.000",
    "userAgent": "aws-cli/1.18.89 Python/3.6.10 Linux/4.9.217-0.1.ac.205.84.332.metal1.x86_64 botocore/1.17.12",
    "requestParameters": {
        "keyId": "alias/project-key",
        "keySpec": "AES_256"
    },
    "responseElements": null,
    "requestID": "d93f57f5-d4c5-4bab-8139-5a1f7824a363",
    "eventID": "d63001e2-dbc6-4aae-90cb-e5370aca7125",
    "readOnly": true,
    "resources": [
        {
            "accountId": "111122223333",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
        }
    ],
    "eventType": "AwsApiCall",
    "recipientAccountId": "111122223333"
}
```

如需有關在 CloudTrail 日誌中記錄 AWS KMS 操作的詳細資訊，請參閱 [使用 記錄 AWS KMS API 呼叫 AWS CloudTrail](logging-using-cloudtrail.md)。