通过本文您可以了解凭据轮转的典型场景,以及通过一个或多个API调用完成凭据轮转的操作方法。

如果一个业务系统使用了凭据管家,其架构中通常有如下两类角色:

  • 凭据的消费者:也就是使用凭据的业务应用。业务应用通过持续调用GetSecretValue接口获取最新版本的凭据明文数据,将其用于访问目标系统。
  • 凭据的产生者:通常是企业IT运维系统,或者安全运维管理员。调用CreateSecret接口创建凭据对象并且存入初始值;如果需要周期性轮转凭据,则可以调用PutSecretValue接口为凭据对象存入新的版本。
本文以两个典型的场景作为范例,为您介绍如何使用凭据管家API接口实现凭据轮转,如下图所示。1

模拟场景

凭据轮转模拟场景的前提条件如下:
  • 您的运维系统已经为凭据存入了初始版本,初始版本默认被凭据管家标记为ACSCurrent
  • 您需要使用凭据的应用,调用GetSecretValue接口获取所需的凭据值,客户端仅需要指定凭据的名称,服务端返回被标记为ACSCurrent的版本凭据值。

您的运维系统对凭据进行轮转,在凭据对象中存入新版本的凭据值,当新的版本被标记为ACSCurrent之后,客户端会获取到新的凭据值。

场景1:一个API调用完成轮转

适用于在目标系统中新生成的凭据已经生效,随后再存入凭据管家的情景。例如:常见的OAuth 2.0系统中的应用密钥(App Secret)通常由系统生成,您可以将它们托管在凭据管家。轮转流程如下:
  1. 管理员在OAuth 2.0应用管理系统中,生成新的App Secret。
  2. 将新的App Secret存入托管的凭据中,同时新存入的App Secret所在版本会被标记为ACSCurrentACSCurrent标记的上一个版本被自动标记为ACSPrevious
    $ aliyun kms PutSecretValue \
      --SecretName MyOAuthAppSecret 
      --SecretData sample-app-secret \
      --VersionId v2

最后,GetSecretValue接口返回被标记为ACSCurrent状态的版本的凭据值即为最新的App Secret。

场景2:多个API调用完成轮转

更多情况下,目标系统并不会自动生成凭据。例如:RDS数据库的账号和ECS实例的SSH Key,您可以将创建的新凭据存储到凭据管家中,作为已有凭据的待定状态的版本;随后,在将新的凭据值注册到目标系统之后,将KMS凭据的待定版本更新为当前版本。

更新托管在凭据管家的数据库用户的口令通常包含如下操作:
  1. 轮转程序需要为新的口令产生一个随机的字符串。

    通过凭据管家的GetRandomPassword接口来实现。

    $ aliyun kms GetRandomPassword --ExcludePunctuation true                       
    {
        "RequestId": "e36ca295-6e47-4dfb-9df1-48d19df4****",
        "RandomPassword": "v2GwsgcuNylyYw9JGJNE5yBViGSi****"
    }
  2. 将数据库的新用户和新密码,作为一个新的版本存入凭据中。

    如下的CLI 命令会保持ACSCurrentACSPrevious标记的版本不变,将新创建的版本标记为MyPendingLabel

    $ aliyun kms PutSecretValue \
        --SecretName db_cred 
        --SecretData "{\"uname\": \"alice\", \"pwd\": \"v2GwsgcuNylyYw9JGJNE5yBViGSiZ****"}" \
        --VersionId v2 \
        --VersionStages "[\"MyPendingLabel\"]"
  3. 在目标数据库中,注册上述新的用户名和口令。

    凭据对象db_cred内的版本号为v2的凭据值,才可以用于访问目标数据库。

  4. 注册新的账号后,您可以通过以下CLI命令,将凭据对象中新存入的凭据版本设置为ACSCurrent状态。
    $ aliyun kms UpdateSecretVersionStage \
        --SecretName db_cred \
        --VersionStage ACSCurrent \
        --MoveToVersion v2

最后,GetSecretValue接口返回被标记为ACSCurrent状态的版本的凭据值即是最新的账号口令。