azure - AWX docker : How to authenticate with Azure using Active Directory. 对我不起作用

标签 azure docker ansible azure-active-directory ansible-awx

我已经敲头大约一个星期了。

我通过 docker-compose 运行 AWX,并在 EC2 实例上进行设置。 我的部门没有创建 Azure 服务主体的凭据,因此在等待该请求通过时,我尝试让 AWX 通过 Active Directory 凭据向 Azure 进行身份验证。在测试时,为了简单起见,我有一个运行 azure_rm_dnsrecordset_facts 的测试任务设置,因此我可以简单地提取 TXT 记录来显示身份验证正在进行身份验证。在我的开发计算机上,我可以安装 azure cli,运行 az login 并通过 ansible-playbook 命令执行 playbooks 等,它可以工作:我可以看到测试提取了预期的 TXT 记录。但在 AWX 上我收到错误。

使用 az 登录并将/root/.azure/处的文件复制到/var/lib/awx/.azure/我收到此错误:

{
    "_ansible_parsed": false,
    "exception": "Traceback (most recent call last):\n  File \"/root/.ansible/tmp/ansible-tmp-1558728025.48-180262108746971/AnsiballZ_azure_rm_dnsrecordset_facts.py\", line 113, in <module>\n    _ansiballz_main()\n  File \"/root/.ansible/tmp/ansible-tmp-1558728025.48-180262108746971/AnsiballZ_azure_rm_dnsrecordset_facts.py\", line 105, in _ansiballz_main\n    invoke_module(zipped_mod, temp_path, ANSIBALLZ_PARAMS)\n  File \"/root/.ansible/tmp/ansible-tmp-1558728025.48-180262108746971/AnsiballZ_azure_rm_dnsrecordset_facts.py\", line 48, in invoke_module\n    imp.load_module('__main__', mod, module, MOD_DESC)\n  File \"/tmp/ansible_azure_rm_dnsrecordset_facts_payload_PlPfUW/__main__.py\", line 202, in <module>\n  File \"/tmp/ansible_azure_rm_dnsrecordset_facts_payload_PlPfUW/__main__.py\", line 198, in main\n  File \"/tmp/ansible_azure_rm_dnsrecordset_facts_payload_PlPfUW/__main__.py\", line 133, in __init__\n  File \"/tmp/ansible_azure_rm_dnsrecordset_facts_payload_PlPfUW/ansible_azure_rm_dnsrecordset_facts_payload.zip/ansible/module_utils/azure_rm_common.py\", line 301, in __init__\n  File \"/tmp/ansible_azure_rm_dnsrecordset_facts_payload_PlPfUW/ansible_azure_rm_dnsrecordset_facts_payload.zip/ansible/module_utils/azure_rm_common.py\", line 1045, in __init__\n  File \"/var/lib/awx/venv/ansible/lib/python2.7/site-packages/msrestazure/azure_active_directory.py\", line 383, in __init__\n    self.set_token()\n  File \"/var/lib/awx/venv/ansible/lib/python2.7/site-packages/msrestazure/azure_active_directory.py\", line 415, in set_token\n    raise_with_traceback(AuthenticationError, \"\", err)\n  File \"/var/lib/awx/venv/ansible/lib/python2.7/site-packages/msrest/exceptions.py\", line 48, in raise_with_traceback\n    raise error\nmsrest.exceptions.AuthenticationError: , InvalidGrantError: (invalid_grant) AADSTS50126: Invalid username or password.\r\nTrace ID: 01cd8ac6-1c05-4391-96da-031e0da30500\r\nCorrelation ID: 03f28850-04cf-4344-b405-18594d8845a1\r\nTimestamp: 2019-05-24 20:00:26Z\n",
    "_ansible_no_log": false,
    "module_stderr": "Traceback (most recent call last):\n  File \"/root/.ansible/tmp/ansible-tmp-1558728025.48-180262108746971/AnsiballZ_azure_rm_dnsrecordset_facts.py\", line 113, in <module>\n    _ansiballz_main()\n  File \"/root/.ansible/tmp/ansible-tmp-1558728025.48-180262108746971/AnsiballZ_azure_rm_dnsrecordset_facts.py\", line 105, in _ansiballz_main\n    invoke_module(zipped_mod, temp_path, ANSIBALLZ_PARAMS)\n  File \"/root/.ansible/tmp/ansible-tmp-1558728025.48-180262108746971/AnsiballZ_azure_rm_dnsrecordset_facts.py\", line 48, in invoke_module\n    imp.load_module('__main__', mod, module, MOD_DESC)\n  File \"/tmp/ansible_azure_rm_dnsrecordset_facts_payload_PlPfUW/__main__.py\", line 202, in <module>\n  File \"/tmp/ansible_azure_rm_dnsrecordset_facts_payload_PlPfUW/__main__.py\", line 198, in main\n  File \"/tmp/ansible_azure_rm_dnsrecordset_facts_payload_PlPfUW/__main__.py\", line 133, in __init__\n  File \"/tmp/ansible_azure_rm_dnsrecordset_facts_payload_PlPfUW/ansible_azure_rm_dnsrecordset_facts_payload.zip/ansible/module_utils/azure_rm_common.py\", line 301, in __init__\n  File \"/tmp/ansible_azure_rm_dnsrecordset_facts_payload_PlPfUW/ansible_azure_rm_dnsrecordset_facts_payload.zip/ansible/module_utils/azure_rm_common.py\", line 1045, in __init__\n  File \"/var/lib/awx/venv/ansible/lib/python2.7/site-packages/msrestazure/azure_active_directory.py\", line 383, in __init__\n    self.set_token()\n  File \"/var/lib/awx/venv/ansible/lib/python2.7/site-packages/msrestazure/azure_active_directory.py\", line 415, in set_token\n    raise_with_traceback(AuthenticationError, \"\", err)\n  File \"/var/lib/awx/venv/ansible/lib/python2.7/site-packages/msrest/exceptions.py\", line 48, in raise_with_traceback\n    raise error\nmsrest.exceptions.AuthenticationError: , **InvalidGrantError: (invalid_grant) AADSTS50126: Invalid username or password**.\r\nTrace ID: 01cd8ac6-1c05-4391-96da-031e0da30500\r\nCorrelation ID: 03f28850-04cf-4344-b405-18594d8845a1\r\nTimestamp: 2019-05-24 20:00:26Z\n",
    "changed": false,
    "module_stdout": "",
    "rc": 1,
    "msg": "MODULE FAILURE\nSee stdout/stderr for the exact error"
}

当使用 ad_username、password 和 subscription_id 值作为环境变量时,额外的变量并从保管库传递到模块中都会导致相同的错误:

{
    "_ansible_parsed": true,
    "_ansible_no_log": false,
    "invocation": {
        "module_args": {
            "profile": null,
            "resource_group": "publicdns**********",
            "tags": null,
            "cloud_environment": "AzureCloud",
            "relative_name": "_acme-challenge",
            "record_type": "TXT",
            "client_id": null,
            "api_profile": "latest",
            "adfs_authority_url": null,
            "zone_name": "*************",
            "password": null,
            "tenant": null,
            "top": "100",
            "append_tags": true,
            "ad_user": null,
            "cert_validation_mode": null,
            "secret": null,
            "auth_source": null,
            "subscription_id": null
        }
    },
    "changed": false,
    "msg": "**Failed to get credentials. Either pass as parameters, set environment variables, define a profile in ~/.azure/credentials, or log in with Azure CLI (`az login`)**."
}

这是我的问题还是bug?除了我在阅读文档时发现的内容之外,我找不到任何明确引导您完成此设置的内容。我原以为这会很简单,但到目前为止却并非如此。

以下是我最近关注的文档之一:https://docs.ansible.com/ansible-tower/3.2.6/html/userguide/credentials.html#microsoft-azure-resource-manager

感谢您的帮助。以下是我尝试过的事情的列表:

  • 在 awx_task 和 awx_web 容器中设置 AZURE_AD_USER、AZURE_PASSWORD 和 AZURE_SUBSCRIPTION_ID 的环境变量。

  • 我已将 ad_user、密码和 subscription_id 凭据设置为额外变量。

  • 我已将凭据放入保管库并直接传递到 ansible 模块,无论是否带有 azure_adfs_authority_url。

  • 在 awx_task docker 容器中,我安装了 ansible[azure] 和 azure cli,运行 az login,验证/root/.azure/azureProfile.json 文件已填充。

  • 我已将文件从/root/.azure/复制到/var/lib/awx/.azure/,AWX 似乎正在寻找这些文件。我还验证了读写访问权限和文件所有权。

  • 我修改了 Microsoft Azure 资源管理器凭据,但它似乎不是我想要的。

    • ON EC2 实例,azure_adfs_authority_url 的 nslookup 显示它正在访问正确的 ADFS 服务器。

感谢您的帮助

最佳答案

错误是“AADSTS50126 无效的用户名或密码”,因此我建议您仔细检查并确保托管域连接的用户名或密码正确。如果问题仍然存在,那么(据我所知,联合 Azure 租户的身份验证大多失败)请尝试重置用户的密码和/或尝试设置tenant_id/租户。提出了类似的问题here您可以检查 future 的更新。

希望这有帮助!!

关于azure - AWX docker : How to authenticate with Azure using Active Directory. 对我不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56299332/

相关文章:

node.js - 在 docker build 期间,Ubuntugis 安装在配置期间卡住

jenkins - 用 Jenkins 做 docker 拉

git - Ansible:如何初始化 git 裸存储库并将其克隆到同一台机器?

vagrant - Ansible 从 Vagrant 中启动任务

azure - 寻找在 Azure 上部署的 Multi-Tenancy 足迹架构的引用

git - Azure DevOps 开发掌握 merge 问题

Azure Devops 没有这样的文件或目录

sql-server - 从 Windows Azure 连接到远程 SQL Server 2008

docker - Docker命令卡在容器上

Ansible - 列出可用主机