AliCloud

阿里云 Secrets 引擎基于 RAM 策略动态生成阿里云访问令牌,或者基于 RAM 角色动态生成阿里云 STS 凭证。这通常简化了阿里云的使用,因为它不需要在 Web 界面中点击。阿里云 access token 是基于时间的,并且会在 Vault 租约到期时自动吊销。 STS 凭证是短暂的、不可更新的,并且会自行过期。

配置

大部分机密引擎在工作之前必须要先进行配置。这些步骤通常是由系统管理员来完成。

  1. 启用阿里云机密引擎:
$ vault secrets enable alicloud
Success! Enabled the alicloud secrets engine at: alicloud/

默认情况下,机密引擎会挂载到名字对应的路径上。要在不同路径上启用机密引擎,请使用 -path 参数。

  1. 在阿里云中创建一个自定义策略,生成的 access key 将拥有该策略。
  2. 在阿里云中创建一个用户,名字是"hashicorp-valut",在用户的 "User Authorization Policies" 节里直接授予刚才新建的策略。
  3. 在阿里云中为刚才的用户创建一个 access key,这可以在阿里云 Web UI 的用户页面中完成。
  4. 在 Vault 中配置用以调用阿里云来生成凭据的 access key:
$ vault write alicloud/config \
    access_key=0wNEpMMlzy7szvai \
    secret_key=PupkTg8jdmau1cXxYacgE736PJj4cA

或者,阿里云机密引擎可以使用设置在环境变量里的凭据,或通过实例元数据获取可用的凭据。由于它会在每次 API 调用时读取当前凭据,因此凭据更改后立即生效,无需重新启动 Vault。

如果可用,建议使用实例元数据作为凭据,因为它们是最安全的选项。这样的话,只需要确保运行 Vault 的实例具有足够的权限而不要添加任何额外的配置。

  1. 配置新建的凭据所拥有的角色。

使用阿里云已有的策略生成 access token:

$ vault write alicloud/role/policy-based \
    remote_policies='name:AliyunOSSReadOnlyAccess,type:System' \
    remote_policies='name:AliyunRDSReadOnlyAccess,type:System'

生成 access token 时动态创建策略:

$ vault write alicloud/role/policy-based \
    inline_policies=-<<EOF
[
    {
      "Statement": [
        {
          "Action": "rds:Describe*",
          "Effect": "Allow",
          "Resource": "*"
        }
      ],
      "Version": "1"
    },
    {...}
]
EOF

inline_policiesremote_policies 两者可以混合使用。他们都不可以用来生成 STS 凭据,例如:

$ vault write alibaba/role/role-based \
      role_arn='acs:ram::5138828231865461:role/hastrustedactors'

任何指定的 role_arn 在创建时都必须添加“trusted actors”。这只能在角色创建时添加。可信参与者是可以代入(assume)角色的实体。由于我们将代入角色来获取凭据,因此配置中的 access_keysecret_key 必须有资格作为受信任的参与者。

为 Vault 设置 RAM 策略的例子

虽然阿里云凭证可以由环境变量、alicloud/config 中的显式的设置或读取实例元数据提供,但该凭证需要有足够的权限来签发机密。不同的角色配置方式需要不同的权限。

这是一个示例 RAM 策略,它允许您使用任何类型的角色创建凭据:

{
  "Statement": [
    {
      "Action": [
        "ram:CreateAccessKey",
        "ram:DeleteAccessKey",
        "ram:CreatePolicy",
        "ram:DeletePolicy",
        "ram:AttachPolicyToUser",
        "ram:DetachPolicyFromUser",
        "ram:CreateUser",
        "ram:DeleteUser",
        "sts:AssumeRole"
      ],
      "Effect": "Allow",
      "Resource": "*"
    }
  ],
  "Version": "1"
}

然而,实际使用的策略应只包含根据配置的角色所必须的权限。

如果有任意角色使用了 inline_policies,我们需要以下权限:

如果有角色使用了 remote_policies,那么需要以下权限:

如果有任何权限使用了 role_arn,我们需要以下权限:

可用标志

配置完机密引擎后拥有合适权限的 Vault 令牌的用户或者机器就可以用它来生成凭据了。

  1. 通过读取 /creds 端点加上角色名的路径来生成一个新的 access key:
$ vault read alicloud/creds/policy-based
Key                Value
---                -----
lease_id           alicloud/creds/policy-based/f3e92392-7d9c-09c8-c921-575d62fe80d8
lease_duration     768h
lease_renewable    true
access_key         0wNEpMMlzy7szvai
secret_key         PupkTg8jdmau1cXxYacgE736PJj4cA

返回的 access_keysecret_key 就是阿里云文档中提到的 "AccessKeyId""AccessKeySecret"

使用 role_arn 获取的凭据会带有额外的字段:expirationsecurity_token,就像这样:

$ vault read alicloud/creds/role-based
Key                Value
---                -----
lease_id           alicloud/creds/role-based/f3e92392-7d9c-09c8-c921-575d62fe80d9
lease_duration     59m59s
lease_renewable    false
access_key         STS.L4aBSCSJVMuKg5U1vFDw
secret_key         wyLTSmsyPGP1ohvvw8xYgB29dlGI8KMiH2pKCNZ9
security_token     CAESrAIIARKAAShQquMnLIlbvEcIxO6wCoqJufs8sWwieUxu45hS9AvKNEte8KRUWiJWJ6Y+YHAPgNwi7yfRecMFydL2uPOgBI7LDio0RkbYLmJfIxHM2nGBPdml7kYEOXmJp2aDhbvvwVYIyt/8iES/R6N208wQh0Pk2bu+/9dvalp6wOHF4gkFGhhTVFMuTDRhQlNDU0pWTXVLZzVVMXZGRHciBTQzMjc0KgVhbGljZTCpnJjwySk6BlJzYU1ENUJuCgExGmkKBUFsbG93Eh8KDEFjdGlvbkVxdWFscxIGQWN0aW9uGgcKBW9zczoqEj8KDlJlc291cmNlRXF1YWxzEghSZXNvdXJjZRojCiFhY3M6b3NzOio6NDMyNzQ6c2FtcGxlYm94L2FsaWNlLyo=
expiration         2018-08-15T21:58:00Z

results matching ""

    No results matching ""