Докер AWX: как пройти аутентификацию с помощью Azure, используя Active Directory.Не будет работать на меня - PullRequest
1 голос
/ 24 мая 2019

Я уже неделю бьюсь головой.

У меня AWX работает через docker-compose и настройку на экземпляре EC2. В моем отделе нет учетных данных для создания принципалов службы Azure, поэтому, пока я ожидаю выполнения этого запроса, я пытаюсь заставить AWX пройти аутентификацию в Azure с помощью учетных данных активного каталога. Во время тестирования для простоты у меня есть настройка тестовой задачи, которая запускает azure_rm_dnsrecordset_facts, поэтому я могу просто извлечь запись TXT, чтобы показать, что аутентификация является аутентификационной. На моей машине для разработки я могу установить azure cli, запустить az login и выполнить playbooks и другие с помощью команды ansible-playbook, и это работает: я вижу, что тест извлекает ожидаемую запись 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`)**."
}

Это только у меня так или это ошибка? Я не могу найти ничего, что явно проведет вас через настройку, кроме того, что я нашел, читая документы. Я ожидал, что это будет прямо вперед, и до сих пор это было совсем не так.

Вот один из документов, за которым я следил совсем недавно: https://docs.ansible.com/ansible-tower/3.2.6/html/userguide/credentials.html#microsoft-azure-resource-manager

Спасибо за помощь. Вот список вещей, которые я пробовал:

  • Установка переменных среды для AZURE_AD_USER, AZURE_PASSWORD и AZURE_SUBSCRIPTION_ID в контейнерах awx_task и awx_web.

  • Я установил учетные данные ad_user, password и subscription_id в качестве дополнительных переменных.

  • Я поместил учетные данные в хранилище и передал их непосредственно в модуль ansible с azure_adfs_authority_url и без него.

  • В установочном контейнере awx_task я установил ansible [azure] и azure cli, запустил az login, проверил, заполнен ли файл /root/.azure/azureProfile.json.

  • Я скопировал файлы из /root/.azure/ в /var/lib/awx/.azure/, где, как кажется, AWX ищет эти файлы. Я также подтвердил права на чтение и запись и право собственности на файл.

  • Я возился с учетными данными Microsoft Azure Resource Manager, но, похоже, это не то, что мне нужно.

    • ON Экземпляр EC2, nslookup для azure_adfs_authority_url показывает, что он подключается к правильному серверу ADFS.

Спасибо за вашу помощь

1 Ответ

0 голосов
/ 30 мая 2019

Ошибка «AADSTS50126 неверное имя пользователя или пароль», поэтому я бы посоветовал вам еще раз проверить и убедиться, что имя пользователя или пароль верны для подключения управляемого домена. Если проблема не устранена, то (в основном, аутентификация AFAIK не выполняется для федеративных клиентов Azure, поэтому) попробуйте сбросить пароль пользователя и / или попробуйте также установить tenant_id / tenant. Похожая проблема возникает здесь , которую вы можете проверить для будущих обновлений.

Надеюсь, это поможет !!

...