ここ一週間ほど頭をガンガン打っています。
EC2 インスタンスで docker-compose とセットアップを介して AWX を実行しています。私の部署には Azure サービス プリンシパルを作成するための資格情報がないため、その要求が完了するのを待っている間、Active Directory 資格情報を介して AWX を Azure で認証しようとしています。テスト中は、わかりやすくするために、azure_rm_dnsrecordset_facts を実行するテスト タスクをセットアップしているので、TXT レコードをプルして、認証が認証されていることを示すことができます。私の開発用マシンでは、azure cli をインストールし、az login を実行し、ansible-playbook コマンドを介して playbooks などを実行できます。これは機能します。テストで、期待される TXT レコードがプルされることがわかります。しかし、AWX ではエラーが発生します。
az login を使用して、/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`)**."
}
それは私だけですか、それともこれはバグですか?ドキュメントを読んで見つけたものを除いて、これを設定する方法を明示的に説明しているものは見つかりません。これは簡単なことだと思っていましたが、これまでのところそうではありませんでした。
私が最近フォローしたドキュメントの 1 つを次に示します。
助けてくれてありがとう。ここに私が試したことのリストがあります:
awx_task コンテナーと awx_web コンテナーの両方で、AZURE_AD_USER、AZURE_PASSWORD、および AZURE_SUBSCRIPTION_ID の環境変数を設定します。
ad_user、password、および subscription_id 資格情報を追加の変数として設定しました。
資格情報をボールトに配置し、azure_adfs_authority_url の有無にかかわらず、Ansible モジュールに直接渡しました。
awx_task docker コンテナーに ansible[azure] と azure cli をインストールし、az login を実行して、/root/.azure/azureProfile.json ファイルが設定されていることを確認しました。
ファイルを /root/.azure/ から /var/lib/awx/.azure/ にコピーしました。AWX がこれらのファイルを探しているようです。また、読み書きアクセスとファイルの所有権も確認しました。
Microsoft Azure Resource Manager の資格情報をいじりましたが、それは私が望んでいるものではないようです。
- オン EC2 インスタンス、azure_adfs_authority_url の nslookup は、正しい ADFS サーバーにアクセスしていることを示しています。
ご協力いただきありがとうございます