Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Neste início rápido, você criará e recuperará segredos do cofre de chaves do Azure com o Ansible.
Importante
O Ansible 2.9 (ou posterior) é necessário para executar os playbooks de exemplo neste artigo.
Neste artigo, você aprenderá a:
- Criar uma instância do cofre de chaves do Azure
- Criar um armazenamento secreto no cofre de chaves do Azure
- Obtenha segredos do cofre de chaves do Azure com o Ansible
Pré-requisitos
- Assinatura do Azure: se você não tiver uma assinatura do Azure, crie uma conta gratuita antes de começar.
- Principal de serviço do Azure: Crie um principal de serviço, anotando os seguintes valores: appId, displayName, palavra-passe e inquilino.
Instale o Ansible: execute uma das seguintes opções:
- Instalar e configurar o Ansible em uma máquina virtual Linux
- Configurar o Azure Cloud Shell
Criar um cofre de chaves do Azure
Ansible precisa de um grupo de recursos para aprovisionar os seus recursos.
Crie um playbook do Ansible chamado
create_kv.ymladicionar a seguinte tarefa para criar um grupo de recursos:--- - name: Create Azure key vault hosts: localhost connection: local tasks: - name: Create resource group azure_rm_resourcegroup: name: ansible-kv-test-rg location: eastusDefina as variáveis necessárias para o ID do locatário, ID do objeto principal do serviço e nome do cofre.
--- vars: tenant_id: <tenantId> object_id: <servicePrincipalObjectId> vault_name: <vaultName>Substitua
<tenantId>,<servicePrincipalObjectId>e<vaultName>com os valores apropriados. O objectId é usado para conceder acesso a segredos dentro do cofre de chaves.Ponto principal:
- Os nomes dos cofres de chaves do Azure devem ser globalmente universalmente exclusivos. O cofre de chaves e chaves/segredos dentro dele são acessados via
https://{vault-name}.vault.azure.netURI.
- Os nomes dos cofres de chaves do Azure devem ser globalmente universalmente exclusivos. O cofre de chaves e chaves/segredos dentro dele são acessados via
Configure a instância do cofre de chaves do Azure adicionando a tarefa
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 - deleteExecutar o
create_kv.ymlplaybook.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
Conclua a criação do manual do cofre de chaves do Azure
Esta seção lista todo o manual de exemplo do Ansible para criar um cofre de chaves do 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
Criar um segredo no cofre de chaves
Antes que o segredo possa ser criado, você precisará do URI do keyvault.
Crie outro manual chamado
create_kv_secret.yml. Copie o seguinte código para dentro do 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 }}"Substitua
<vaultName>pelo nome do seu cofre de chaves e<secretValue>pelo valor do segredo armazenado.Ponto principal:
- Os módulos
azure_rm_keyvault_infoeset_factsregistam o URI do vault de chaves como uma variável. Essa variável é então passada para oazure_rm_keyvaultsecretmódulo para criar o segredo.
- Os módulos
Execute o
create_kv_secret.ymlplaybook.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
Obtenha segredos do cofre de chaves
Os segredos armazenados no cofre de chaves do Azure podem ser usados para preencher variáveis do Ansible.
Crie um novo manual chamado
get_kv_secrets.ymlpara recuperar segredos do cofre de chaves com o Ansible.Ansible 2.9 com 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 }}"Substitua
<tenantId>,<vaultName>,<servicePrincipalApplicationId>, e<servicePrincipalSecret>pelos valores apropriados.Para saber mais sobre
azure_preview_modules, consulte a página do Ansible Galaxy.Ansible 2.10 com 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 }}"Substitua
<vaultName>pelo valor apropriado.Para saber mais sobre
azcollection, consulte a Coleção Ansible para Azure.Executar o
get-secret-value.ymlplaybook.ansible-playbook get-secret-value.ymlTASK [Output key vault secret] ************************************************* ok: [localhost] => { "msg": "<plainTextPassword>" }Confirme se a saída que substitui
<plainTextPassword>é o valor de texto simples do segredo criado anteriormente no Azure Key Vault.
Exemplo completo do playbook do Ansible
Esta seção lista todo o manual de exemplo do Ansible para configurar uma VM do Windows do Azure usando um segredo do cofre de chaves.
---
- 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
Substitua <key_vault_uri> e <key_vault_secret_name> com os valores apropriados.
Limpeza de recursos
- Ansible
- Azure CLI
- Azure PowerShell
Salve o código a seguir como
delete_rg.yml.--- - hosts: localhost tasks: - name: Deleting resource group - "{{ name }}" azure_rm_resourcegroup: name: "{{ name }}" state: absent register: rg - debug: var: rgExecute o playbook usando o comando ansible-playbook . Substitua o espaço reservado pelo nome do grupo de recursos a ser excluído. Todos os recursos dentro do grupo de recursos serão excluídos.
ansible-playbook delete_rg.yml --extra-vars "name=<resource_group>"Pontos principais:
- Devido à variável
registere à seçãodebugdo playbook, os resultados aparecem quando o comando é concluído.
- Devido à variável