4. 多凭据分配

AWX 支持为作业模板分配零个或多个凭据。

4.1. 重要更改

作业模板现在有一个用于凭据分配的单一界面。从 API 端点

GET /api/v2/job_templates/N/credentials/

您可以使用 POST 请求关联和取消关联凭据,类似于已弃用的 extra_credentials 端点的行为

POST /api/v2/job_templates/N/credentials/ {'associate': true, 'id': 'X'}
POST /api/v2/job_templates/N/credentials/ {'disassociate': true, 'id': 'Y'}

在此模型下,即使作业模板没有分配任何凭据,也视为有效。此模型还允许用户为作业模板分配多个 Vault 凭据。

4.2. 启动时注意事项

作业模板有一个可配置的属性,ask_credential_on_launch,当设置为 True 时,表示如果需要,您可以在启动时指定凭据列表以覆盖作业模板上定义的凭据。例如

POST /api/v2/job_templates/N/launch/ {'credentials': [A, B, C]}`

如果 ask_credential_on_launchFalse,则表示 POST /api/v2/job_templates/N/launch/ 中提供的自定义凭据将被忽略。

在此模型下,ask_credential_on_launch 的唯一目的是向 API 客户端发出信号,以便在启动时提示用户进行(可选)更改。

4.3. 多 Vault 凭据

由于可以为作业分配多个凭据,因此您可以在作业模板运行时指定多个 Vault 凭据进行解密。此功能反映了 Ansible 2.4 及更高版本中对 playbook 运行的多个 Vault 密码的支持。

Vault 凭据现在有一个可选字段 vault_id,它类似于 ansible-playbook--vault-id 参数。要运行一个使用多个 Vault 密码的 playbook

  1. 在 AWX 中为每个 Vault 密码创建一个 Vault 凭据;将 Vault ID 指定为凭据上的一个字段,并输入密码(该密码将被加密并存储)。

  2. 通过新的凭据端点将多个 Vault 凭据分配给作业模板

    POST /api/v2/job_templates/N/credentials/
    
    {
        'associate': true,
        'id': X
    }
    

或者,您可以在 AWX 用户界面中“创建凭据”页面执行相同的分配

../_images/credentials-create-multivault-credential.png

在上面的示例中,创建的凭据指定其 Vault 标识符 (“first”) 和密码对将使用的密钥。当此凭据在作业模板中使用时,如以下示例所示,它将仅解密与“first”Vault ID 关联的密钥

../_images/job-template-include-multi-vault-credential.png

如果您有一个以传统方式设置的 playbook,所有密钥都在一个大型文件中且没有区别,则在设置 Vault 凭据时,请将**Vault 标识符**字段留空。

4.3.1. 提示 Vault 凭据

对于标记为“启动时提示”的 Vault 凭据的密码,任何相关作业模板的启动端点将通过 passwords_needed_to_start 密钥传达必要的 Vault 密码

GET /api/v2/job_templates/N/launch/
{
    'passwords_needed_to_start': [
        'vault_password.X',
        'vault_password.Y',
    ]
}

上面示例中的 XY 是关联的 Vault 凭据的主键。

POST /api/v2/job_templates/N/launch/
{
    'credential_passwords': {
        'vault_password.X': 'first-vault-password'
        'vault_password.Y': 'second-vault-password'
    }
}

4.3.2. 链接凭据

您可以将凭据字段链接到外部系统,并使用它们来运行您的 playbook,而不是将敏感凭据信息上传到 AWX。请参阅AWX 用户指南密钥管理系统部分。