Documentation

10. 凭证

在针对机器启动作业、与清单源同步以及从版本控制系统中导入项目内容时,Tower 会使用凭证进行验证。

您可以在不向用户公开凭证信息的情况下,授权用户使用这些凭证。如果有用户转到另外一个团队或已离开相关机构,您将不需要对所有系统进行 re-key 的工作,因为这些凭证已存在于 Tower 中。

注解

Tower 会在 Tower 数据库中对密码和密钥信息进行加密,且永远不会通过 API 使机密信息可见。详情请参阅 Ansible Tower Administration Guide

10.1. 凭据的工作方式

Ansible Tower 使用 SSH 连接到远程主机(或 Windows 相对应的系统)。为了把密钥从 Tower 传递给 SSH,在它可以被写入 pipe 前,密钥需要被解密。Tower 然后会使用那个 pipeto 把密钥发送到 SSH(因此,它永远不会被写到磁盘)。

如果使用密码,Ansible Tower 将会直接响应密码的输入提示,并在把它写到输入提示前对密码进行解密。

10.2. 使用凭证

点击左侧导航栏中的 Credentials (credentials-icon) 图标访问 Credentials 页面。Credentials 页面包括了一个可以对其进行搜索的所有可用凭证的列表,并可根据 Name 进行排序。

Credentials - home with example credentials

添加到团队的凭证对团队所有成员都可用,而添加到用户的凭证默认只对该特定用户可用。

注解

如果删除了由其他工作项目使用的项,则会打开一条信息,列出会受到删除影响的项,并提示您确认删除。一些界面会包括无效的或以前已被删除的项,因此它们将无法运行。以下是这类信息的一个示例:

_images/warning-deletion-dependencies.png

为了帮助您尽快开始工作,系统创建了一个示例凭证以供参考。

点击**Demo Credential** 的链接可以进入这个凭证的 Details 页查看它的内容。

Credentials - home with demo credential details

点击 Permissions 显示与您的用户和团队相关联的凭证及其授权角色(owner、admin、auditor 等)

Credentials - home with permissions credential details

注解

即使在凭证被重新分配给另一个机构后,相关角色的凭证仍会保留。

您可以点击 add 按钮将这个 Demo Credential 分配给其他用户或团队。如果没有用户存在,请从 users-icon 菜单中添加用户并参阅 用户 部分了解更多详情。

10.3. 添加新凭证

创建一个新凭证

  1. 点击 Credentials 屏幕右上角的 add 按钮。

Create credential

  1. Name 字段输入新凭证的名称。

  2. (可选)输入或选择与凭证关联的机构的名称。

注解

带有与一个机构关联的一组权限的凭证将会被保留,即使这个凭证已被重新分配给另外一个机构。

  1. 输入或选择您要创建的凭证类型。

_images/credential-types-popup-window.png
  1. 根据所选的凭证类型输入相关详情,如下一部分 凭证类型 所述。

  2. 完成后请点击 Save

10.4. 凭证类型

Ansible Tower 支持以下凭证类型:

与 CyberArk、HashiCorp Vault 和 Microsoft Azure Key Management System (KMS) 关联的凭证类型是凭证插件功能的一部分。请参阅 Secret 管理系统 部分了解更多详情。

10.4.1. Amazon Web Services

选择此凭证类型可启用与 Amazon Web Services 的云清单同步。

Tower 为 AWS 凭证使用以下环境变量,并在用户界面中提示输入字段:

AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
AWS_SECURITY_TOKEN

Credentials - create AWS credential

传统的 Amazon Web Services 凭证由 AWS Access KeySecret Key 组成。

Ansible Tower 2.4.0 引入了对 EC2 STS 令牌(有时称为 IAM STS 凭证)的支持。安全令牌服务 (STS) 是一个 web 服务,可让您为 AWS Identity and Access Management (IAM) 用户请求临时的、具有有限权限的凭证。如需了解更多与 IAM/EC2 STS 令牌相关的信息,请参阅: http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html

注解

如果 EC2 中的标签值包含布尔值 (yes/no/true/false) ,您必须对它们加上引号。

警告

要使用隐式 IAM 角色凭证,在依赖 IAM 角色访问 AWS API 时请不要在 Tower 中附加 AWS 云凭证。虽然在您的作业模板中附加 AWS 云凭证似乎有意义,但这样做会强制使用您的 AWS 凭证,且不会因“失败”而使用您的 IAM 角色凭证(这是由于使用 boto 库造成的)。

10.4.2. Ansible Galaxy/Automation Hub API 令牌

选择此凭证,Tower 可以访问 Galaxy 或使用一个本地 Automation Hub 发布的集合。详情请参阅 在 Tower 中使用集合。输入 Galaxy 服务器 URL 是这个界面中唯一需要的值。

Credentials - create galaxy credential

10.4.3. Ansible Tower

选择这个凭证可让您访问另一个 Tower 实例。

Credentials - create tower credential

Ansible Tower 凭证有以下所需输入:

  • Ansible Tower Hostname:要连接的另外一个 Tower 实例的基本 URL 或 IP 地址。

  • Username:用于连接的用户名。

  • Password:用于连接的密码。

  • Oauth Token: If username and password is not used, provide an OAuth token to use to authenticate Tower.

10.4.4. GitHub 个人访问令牌

选择这个凭证后,您可以使用通过 GitHub 获取的个人访问令牌 (PAT) 访问 GitHub。详情请参阅 使用 Webhook。输入提供的令牌是这个屏幕中唯一需要的值。

Credentials - create GitHub credential

此凭证可用于建立与 GitHub 的 API 连接,以在 Webhook 侦听器作业中用于发布状态更新。

10.4.5. GitLab 个人访问令牌

选择这个凭证后,您可以使用通过 GitLab 获取的个人访问令牌 (PAT) 访问 GitLab。详情请参阅 使用 Webhook。输入提供的令牌是这个屏幕中唯一需要的值。

Credentials - create GitLab credential

此凭证可用于建立与 GitLab 的 API 连接,以在 Webhook 侦听器作业中用于发布状态更新。

10.4.6. Google Compute Engine

选择此凭证类型可启用与 Google Compute Engine (GCE) 的云清单同步。

Tower 为 GCE 凭证使用以下环境变量,并在用户界面中提示输入字段:

GCE_EMAIL
GCE_PROJECT
GCE_CREDENTIALS_FILE_PATH

Credentials - create GCE credential

GCE 凭证需要以下输入:

  • Service Account Email Address:分配给 Google Compute Engine **服务帐户**的电子邮件地址。

  • **Project**(可选):提供 GCE 分配的标识或您在项目创建时提供的唯一项目 ID。

  • **Service Account JSON File**(可选):上传 GCE 服务帐户文件。使用文件夹 (file-browser) 图标来浏览包含特殊帐户信息的文件。此信息可供 GCE 实例上运行的服务和应用程序与其他 Google Cloud Platform API 交互。这会向服务帐户和虚拟机实例授予权限。

  • RSA Private Key:与服务帐户电子邮件关联的 PEM 文件。

10.4.7. Insights

选择此凭证类型可启用与红帽 Insights 的云清单同步。

Credentials - create Insights credential

Insights 凭证包括 Insights UsernamePassword,这是用户的红帽客户门户网站帐户的用户名和密码。

10.4.8. 机器

机器凭证使 Tower 可以在您管理的主机上调用 Ansible。就像在命令行上使用 Ansible 一样,您可以指定 SSH 用户名,提供可选的密码、SSH 密钥、密钥密码,甚至可以让 Tower 在部署时提示用户输入密码。它们为 playbook 定义 ssh 和用户级权限升级访问,并在提交作业以在远程主机上运行 playbook 时使用。网络连接(httpapinetconfnetwork_cli)使用 Machine 作为凭证类型。

机器/SSH 凭证不使用环境变量,而是通过 ansible -u 标志传递用户名,并在底层 SSH 客户端提示时以互动方式写入 SSH 密码。

Credentials - create machine credential

机器凭证有几个可以配置的属性:

  • Username:用于 SSH 验证的用户名。

  • Password:用于 SSH 验证的实际密码。如果输入此密码,则它会以加密的形式加密存储在 Tower 数据库中。或者,您可以通过选择 Prompt on launch 要求用户在启动时输入密码。在这些情况下,将在作业启动时打开一个对话框,提示用户输入密码并确认密码。

  • SSH Private Key:为机器凭证复制或拖放 SSH 私钥。

  • Private Key Passphrase:如果使用的 SSH 私钥受密码保护,则可以为私钥配置密钥密码。如果输入此密码,则它会以加密的形式加密存储在 Tower 数据库中。或者,您可以通过选择 Prompt on launch 要求用户在启动时输入密码。在这些情况下,将在作业启动时打开一个对话框,提示用户输入密码并确认密码。

  • Privilege Escalation Method:指定分配给特定用户的升级特权类型。这等同于指定 --become-method=BECOME_METHOD 参数,其中 BECOME_METHOD 可以是下面描述的任一典型方法,也可以是您编写的自定义方法。输入方法的名称后,相应的名称会自动填充。

_images/credentials-create-machine-credential-priv-escalation.png
  • 空选择:如果任务/play 的 become 设置为 yes,且与空选择搭配使用,则它将默认为 sudo

  • sudo:使用超级用户(root 用户)权限执行单次命令

  • su:切换到超级用户(root 用户)帐户(或其他用户帐户)

  • pbrun:请求在受控帐户中运行应用程序或命令,并为高级 root 权限委托和键盘记录提供条件

  • pfexec:执行带有预定义的进程属性的命令,如特定的用户或组群 ID

  • dzdo:改进的 sudo 版本,它使用 Centrify 的 Active Directory 服务中的 RBAC 信息(请参阅 Centrify 的 site on DZDO

  • pmrun:请求在受控帐户中运行应用程序(请参阅 Privilege Manager for Unix 6.0

  • runas:允许您以当前用户身份运行

  • enable:切换到网络设备上的升级权限

  • doas: Allows your remote/login user to execute commands as another user via the doas ("Do as user") utility

  • ksu:允许您的远程/登录用户以另一个用户的身份通过 Kerberos 访问执行命令

  • machinectl:允许您通过 systemd 机器管理器管理容器

  • sesu:允许您的远程/登录用户以另一个用户的身份通过 CA 特权访问管理器执行命令

注解

Custom become plugins are available only starting with Ansible 2.8. For more detail on this concept, refer to Understanding Privilege Escalation https://docs.ansible.com/ansible/latest/user_guide/become.html and the list of become plugins https://docs.ansible.com/ansible/latest/plugins/become.html#plugin-list.

  • 只有在选择了权限升级选项时,才会看到 Privilege Escalation Username 字段。输入在远程系统上用于升级权限的用户名。

  • Privilege Escalation Password:只有在选择了权限升级选项时才会看到该字段。请输入在远程系统上通过所选权限升级类型验证用户的实际密码。如果输入此密码,则它会以加密的形式存储在 Tower 数据库中。或者,您可以通过选择 Prompt on launch 要求用户在启动时输入密码。在这些情况下,将在作业启动时打开一个对话框,提示用户输入密码并确认密码。

注解

sudo 密码必须与 SSH 密码或 SSH 私钥结合使用,因为 Tower 必须首先与主机建立经过身份验证的 SSH 连接,然后才能调用 sudo 以更改为 sudo 用户。

警告

Scheduled Jobs 中使用的凭证不能配置为“Prompt on launch”。

10.4.9. Microsoft Azure Resource Manager

选择此凭证类型可启用与 Microsoft Azure Resource Manager 的云清单同步。

Credentials - create Azure credential

Microsoft Azure Resource Manager 凭证有几个可以配置的属性:

  • Subscription ID:Microsoft Azure 帐户的订阅 UUID(必需)。

  • Username:用于连接 Microsoft Azure 帐户的用户名。

  • Password:用于连接 Microsoft Azure 帐户的密码。

  • Client ID:Microsoft Azure 帐户的客户端 ID。

  • Client Secret:Microsoft Azure 帐户的客户端 Secret。

  • Tenant ID:Microsoft Azure 帐户的租户 ID。

  • Azure Cloud Environment:与 Azure 云或 Azure 堆栈环境关联的变量。

这些字段等同于 API 中的变量。要传递服务主体凭证,请定义以下变量:

AZURE_CLIENT_ID
AZURE_SECRET
AZURE_SUBSCRIPTION_ID
AZURE_TENANT
AZURE_CLOUD_ENVIRONMENT

要传递一个 Active Directory 用户名/密码对,请定义以下变量:

AZURE_AD_USER
AZURE_PASSWORD
AZURE_SUBSCRIPTION_ID

您也可以将凭证作为参数传递给 playbook 中的某个任务。优先级顺序依次为参数,然后是环境变量,最后是位于您的主目录中的文件。

要将凭证作为参数传递给某个任务,请为服务主体凭证使用以下参数:

client_id
secret
subscription_id
tenant
azure_cloud_environment

或者,为 Active Directory 用户名/密码传递以下参数:

ad_user
password
subscription_id

10.4.10. 网络

**仅**当您正在通过 provider 使用 local 连接以使用 Ansible 网络模块来连接到并管理网络设备时,才应选择网络凭证类型。当连接到网络设备时,凭证类型必须与连接类型匹配:

  • 对于使用 providerlocal 连接,凭证类型应该是 Network

  • 对于所有其他网络连接(httpapinetconfnetwork_cli),凭证类型应该是 Machine

有关网络设备的可用连接类型的概述,请参阅 Multiple Communication Protocols

Tower 为网络凭证使用以下环境变量,并在用户界面中提示输入字段:

ANSIBLE_NET_USERNAME
ANSIBLE_NET_PASSWORD

Credentials - create network credential

网络凭证有几个可以配置的属性:

  • Username:与网络设备结合使用的用户名(必需)。

  • Password:与网络设备结合使用的密码。

  • SSH Private Key:复制或拖放要用于通过 SSH 向网络验证用户的实际 SSH 私钥。

  • Private Key Passphrase:要用于通过 SSH 向网络验证用户的私钥的实际密码。

  • Authorize:从 Options 字段中选择此项来控制是否进入特权模式。

  • 如果选中了 Authorize,请在“Authorize Password”字段中输入密码以访问特权模式。

有关详情请参阅 Inside Playbook 博文 Porting Ansible Network Playbooks with New Connection Plugins

10.4.11. OpenShift 或 Kubernetes API 持有者令牌

Selecting this credential type allows you to create instance groups that point to a Kubernetes or OpenShift container. For more information about this concept, refer to 执行环境.

Credentials - create Containers credential

这个示例 service account 可以用来获取以下凭证:

$ NAMESPACE=my-namespace
$ kubectl -n $NAMESPACE create -f https://docs.ansible.com/ansible-tower/latest/html/userguide/_downloads/a49648106e2c857f9b0a41e91d063c47/service-account.yml
$ SECRET_NAME=$(kubectl -n $NAMESPACE get sa awx -o json | jq -r '.secrets[0].name')
$ kubectl -n $NAMESPACE get secret $SECRET_NAME  -o json | jq -r '.data["token"]  | @base64d' # The token
$ kubectl -n $NAMESPACE get secret $SECRET_NAME  -o json | jq -r '.data["ca.crt"] | @base64d' # The CA data

容器凭证有以下输入:

  • **OpenShift 或 Kubernetes API Endpoint**(必需):用于连接到 OpenShift 或 Kubernetes 容器的端点

  • **API Authentication Bearer Token**(必需):用于验证连接的令牌

  • **Verify SSL**(可选):您可以检查该选项以允许 Tower 验证服务器的 SSL 证书是否有效且可信。使用内部或私有 CA 的环境应当不勾选此选项以禁用验证。

  • Certificate Authority Data:如果提供,请在粘贴证书时包括 BEGIN CERTIFICATEEND CERTIFICATE 行。

10.4.12. OpenStack

选择此凭证类型可启用与 OpenStack 的云清单同步。

Credentials - create OpenStack credential

OpenStack 凭证有以下所需输入:

  • Username:用于连接 OpenStack 的用户名。

  • 密码 (API Key):用于连接 OpenStack 的密码或 API 密钥。

  • Host (Authentication URL):用于身份验证的主机。

  • Project (Tenant Name):用于 OpenStack 的租户名称或租户 ID。这个值通常与用户名相同。

  • Project (Domain Name): Optionally provide the project name associated with your domain.

  • **Domain name**(可选):提供用于连接到 OpenStack 的 FQDN。

如果您有兴趣使用 OpenStack 云凭证,请参阅本指南中的 使用云凭证 以了解更多信息,包括一个示例 playbook。

10.4.13. Red Hat Satellite 6

选择此凭证类型可启用与 Red Hat Satellite 6 的云清单同步。

Tower 根据用户界面中提示的字段写入 Red Hat Satellite 配置文件。该文件的绝对路径在以下环境变量中设置:

FOREMAN_INI_PATH

Credentials - create Red Hat Satellite 6 credential

Red Hat Satellite 凭证需要以下输入:

  • Satellite 6 URL:要连接的 Red Hat Satellite 6 的 URL 或 IP 地址。

  • Username:用于连接到 Red Hat Satellite 6 的用户名。

  • Password:用于连接到 Red Hat Satellite 6 的密码。

10.4.14. Red Hat Virtualization

此凭证允许 Tower 访问由 Red Hat Virtualization (RHV) 管理的 Ansible oVirt4.py 动态清单插件。

Tower 为 Red Hat Virtualization 凭证使用以下环境变量,并在用户界面中显示字段:

OVIRT_URL
OVIRT_USERNAME
OVIRT_PASSWORD

Credentials - create rhv credential

RHV 凭证有以下所需输入:

  • Host (Authentication URL): 要连接的主机 URL 或 IP 地址。为了与清单同步,凭据 URL 需要包含 ovirt-engine/api 路径。

  • Username: 用来连接到 oVirt4 的用户名。这需要包括域配置集才能成功 username@ovirt.host.com

  • Password:用于连接的密码。

  • **CA File**(可选):提供 oVirt 证书文件的绝对路径(它的结尾可以为 .pem.cer.crt 扩展名,但最好为 .pem 以保持一致性)

10.4.15. 源控制

SCM(源控制)凭证与项目一起用于从远程修订控制系统(如 Git、Subversion 或 Mercurial)中克隆和更新本地源代码存储库。

Credentials - create SCM credential

源控制凭证有几个可以配置的属性:

  • Username:与源控制系统结合使用的用户名。

  • Password:与源控制系统结合使用的密码。

  • SCM Private Key:复制或拖放要用于通过 SSH 向源控制系统验证用户的实际 SSH 私钥。

  • Private Key Passphrase:如果使用的 SSH 私钥受密码保护,您可以为该私钥配置密钥密码。

注解

无法将源控制凭证配置为 "Prompt on launch"。如果您使用 GitHub 帐户作为 Source Control 凭证,且您的帐户上启用了 2FA(Two Factor Authenication),您需要在 password 字段中使用您的个人访问令牌,不是您的帐户密码。

10.4.16. Vault

选择此凭证类型可启用与 Ansible Vault 的清单同步。

Credentials - create Vault credential

如果应用多 Vault 凭证,则 Vault 凭证需要 Vault Password 和可选 Vault Identifier。有关 Ansible Tower 多 Vault 支持的更多信息,请参阅 Ansible Tower Administration Guide多 Vault 凭证 部分。

您可以通过选择 Prompt on launch 将 Tower 配置为要求用户在启动时输入密码。在这些情况下,将在作业启动时打开一个对话框,提示用户输入密码并确认密码。

警告

Scheduled Jobs 中使用的凭证不能配置为“Prompt on launch”。

如需有关 Ansible Vault 的更多信息,请参阅: http://docs.ansible.com/ansible/playbooks_vault.html

10.4.17. VMware vCenter

选择此凭证类型可启用与 VMware vCenter 的清单同步。

Tower 为 VMware vCenter 凭证使用以下环境变量,并在用户界面中提示输入字段:

VMWARE_HOST
VMWARE_USER
VMWARE_PASSWORD
VMWARE_VALIDATE_CERTS

Credentials - create VMware credential

VMware 凭证有以下所需输入:

  • vCenter Host:要连接的 vCenter 主机名或 IP 地址。

  • Username:用于连接到 vCenter 的用户名。

  • Password:用于连接到 vCenter 的密码。

注解

如果 VMware 客户机工具没有在这个实例中运行,VMware 清单同步可能不会返回那个实例的 IP 地址。