community.hashi_vault.hashi_vault – Получение секретов из Vault HashiCorp
Примечание
Этот плагин входит в коллекцию community.hashi_vault (версия 1.0.0).
Для его установки используйте: ansible-galaxy collection install community.hashi_vault.
Чтобы использовать его в книге задач, укажите: community.hashi_vault.hashi_vault.
Краткое описание
- Получение секретов из HashiCorp’s Vault.
Требования
Ниже перечислены требования, необходимые на локальном контроллере узла, который выполняет этот поиск.
- hvac (библиотека python)
- hvac 0.7.0+ (для поддержки пространства имён)
- hvac 0.9.6+ (для избежания большинства предупреждений о устаревании)
- hvac 0.10.5+ (для JWT авторизации)
- hvac 0.10.6+ (для избежания предупреждений об устаревании для AppRole)
- botocore (только если требуется выведение параметров aws из boto)
- boto3 (только если используется профиль boto)
Параметры
| Параметр | Варианты/Значения по умолчанию | Конфигурация | Комментарии |
|---|---|---|---|
| auth_method строка |
| записи в ini: [lookup_hashi_vault] переменная окружения:VAULT_AUTH_METHOD Удалено в: версии 2.0.0 Почему: стандартизация переменных среды Альтернатива: ANSIBLE_HASHI_VAULT_AUTH_METHOD переменная окружения:ANSIBLE_HASHI_VAULT_AUTH_METHOD добавлено в версии 0.2.0 community.hashi_vault | Метод аутентификации, который будет использован. |
| aws_access_key строка | переменная окружения:EC2_ACCESS_KEY переменная окружения:AWS_ACCESS_KEY переменная окружения:AWS_ACCESS_KEY_ID | Используемый AWS ключ доступа. псевдонимы: aws_access_key_id | |
| aws_iam_server_id строка добавлено в 0.2.0 community.hashi_vault | записи в ini: [lookup_hashi_vault] переменная окружения:ANSIBLE_HASHI_VAULT_AWS_IAM_SERVER_ID | Если указано, устанавливает значение для использования в заголовке X-Vault-AWS-IAM-Server-ID, как часть запроса GetCallerIdentity. | |
| aws_profile строка | переменная окружения:AWS_DEFAULT_PROFILE переменная окружения:AWS_PROFILE | AWS профиль псевдонимы: boto_profile | |
| aws_secret_key строка | переменная окружения:EC2_SECRET_KEY переменная окружения:AWS_SECRET_KEY переменная окружения:AWS_SECRET_ACCESS_KEY | AWS секретный ключ, соответствующий ключу доступа. псевдонимы: aws_secret_access_key | |
| aws_security_token строка | переменная окружения:EC2_SECURITY_TOKEN переменная окружения:AWS_SESSION_TOKEN переменная окружения:AWS_SECURITY_TOKEN | AWS security token, если используются временные ключи доступа и секретные ключи. | |
| ca_cert строка | Путь к сертификату, используемому для аутентификации. псевдонимы: cacert | ||
| jwt строка | переменная окружения:ANSIBLE_HASHI_VAULT_JWT | JSON Web Token (JWT) для использования в JWT аутентификации в Vault. | |
| mount_point строка | Точка монтирования Vault. Если не указано, используется значение по умолчанию для заданного метода аутентификации. Не применимо к аутентификации по токену. | ||
| namespace строка | записи в ini: [lookup_hashi_vault] добавлено в 0.2.0 community.hashi_vault переменная окружения:ANSIBLE_HASHI_VAULT_NAMESPACE добавлено в 0.2.0 community.hashi_vault | Пространство имён Vault, где находятся секреты. Этот параметр требует HVAC 0.7.0+ и Vault 0.11+. Также это может быть достигнуто путём добавления префикса к точке монтирования аутентификации и/или пути к секрету со значением пространства имён (например mynamespace/secret/mysecret).Если переменная среды VAULT_NAMESPACE задана, её значение будет использовано в последнюю очередь. | |
| password строка | Пароль для аутентификации. | ||
| region строка | переменная окружения:EC2_REGION переменная окружения:AWS_REGION | AWS регион для создания соединения. | |
| return_format строка |
| Управляет тем, как несколько пар ключ/значение в пути обрабатываются при возврате. dict возвращает один dict, содержащий пары ключ/значение.values возвращает только список всех значений. Используйте, когда вам не нужны ключи.raw возвращает фактический результат API (десериализованный), который включает метаданные и может иметь данные, вложенные в другие ключи.псевдонимы: as | |
| role_id строка | записи в ini: [lookup_hashi_vault] переменная окружения:VAULT_ROLE_ID Удалено в: версии 2.0.0 Почему: стандартизация переменных среды Альтернатива: ANSIBLE_HASHI_VAULT_ROLE_ID переменная окружения:ANSIBLE_HASHI_VAULT_ROLE_ID добавлено в 0.2.0 community.hashi_vault | Идентификатор роли Vault. Используется в методах аутентификации approle и aws_iam_login. | |
| secret строка / обязательно | Путь Vault к запрашиваемому секрету в формате path[:field]. | ||
| secret_id строка | переменная окружения:VAULT_SECRET_ID Удалено в: версии 2.0.0 Почему: стандартизация переменных среды Альтернатива: ANSIBLE_HASHI_VAULT_SECRET_ID переменная окружения:ANSIBLE_HASHI_VAULT_SECRET_ID добавлено в 0.2.0 community.hashi_vault | Идентификатор секрета, который будет использован для аутентификации Vault AppRole. | |
| token строка | переменная окружения:ANSIBLE_HASHI_VAULT_TOKEN добавлено в 0.2.0 community.hashi_vault | Токен Vault. Токен может быть указан явно, через перечисленные переменные среды, а также через переменную среды VAULT_TOKEN. Если токен не указан явно или через переменную среды, плагин будет искать токен в файле, как определено в token_path и token_file. Порядок загрузки токенов (первый найденный используется) token param -> ANSIBLE_HASHI_VAULT_TOKEN -> VAULT_TOKEN -> token file. | |
| token_file строка | По умолчанию: ".vault-token" | записи в ini: [lookup_hashi_vault] переменная окружения:VAULT_TOKEN_FILE Удалено в: версии 2.0.0 Почему: стандартизация переменных среды Альтернатива: ANSIBLE_HASHI_VAULT_TOKEN_FILE переменная окружения:ANSIBLE_HASHI_VAULT_TOKEN_FILE добавлено в 0.2.0 community.hashi_vault | Если токен не указан, будет попытка чтения токена из этого файла в token_path. |
| token_path строка | записи в ini: [lookup_hashi_vault] переменная окружения:VAULT_TOKEN_PATH Удалено в: версии 2.0.0 Почему: стандартизация переменных среды Альтернатива: ANSIBLE_HASHI_VAULT_TOKEN_PATH переменная окружения:ANSIBLE_HASHI_VAULT_TOKEN_PATH добавлено в 0.2.0 community.hashi_vault | Если токен не указан, будет попытка чтения token_file из этого пути. | |
| token_validate логический добавлено в 0.2.0 community.hashi_vault |
| записи в ini: [lookup_hashi_vault] переменная окружения:ANSIBLE_HASHI_VAULT_TOKEN_VALIDATE | Для аутентификации по токену, будет выполнена операция lookup-self, чтобы определить валидность токена перед его использованием.Отключить, если ваш токен не имеет возможности lookup-self. |
| url строка | По умолчанию: "http://127.0.0.1:8200" | записи в ini: [lookup_hashi_vault] переменная окружения:ANSIBLE_HASHI_VAULT_ADDR добавлено в 0.2.0 community.hashi_vault | URL к службе Vault. Если не указано иными способами, будет использовано значение переменной среды VAULT_ADDR. |
| username строка | Имя пользователя для аутентификации. | ||
| validate_certs логический |
| Управляет проверкой и валидацией SSL сертификатов, в основном, вы хотите отключить только с самоподписанными сертификатами. Будет заполнен обратным значением VAULT_SKIP_VERIFY, если это задано, и validate_certs не указан явно.Будет по умолчанию true, если ни validate_certs, ни VAULT_SKIP_VERIFY не заданы. |
Примечания
Примечание
- Из-за текущего ограничения в библиотеке HVAC необязательно будет ошибка, если указан неверный конечная точка.
- Начиная с community.hashi_vault 0.1.0, при указании пути KV v2 возвращается только последняя версия секрета.
- Начиная с community.hashi_vault 0.1.0, все параметры могут быть переданы через строку терминов (парные значения ключей и значений, разделенные пробелами), или с помощью параметров (см. примеры).
- Начиная с community.hashi_vault 0.1.0, когда secret является первым параметром в строке терминов,
secret=не требуется (см. примеры).
Примеры
- ansible.builtin.debug:
msg: "{{ lookup('community.hashi_vault.hashi_vault', 'secret=secret/hello:value token=c975b780-d1be-8016-866b-01d0f9b688a5 url=http://myvault:8200') }}"
- name: Return all secrets from a path
ansible.builtin.debug:
msg: "{{ lookup('community.hashi_vault.hashi_vault', 'secret=secret/hello token=c975b780-d1be-8016-866b-01d0f9b688a5 url=http://myvault:8200') }}"
- name: Vault that requires authentication via LDAP
ansible.builtin.debug:
msg: "{{ lookup('community.hashi_vault.hashi_vault', 'secret/hello:value auth_method=ldap mount_point=ldap username=myuser password=mypas') }}"
- name: Vault that requires authentication via username and password
ansible.builtin.debug:
msg: "{{ lookup('community.hashi_vault.hashi_vault', 'secret=secret/hola:val auth_method=userpass username=myuser password=psw url=http://vault:8200') }}"
- name: Connect to Vault using TLS
ansible.builtin.debug:
msg: "{{ lookup('community.hashi_vault.hashi_vault', 'secret=secret/hola:value token=c975b780-d1be-8016-866b-01d0f9b688a5 validate_certs=False') }}"
- name: using certificate auth
ansible.builtin.debug:
msg: "{{ lookup('community.hashi_vault.hashi_vault', 'secret/hi:val token=xxxx url=https://vault:8200 validate_certs=True cacert=/cacert/path/ca.pem') }}"
- name: Authenticate with a Vault app role
ansible.builtin.debug:
msg: "{{ lookup('community.hashi_vault.hashi_vault', 'secret=secret/hello:value auth_method=approle role_id=myroleid secret_id=mysecretid') }}"
- name: Return all secrets from a path in a namespace
ansible.builtin.debug:
msg: "{{ lookup('community.hashi_vault.hashi_vault', 'secret=secret/hello token=c975b780-d1be-8016-866b-01d0f9b688a5 namespace=teama/admins') }}"
# When using KV v2 the PATH should include "data" between the secret engine mount and path (e.g. "secret/data/:path")
# see: https://www.vaultproject.io/api/secret/kv/kv-v2.html#read-secret-version
- name: Return latest KV v2 secret from path
ansible.builtin.debug:
msg: "{{ lookup('community.hashi_vault.hashi_vault', 'secret=secret/data/hello token=my_vault_token url=http://myvault_url:8200') }}"
# The following examples show more modern syntax, with parameters specified separately from the term string.
- name: secret= is not required if secret is first
ansible.builtin.debug:
msg: "{{ lookup('community.hashi_vault.hashi_vault', 'secret/data/hello token=<token> url=http://myvault_url:8200') }}"
- name: options can be specified as parameters rather than put in term string
ansible.builtin.debug:
msg: "{{ lookup('community.hashi_vault.hashi_vault', 'secret/data/hello', token=my_token_var, url='http://myvault_url:8200') }}"
# return_format (or its alias 'as') can control how secrets are returned to you
- name: return secrets as a dict (default)
ansible.builtin.set_fact:
my_secrets: "{{ lookup('community.hashi_vault.hashi_vault', 'secret/data/manysecrets', token=my_token_var, url='http://myvault_url:8200') }}"
- ansible.builtin.debug:
msg: "{{ my_secrets['secret_key'] }}"
- ansible.builtin.debug:
msg: "Secret '{{ item.key }}' has value '{{ item.value }}'"
loop: "{{ my_secrets | dict2items }}"
- name: return secrets as values only
ansible.builtin.debug:
msg: "A secret value: {{ item }}"
loop: "{{ query('community.hashi_vault.hashi_vault', 'secret/data/manysecrets', token=my_token_var, url='http://vault_url:8200', return_format='values') }}"
- name: return raw secret from API, including metadata
ansible.builtin.set_fact:
my_secret: "{{ lookup('community.hashi_vault.hashi_vault', 'secret/data/hello:value', token=my_token_var, url='http://myvault_url:8200', as='raw') }}"
- ansible.builtin.debug:
msg: "This is version {{ my_secret['metadata']['version'] }} of hello:value. The secret data is {{ my_secret['data']['data']['value'] }}"
# AWS IAM authentication method
# uses Ansible standard AWS options
- name: authenticate with aws_iam_login
ansible.builtin.debug:
msg: "{{ lookup('community.hashi_vault.hashi_vault', 'secret/hello:value', auth_method='aws_iam_login', role_id='myroleid', profile=my_boto_profile) }}"
# JWT auth
- name: Authenticate with a JWT
ansible.builtin.debug:
msg: "{{ lookup('community.hashi_vault.hashi_vault', 'secret/hola:val', auth_method='jwt', role_id='myroleid', jwt='myjwt', url='https://vault:8200') }}"
# Disabling Token Validation
# Use this when your token does not have the lookup-self capability. Usually this is applied to all tokens via the default policy.
# However you can choose to create tokens without applying the default policy, or you can modify your default policy not to include it.
# When disabled, your invalid or expired token will be indistinguishable from insufficent permissions.
- name: authenticate without token validation
ansible.builtin.debug:
msg: "{{ lookup('community.hashi_vault.hashi_vault', 'secret/hello:value', token=my_token, token_validate=False) }}"
Значения возврата
Общие значения возврата описаны здесь, следующие являются полями, уникальными для этого поиска:
| Ключ | Возвращаемое значение | Описание |
|---|---|---|
| _raw список / элементы=словарь | успех | запрошенные секрет(ы) |
Авторы
- Jonathan Davila (!UNKNOWN) <jdavila(at)ansible.com>
- Brian Scholer (@briantist)
© 2012–2018 Michael DeHaan
© 2018–2019 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.10/collections/community/hashi_vault/hashi_vault_lookup.html