Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Dans ce guide de démarrage rapide, vous allez créer et récupérer des secrets à partir du coffre de clés Azure avec Ansible.
Important
Ansible 2.9 (ou version ultérieure) est nécessaire pour exécuter les exemples de playbooks dans cet article.
Dans cet article, vous allez apprendre à :
- Créer une instance Azure Key Vault
- Créer un magasin de secrets dans Azure Key Vault
- Obtenir des secrets à partir d’Azure Key Vault avec Ansible
Prerequisites
- Abonnement Azure : si vous n’avez pas d’abonnement Azure, créez un compte gratuit avant de commencer.
- Principal de service Azure : Créez un principal de service, notez les valeurs suivantes : appId, displayName, password et tenant.
Installez Ansible : Effectuez l’une des options suivantes :
- Installer et configurer Ansible sur une machine virtuelle Linux
- Configurer Azure Cloud Shell
Créer un coffre de clés Azure
Ansible a besoin d’un groupe de ressources pour déployer vos ressources.
Créez un playbook Ansible nommé
create_kv.ymlajouter la tâche suivante pour créer un groupe de ressources :--- - name: Create Azure key vault hosts: localhost connection: local tasks: - name: Create resource group azure_rm_resourcegroup: name: ansible-kv-test-rg location: eastusDéfinissez les variables requises pour l’ID de locataire, l’ID d’objet du principal de service et le nom du coffre.
--- vars: tenant_id: <tenantId> object_id: <servicePrincipalObjectId> vault_name: <vaultName>Remplacez
<tenantId>,<servicePrincipalObjectId>et<vaultName>par les valeurs appropriées. L’objectId est utilisé pour accorder l’accès aux secrets dans le coffre de clés.point clé :
- Les noms de coffre de clés Azure doivent être globalement uniques. Le coffre de clés, ainsi que les clés et secrets qu'il contient, sont accessibles via l'URI
https://{vault-name}.vault.azure.net.
- Les noms de coffre de clés Azure doivent être globalement uniques. Le coffre de clés, ainsi que les clés et secrets qu'il contient, sont accessibles via l'URI
Configurez l’instance du coffre de clés Azure en ajoutant la tâche
create_kv.yml.--- - name: Create key vault instance azure_rm_keyvault: resource_group: ansible-kv-test-rg vault_name: "{{ vault_name }}" enabled_for_deployment: yes vault_tenant: "{{ tenant_id }}" sku: name: standard access_policies: - tenant_id: "{{ tenant_id }}" object_id: "{{ object_id }}" secrets: - get - list - set - deleteExécutez le plan
create_kv.yml.ansible-playbook create_kv.ymlPLAY [localhost] ******************************************************************************************************* TASK [Gathering Facts] ************************************************************************************************* ok: [localhost] TASK [Create resource group] ******************************************************************************************* ok: [localhost] TASK [Create key vault instance] ************************************************************************************ ok: [localhost] PLAY RECAP ************************************************************************************************************* localhost : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Compléter la création d'un playbook pour Azure Key Vault
Cette section répertorie l'exemple complet du playbook Ansible pour la création d'un coffre de clés Azure.
- hosts: localhost
connection: local
vars:
tenant_id: <tenantId>
object_id: <servicePrincipalObjectId>
vault_name: <vaultName>
tasks:
- name: Create resource group
azure_rm_resourcegroup:
name: ansible-kv-test-rg
location: eastus
- name: Create instance of Key Vault
azure_rm_keyvault:
resource_group: ansible-kv-test-rg
vault_name: "{{ vault_name }}"
enabled_for_deployment: yes
vault_tenant: "{{ tenant_id }}"
sku:
name: standard
access_policies:
- tenant_id: "{{ tenant_id }}"
object_id: "{{ object_id }}"
secrets:
- get
- list
- set
- delete
Créer un secret dans le coffre de clés
Avant de pouvoir créer le secret, vous aurez besoin de l’URI du Key Vault.
Créez un autre playbook nommé
create_kv_secret.yml. Copiez le code suivant dans le playbook :--- - hosts: localhost connection: local tasks: - name: Get Key Vault by name azure_rm_keyvault_info: resource_group: ansible-kv-test-rg name: <vaultName> register: keyvault - name: set KeyVault uri fact set_fact: keyvaulturi="{{ keyvault['keyvaults'][0]['vault_uri'] }}" - name: Create a secret azure_rm_keyvaultsecret: secret_name: adminPassword secret_value: <secretValue> keyvault_uri: "{{ keyvaulturi }}"Remplacez
<vaultName>par le nom de votre coffre de clés et<secretValue>par la valeur du secret.Point clé :
- Les
azure_rm_keyvault_infoet lesset_factsmodules enregistrent l’URI du coffre de clés en tant que variable. Cette variable est ensuite passée auazure_rm_keyvaultsecretmodule pour créer le secret.
- Les
Exécutez le livre de scripts
create_kv_secret.yml.ansible-playbook create_kv_secret.ymlPLAY [localhost] ******************************************************************************************************* TASK [Gathering Facts] ************************************************************************************************* ok: [localhost] TASK [Get Key Vault by name] ******************************************************************************************* ok: [localhost] TASK [set KeyVault uri fact] ******************************************************************************************* ok: [localhost] TASK [Create a secret] ************************************************************************************************* ok: [localhost] PLAY RECAP ************************************************************************************************************* localhost : ok=4 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Obtenir des secrets à partir du coffre de clés
Les secrets stockés dans le coffre de clés Azure peuvent être utilisés pour remplir des variables Ansible.
Créez un playbook appelé
get_kv_secrets.ymlpour récupérer les secrets du coffre-fort de clés avec Ansible.Ansible 2.9 avec azure_preview_modules
--- - hosts: localhost connection: local roles: - { role: azure.azure_preview_modules } vars: tenant_id: <tenantId> vault_name: <vaultName> secret_name: adminPassword client_id: <servicePrincipalApplicationId> client_secret: <servicePrincipalSecret> tasks: - name: Get Key Vault by name azure_rm_keyvault_info: resource_group: ansible-kv-test-rg name: "{{ vault_name }}" register: keyvault - name: Set key vault URI fact set_fact: keyvaulturi="{{ keyvault['keyvaults'][0]['vault_uri'] }}" - name: Set key vault secret fact set_fact: secretValue={{ lookup('azure_keyvault_secret',secret_name,vault_url=keyvaulturi, client_id=client_id, secret=client_secret, tenant_id=tenant_id) }} - name: Output key vault secret debug: msg: "{{ secretValue }}"Remplacez
<tenantId>, ,<vaultName><servicePrincipalApplicationId>et<servicePrincipalSecret>par les valeurs appropriées.Pour en savoir plus sur
azure_preview_modules, consultez la page Ansible Galaxy .Ansible 2.10 avec azure.azcollection
--- - hosts: localhost connection: local collections: - azure.azcollection vars: vault_name: ansible-kv-test-01 secret_name: adminPassword tasks: - name: Get Key Vault by name azure_rm_keyvault_info: resource_group: ansible-kv-test-rg name: "{{ vault_name }}" register: keyvault - name: Set key vault URI fact set_fact: keyvaulturi="{{ keyvault['keyvaults'][0]['vault_uri'] }}" - name: Get secret value azure_rm_keyvaultsecret_info: vault_uri: "{{ keyvaulturi }}" name: "{{ secret_name }}" register: kvSecret - name: set secret fact set_fact: secretValue="{{ kvSecret['secrets'][0]['secret'] }}" - name: Output key vault secret debug: msg="{{ secretValue }}"Remplacez par
<vaultName>la valeur appropriée.Pour en savoir plus sur
azcollection, consultez la collection Ansible pour Azure.Exécutez le script
get-secret-value.yml.ansible-playbook get-secret-value.ymlTASK [Output key vault secret] ************************************************* ok: [localhost] => { "msg": "<plainTextPassword>" }Vérifiez que la sortie remplacée
<plainTextPassword>est la valeur de texte brut du secret précédemment créé dans le coffre de clés Azure.
Exemple complet d'un livre de jeu Ansible
Cette section répertorie l’ensemble du playbook Ansible pour la configuration d’une machine virtuelle Windows Azure à l’aide d’un secret key vault.
---
- name: Create Azure VM
hosts: localhost
connection: local
gather_facts: false
collections:
- azure.azcollection
vars:
vault_uri: <key_vault_uri>
secret_name: <key_vault_secret_name>
tasks:
- name: Get latest version of a secret
azure_rm_keyvaultsecret_info:
vault_uri: "{{ vault_uri }}"
name: "{{ secret_name }}"
register: kvSecret
- name: Set secret fact
set_fact: secret_value="{{ kvSecret['secrets'][0]['secret'] }}"
- name: Create resource group
azure_rm_resourcegroup:
name: myResourceGroup
location: eastus
- name: Create virtual network
azure_rm_virtualnetwork:
resource_group: myResourceGroup
name: vNet
address_prefixes: "10.0.0.0/16"
- name: Add subnet
azure_rm_subnet:
resource_group: myResourceGroup
name: subnet
address_prefix: "10.0.1.0/24"
virtual_network: vNet
- name: Create public IP address
azure_rm_publicipaddress:
resource_group: myResourceGroup
allocation_method: Static
name: pip
register: output_ip_address
- name: Output public IP
debug:
msg: "The public IP is {{ output_ip_address.state.ip_address }}"
- name: Create Network Security Group
azure_rm_securitygroup:
resource_group: myResourceGroup
name: networkSecurityGroup
rules:
- name: 'allow_rdp'
protocol: Tcp
destination_port_range: 3389
access: Allow
priority: 1001
direction: Inbound
- name: Create a network interface
azure_rm_networkinterface:
name: nic
resource_group: myResourceGroup
virtual_network: vNet
subnet_name: subnet
security_group: networkSecurityGroup
ip_configurations:
- name: default
public_ip_address_name: pip
primary: True
- name: Create VM
azure_rm_virtualmachine:
resource_group: myResourceGroup
name: win-vm
vm_size: Standard_DS1_v2
admin_username: azureuser
admin_password: "{{ secret_value }}"
network_interfaces: nic
os_type: Windows
image:
offer: WindowsServer
publisher: MicrosoftWindowsServer
sku: 2019-Datacenter
version: latest
no_log: true
Remplacez <key_vault_uri> et <key_vault_secret_name> par les valeurs appropriées.
Nettoyer les ressources
Enregistrez le code suivant sous
delete_rg.yml.--- - hosts: localhost tasks: - name: Deleting resource group - "{{ name }}" azure_rm_resourcegroup: name: "{{ name }}" state: absent register: rg - debug: var: rgExécutez le playbook à l’aide de la commande ansible-playbook . Remplacez l’espace réservé par le nom du groupe de ressources à supprimer. Toutes les ressources du groupe de ressources seront supprimées.
ansible-playbook delete_rg.yml --extra-vars "name=<resource_group>"Points essentiels :
- En raison de la variable
registeret de la sectiondebugdu playbook, les résultats s’affichent lorsque la commande se termine.
- En raison de la variable