Documentation

11. 自定义凭证类型

作为具有超级用户访问权限的管理员,您可以使用类似于 YAML/JSON 定义,以标准格式定义自定义凭证类型,允许将新凭证类型分配给作业和清单更新。这样,您可以定义一个与现有凭证类型原理相似的自定义凭证类型。例如,您可以创建一个自定义凭证类型,将第三方 Web 服务的 API 令牌注入环境变量,以供 playbook 或清单脚本使用。

自定义凭证支持以下注入身份验证信息的方法:

  • 环境变量

  • Ansible 额外变量

  • 基于文件的模板(例如生成包含凭证值的 .ini.conf 文件)

您可以为作业模板附加一个 SSH 和多个云凭证。每个云凭证必须是不同的类型。换句话说,只允许使用一个 AWS 凭证、一个 GCE 凭证等。Vault 凭证和机器凭证是单独的实体。

注解

在创建新凭证类型时,您需要避免在 extra_varsenv 和文件命名空间中发生冲突。另外,还需避免使用以 ANSIBLE_ 开头的环境变量或额外变量名称,因为它们是保留的。您必须具有 Superuser 权限才能创建和编辑凭证类型 (CredentialType),以及查看 CredentialType.injection 字段。

11.1. 从集合中获取内容

一个"受管"凭证类型 kind=galaxy 表示在运行项目更新时(例如 galaxy.ansible.com、cloud.redhat.com、内部 Automation Hub)在 requirements.yml 中定义的获取集合的内容源。 这个新类型将代表 URL 和(可选)在项目更新运行 ansible-galaxy collection install 时构建环境变量所需的身份验证详情,如 Ansible 文档所述(Configuring the ansible-galaxy client)。它有字段直接映射到提供给 Ansible Galaxy CLI 的配置选项,例如,每个服务器。 API 中的端点在机构级别反映了这些凭证的有序列表:

/api/v2/organizations/N/galaxy_credentials/

automation controller 安装会迁移面向 Galaxy 的现有的设置值,在升级后,会创建正确的凭证并附加到每个机构中。在升级到最新版本后,在升级前存在的每一个机构都会有一个与其关联的"Galaxy"凭证列表。

另外,这些设置在升级后无法通过 /api/v2/settings/jobs/ 端点查看(或进行编辑)。

即使 galaxy.ansible.com 不是机构凭证列表中的第一个凭证,automation controller 仍会继续直接从公共 Galaxy 获取角色。 全局 "Galaxy" 设置将不再会在作业级别进行配置,而是在 Tower 用户界面中的机构级别进行配置。 机构的添加和编辑窗口中带有一个可选的 Credential 查找字段,用于 kind=galaxy 的凭证。

_images/organizations-galaxy-credentials.png

将这些凭证的顺序指定为内容同步和查询的顺序非常重要。如需了解更多信息,请参阅 创建新机构。有关如何使用集合设置项目的详情,请参阅 通过 Hub 使用集合

11.2. 后向兼容 API 注意事项

支持 API 版本 2(api/v2/)意味着,作业模板与凭证有一对多的关系(包括多云支持)。凭证可以使用 v2 API 进行过滤:

$ curl "https://controller.example.org/api/v2/credentials/?credential_type__namespace=aws"

在 V2 CredentialType 模型中,关系定义如下:

机器

SSH

Vault

Vault

网络

设置环境变量(例如 ANSIBLE_NET_AUTHORIZE

SCM

源控制

EC2、AWS

很多其他服务

Insights

Insights

Galaxy

galaxy.ansible.com, cloud.redhat.com

内部 Automation Hub

11.3. 内容验证

Automation controller 使用 GNU Privacy Guard (GPG)验证内容。如需更多信息,请参阅 The GNU Privacy Handbook

11.4. 凭证类型入门

点左侧导航栏中的 Credential Types 访问 Credentials。如果没有创建自定义凭证类型,Credential Types 视图将不会显示任何自定义凭证类型,并会提示您添加一个:

Credential Types - home empty

如果创建了凭证类型,本页会显示所有现有和可用凭证类型的列表。

Credential Types - home with example credential types

要查看有关凭证类型的更多信息,请点击其名称或 Actions 栏中的编辑 (edit) 按钮。

如果适用,每个凭证类型都会在 Input Configuration 字段和 Injector Configuration 字段显示自己的唯一配置。配置字段中支持 YAML 和 JSON 两种格式。

11.5. 创建新凭证类型

要创建新凭证类型,请执行以下操作:

  1. Credential Types 屏幕中的 Add 按钮。

Create new credential type

  1. NameDescription 字段中输入正确的详情。

注解

在创建新凭证类型时,请不要为 INPUTINJECTOR 名称和 ID 使用以 ANSIBLE_ 开头的保留变量名称,因为它们对于自定义凭证类型无效。

  1. Input Configuration 字段中,指定为该类型定义一组排序字段的输入 schema。格式可以是 YAML 或 JSON,如下所示:

YAML

fields:
  - type: string
    id: username
    label: Username
  - type: string
    id: password
    label: Password
    secret: true
required:
  - username
  - password

要查看更多 YAML 示例,请访问 http://www.yaml.org/start.html

JSON

{
"fields": [
  {
  "type": "string",
  "id": "username",
  "label": "Username"
  },
  {
  "secret": true,
  "type": "string",
  "id": "password",
  "label": "Password"
   }
  ],
 "required": ["username", "password"]
}

要查看更多 JSON 示例,请访问 www.json.org

以下 JSON 格式的配置显示每个字段以及它们的使用方式:

{
  "fields": [{
    "id": "api_token",               # required - a unique name used to
                                     # reference the field value

    "label": "API Token",            # required - a unique label for the
                                     # field

    "help_text": "User-facing short text describing the field.",

    "type": ("string" | "boolean")   # defaults to 'string'

    "choices": ["A", "B", "C"]       # (only applicable to `type=string`)

    "format": "ssh_private_key"      # optional, can be used to enforce data
                                     # format validity for SSH private key
                                     # data (only applicable to `type=string`)

    "secret": true,                  # if true, the field value will be encrypted

    "multiline": false               # if true, the field should be rendered
                                     # as multi-line for input entry
                                     # (only applicable to `type=string`)
},{
    # field 2...
},{
    # field 3...
}],

"required": ["api_token"]            # optional; one or more fields can be marked as required
},

type=string 时,字段可以选择性地指定多个选择选项:

{
  "fields": [{
      "id": "api_token",          # required - a unique name used to reference the field value
      "label": "API Token",       # required - a unique label for the field
      "type": "string",
      "choices": ["A", "B", "C"]
  }]
},
  1. Injector Configuration 字段中,输入环境变量或额外变量来指定凭证类型可注入的值。格式可以为 YAML 或 JSON(请参阅上一步中的示例)。以下 JSON 格式的配置显示每个字段以及它们的使用方式:

{
  "file": {
      "template": "[mycloud]\ntoken={{ api_token }}"
  },
  "env": {
      "THIRD_PARTY_CLOUD_API_TOKEN": "{{ api_token }}"
  },
  "extra_vars": {
      "some_extra_var": "{{ username }}:{{ password }}"
  }
}

凭证类型还可生成临时文件来支持 .ini 文件或证书/密钥数据:

{
  "file": {
      "template": "[mycloud]\ntoken={{ api_token }}"
  },
  "env": {
      "MY_CLOUD_INI_FILE": "{{ tower.filename }}"
  }
}

在这个示例中,automation controller 将编写包含以下内容的临时文件:

[mycloud]\ntoken=SOME_TOKEN_VALUE

所生成文件的绝对文件路径将存储在名为 MY_CLOUD_INI_FILE 的环境变量中。

以下是在自定义凭证模板中引用多个文件的示例:

Inputs

{
  "fields": [{
    "id": "cert",
    "label": "Certificate",
    "type": "string"
  },{
    "id": "key",
    "label": "Key",
    "type": "string"
  }]
}

Injectors

  {
    "file": {
      "template.cert_file": "[mycert]\n{{ cert }}",
      "template.key_file": "[mykey]\n{{ key }}"
  },
  "env": {
      "MY_CERT_INI_FILE": "{{ tower.filename.cert_file }}",
      "MY_KEY_INI_FILE": "{{ tower.filename.key_file }}"
  }
}
  1. 完成后请点击 Save

  2. 向下滚动到屏幕底部,您新创建的凭证类型会出现在凭证类型列表中:

New credential type

edit 修改 Actions 列下的凭证类型选项。

注解

在 Edit 屏幕中,您可以修改详情或删除凭证。如果 Delete 按钮灰显,则表示凭证正在使用的凭证类型,且您必须在删除前从所有使用它的凭证类型中删除。以下是此类消息的示例:

_images/credential-types-delete-confirmation.png
  1. 验证在创建新凭证时是否可从 Credential Type 选择窗口中选择新创建的凭证类型:

Verify new credential type

有关如何创建新凭证的详情,请参阅 凭证