别名是用户主密钥的可选标识。

别名在一个阿里云账户、一个地域中具有唯一性。同一个账户在不同地域下可以拥有相同的别名。 每个别名只能指向同地域的一个用户主密钥,但是每个用户主密钥可以拥有多个别名。

一个别名一定会指向一个用户主密钥,但是别名是独立于用户主密钥存在的一个资源。别名具有以下特点:

  • 可以通过UpdateAlias更改别名关联的用户主密钥,而不会影响用户主密钥。
  • 删除别名不会删除其关联的用户主密钥。
  • 子账户操作别名,需要有别名相关资源的授权。详情参见使用RAM实现KMS资源授权
  • 别名不可更改。可以通过为一个用户主密钥创建新的别名,并且删除旧的别名来达到修改别名的目的。

当一个别名与某一个用户主密钥相关联时,在以下操作中,可以将访问参数中的密钥ID用别名代替:

  • DescribeKey
  • Encrypt
  • GenerateDataKey
  • GenerateDataKeyWithoutPlaintext

当子账户使用别名代替密钥ID进行上述操作时,子账户必须拥有对应密钥的权限,无需拥有对应别名的权限。

您可以对别名进行以下操作:

任何情况下使用别名时,都必须使用完整的别名,即别名前缀alias/与别名。

//包含前缀“alias/”的完整别名
alias/example

创建别名

  • 别名必须拥有前缀alias/。除前缀以外,支持字母、数字、下划线(_)、连字符(-)以及斜杠(/)。除前缀以外,长度限制在1~255个字符。
  • 当子账户访问创建别名时,需要同时拥有别名以及其关联密钥的权限。
  • 为同一个用户主密钥创建新的别名不会影响已有别名。
  • 创建别名的API是CreateAlias
//创建别名的RAM Policy示例:用户123456可以为密钥08ec3bb9-034f-485b-b1cd-3459baa889c7创建别名alias/example
{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "kms:CreateAlias"
      ],
      "Resource": [
        "acs:kms:cn-hangzhou:123456:key/08ec3bb9-034f-485b-b1cd-3459baa889c7",
        "acs:kms:cn-hangzhou:123456:alias/example"
      ]
    }
  ]
}
//创建别名
aliyuncli kms CreateAlias --KeyId 08ec3bb9-034f-485b-b1cd-3459baa889c7 --AliasName alias/example

更新别名

  • 更新别名可以将已有的别名关联到其他用户主密钥,对应的API为UpdateAlias
  • 当子账户访问更新别名时,需要同时拥有原密钥、目标密钥以及别名的权限。
//更新别名的RAM Policy示例:用户123456可以将密钥08ec3bb9-034f-485b-b1cd-3459baa889c7关联的别名alias/example管理到新密钥127d2f84-ee5f-4f4d-9d41-dbc1aca28788
{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "kms:UpdateAlias"
      ],
      "Resource": [
        "acs:kms:cn-hangzhou:123456:key/08ec3bb9-034f-485b-b1cd-3459baa889c7",
        "acs:kms:cn-hangzhou:123456:key/127d2f84-ee5f-4f4d-9d41-dbc1aca28788",
        "acs:kms:cn-hangzhou:123456:alias/example"
      ]
    }
  ]
}
//更新别名
aliyuncli kms UpdateAlias --AliasName alias/example --KeyId 127d2f84-ee5f-4f4d-9d41-dbc1aca28788

删除别名

  • 删除别名不会影响其关联的密钥,对应的API为DeleteAlias
  • 当子账户访问删除别名时,需要同时拥有别名以及其关联密钥的权限。
//删除别名的RAM Policy示例:用户123456可以删除别名alias/example,其关联的密钥是127d2f84-ee5f-4f4d-9d41-dbc1aca28788
{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "kms:DeleteAlias"
      ],
      "Resource": [
        "acs:kms:cn-hangzhou:123456:key/127d2f84-ee5f-4f4d-9d41-dbc1aca28788",
        "acs:kms:cn-hangzhou:123456:alias/example"
      ]
    }
  ]
}
//删除别名
aliyuncli kms DeleteAlias --AliasName alias/example

列出别名

  • 列出别名可以获取所有的别名信息,对应的API为ListAliases
  • 当子账户访问列出别名时,需要拥有别名资源类型的权限。
//列出别名的RAM Policy示例
{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "kms:ListeAliases"
      ],
      "Resource": [
        "acs:kms:cn-hangzhou:123456:alias"
      ]
    }
  ]
}
//列出别名
aliyuncli kms ListAliases

列出指定密钥关联的别名

  • 列出指定密钥关联的别名只会返回与指定密钥相关联的别名信息,对应的API为ListAliasesByKeyId
  • 当子账户访问列出指定密钥关联的别名时,只需拥有指定密钥的权限即可访问。
//出指定密钥关联的别名的RAM Policy示例:列出密钥127d2f84-ee5f-4f4d-9d41-dbc1aca28788关联的所有别名
{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "kms:DeleteAlias"
      ],
      "Resource": [
        "acs:kms:cn-hangzhou:123456:key/127d2f84-ee5f-4f4d-9d41-dbc1aca28788"
      ]
    }
  ]
}
//列出指定密钥关联的别名
aliyuncli kms ListAliasesByKeyId --KeyId 127d2f84-ee5f-4f4d-9d41-dbc1aca28788