community.hashi_vault.hashi_vault – Получение секретов из хранилища HashiCorp Vault
Примечание
Этот плагин входит в состав коллекции community.hashi_vault (версия 1.0.0).
Для его установки используйте: ansible-galaxy collection install community.hashi_vault.
Для использования в книге задач укажите: community.hashi_vault.hashi_vault.
Обзор
- Получение секретов из хранилища HashiCorp 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, если используются временные ключи доступа и секретные ключи. | |
| ca_cert строка | Путь к сертификату, используемому для аутентификации. алиасы: cacert | ||
| jwt строка | переменная среды:ANSIBLE_HASHI_VAULT_JWT | JSON Web Token (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, ее значение будет использовано последним среди всех способов указания namespace. | |
| password строка | Пароль для аутентификации. | ||
| region строка | переменная среды:EC2_REGION переменная среды:AWS_REGION | Регион AWS для создания подключения. | |
| return_format строка |
| Определяет, как обрабатываются несколько пар ключ/значение в пути при возврате. 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–2021 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.11/collections/community/hashi_vault/hashi_vault_lookup.html