Ansible Tower 提供对将零个或多个凭据分配给作业模板的支持。
在 Ansible Tower 3.3 之前,作业模板在凭据方面有一些特定要求
所有作业模板(和作业)都要求正好具有一个机器/SSH 或 Vault 凭据(或两者之一)。
所有作业模板(和作业)都可以有零个或多个“额外”凭据。
额外凭据表示“云”和“网络”凭据,可用于通过环境变量(例如,AWS_ACCESS_KEY_ID
)向外部服务提供身份验证。
此模型要求使用各种分离的接口来指定作业模板上的凭据,并且它缺乏将多个 Vault 凭据与剧本运行关联起来的能力,这是一个从 Ansible 2.4 开始由 Ansible 核心支持的用例。
此模型对于某些剧本执行工作流也构成了障碍,例如,必须将“虚拟”机器/SSH 凭据附加到作业模板,仅仅是为了满足要求。
作业模板现在具有一个用于凭据分配的统一接口。从 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 凭据分配给作业模板的能力。
在 Ansible Tower 3.3 之前,作业模板具有一个可配置属性,ask_credential_on_launch
。此值在启动时用于确定哪些丢失的凭据值对于启动是必要的 - 这主要用作指定机器/SSH 凭据以满足最低凭据要求的一种方式。
在新的统一凭据列表模型下,此属性仍然存在,但它不再是“要求”凭据。现在,当 ask_credential_on_launch
为 True
时,它表示如果您愿意,您可以在启动时指定一个凭据列表以覆盖作业模板上定义的凭据。例如
POST /api/v2/job_templates/N/launch/ {'credentials': [A, B, C]}`
如果 ask_credential_on_launch
为 False
,则表示 POST /api/v2/job_templates/N/launch/
中提供的自定义凭据将被忽略。
在此模型下,ask_credential_on_launch
的唯一目的是向 API 客户端发出信号,以提示用户在启动时进行(可选)更改。
由于可以将多个凭据分配给作业,因此您可以在作业模板运行时指定要解密的多个 Vault 凭据。此功能反映了对剧本运行的多个 Vault 密码的支持在 Ansible 2.4 及更高版本中。
Vault 凭据现在有一个可选字段,vault_id
,它类似于 --vault-id
参数到 ansible-playbook
。要运行使用多个 Vault 密码的剧本
在 Tower 中为每个 Vault 密码创建一个 Vault 凭据;将 Vault ID 指定为凭据上的一个字段,并输入密码(将被加密并存储)。
通过新的凭据端点将多个 Vault 凭据分配给作业模板
POST /api/v2/job_templates/N/credentials/
{
'associate': true,
'id': X
}
或者,您可以在 Tower 用户界面中通过创建凭据页面执行相同的分配
在上面的示例中,创建的凭据指定了其 Vault 标识符(“first”)和密码对使用的密钥。当此凭据在作业模板中使用时,如以下示例所示,它将仅解密与“first”Vault ID 关联的密钥
如果您有一个以传统方式设置的剧本,所有密钥都在一个大的文件中,没有区别,那么在设置 Vault 凭据时将Vault 标识符字段留空
对于标记为“在启动时提示”的 Vault 凭据,任何相关作业模板的启动端点将通过 passwords_needed_to_start
密钥传递必要的 Vault 密码
GET /api/v2/job_templates/N/launch/
{
'passwords_needed_to_start': [
'vault_password.X',
'vault_password.Y',
]
}
X
和 Y
在上面的示例中是关联的 Vault 凭据的主键。
POST /api/v2/job_templates/N/launch/
{
'credential_passwords': {
'vault_password.X': 'first-vault-password'
'vault_password.Y': 'second-vault-password'
}
}
您可以将凭据字段链接到外部系统,而不是将敏感的凭据信息上传到 Tower,并使用它们来运行您的剧本。请参阅Ansible Tower 用户指南中的秘密管理系统部分。