Kurz: Použití Azure Key Vault k ukládání tajných kódů virtuálních počítače pomocí Ansible
V tomto rychlém startu vytvoříte a načtete tajné kódy ze služby Azure Key Vault pomocí Ansible.
Důležité
Ke spuštění ukázkových playbooků v tomto článku se vyžaduje Ansible 2.9 (nebo novější).
V tomto článku získáte informace o těchto tématech:
- Vytvoření instance služby Azure Key Vault
- Vytvoření úložiště tajných klíčů ve službě Azure Key Vault
- Získání tajných kódů ze služby Azure Key Vault pomocí Ansible
Požadavky
- Předplatné Azure: Pokud ještě nemáte předplatné Azure, vytvořte si bezplatný účet před tím, než začnete.
- Objekt služby Azure:Vytvořte objekt služby apoznamenejte si následující hodnoty: appId, displayName,passworda tenant.
Instalace Ansible:Proveďte jednu z následujících možností:
- Instalace a konfigurace Ansible na virtuálním počítači s Linuxem
- Konfigurace služby Azure Cloud Shell
Vytvoření trezoru klíčů Azure
Ansible potřebuje skupinu prostředků, do které nasadí vaše prostředky.
Vytvořte playbook Ansible s názvem add the following task to create a resource group (Přidejte následující
create_kv.ymlúlohu pro vytvoření skupiny prostředků):--- - name: Create Azure key vault hosts: localhost connection: local tasks: - name: Create resource group azure_rm_resourcegroup: name: ansible-kv-test-rg location: eastusDefinujte požadované proměnné pro ID tenanta, ID objektu služby a název trezoru.
--- vars: tenant_id: <tenantId> object_id: <servicePrincipalObjectId> vault_name: <vaultName>Nahraďte
<tenantId><servicePrincipalObjectId>, a<vaultName>příslušnými hodnotami. ObjectId slouží k udělení přístupu k tajným kódům v rámci trezoru klíčů.klíčový bod:
- Názvy trezoru klíčů Azure musí být globálně univerzálně jedinečné. K trezoru klíčů a klíčům a tajným klíčům v ní se přistupuje prostřednictvím
https://{vault-name}.vault.azure.netidentifikátoru URI.
- Názvy trezoru klíčů Azure musí být globálně univerzálně jedinečné. K trezoru klíčů a klíčům a tajným klíčům v ní se přistupuje prostřednictvím
Přidejte úlohu a nakonfigurujte instanci služby Azure Key
create_kv.ymlVault.--- - 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 - deleteSpusťte
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
Dokončení vytváření playbooku služby Azure Key Vault
V této části je uveden celý ukázkový playbook Ansible pro vytvoření trezoru klíčů 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
Vytvoření tajného klíče v trezoru klíčů
Před vytvořením tajného klíče budete potřebovat identifikátor URI trezoru klíčů.
Vytvořte další playbook s názvem
create_kv_secret.yml. Do playbooku zkopírujte následující kód:--- - 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 }}"Nahraďte
<vaultName>názvem vašeho trezoru klíčů<secretValue>a hodnotou tajného klíče.Klíčový bod:
- Moduly
azure_rm_keyvault_infoset_factsa zaregistrují identifikátor URI trezoru klíčů jako proměnnou. Tato proměnná se pak předá moduluazure_rm_keyvaultsecretk vytvoření tajného kódu.
- Moduly
Spusťte
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
Získání tajných kódů ze služby Key Vault
Tajné kódy uložené ve službě Azure Key Vault je možné použít k naplnění proměnných Ansible.
Vytvořte nový playbook s názvem pro
get_kv_secrets.ymlnačtení tajných kódů trezoru klíčů pomocí Ansible.Ansible 2.9 s 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 }}"Nahraďte
<tenantId><vaultName>, , a<servicePrincipalApplicationId><servicePrincipalSecret>příslušnými hodnotami.Další informace o najdete
azure_preview_modulesna stránceazure_preview_modulesAnsible 2.10 s 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 }}"Nahraďte
<vaultName>příslušnou hodnotou.Další informace o najdete
azcollectionv tématuazcollectionSpusťte
get-secret-value.ymlplaybook.ansible-playbook get-secret-value.ymlTASK [Output key vault secret] ************************************************* ok: [localhost] => { "msg": "<plainTextPassword>" }Potvrďte, že nahrazený výstup je hodnota tajného klíče ve formátu
<plainTextPassword>prostého textu, která byla dříve vytvořena ve službě Azure Key Vault.
Kompletní ukázkový playbook Ansible
Tato část uvádí celý ukázkový playbook Ansible pro konfiguraci virtuálního počítače Azure Windows pomocí tajného klíče trezoru klíčů.
---
- 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
Nahraďte <key_vault_uri><key_vault_secret_name> a příslušnými hodnotami.
Vyčištění prostředků
Uložte následující kód jako
delete_rg.yml.--- - hosts: localhost tasks: - name: Deleting resource group - "{{ name }}" azure_rm_resourcegroup: name: "{{ name }}" state: absent register: rg - debug: var: rgPlaybook spusťte pomocí příkazu ansible-playbook. Zástupný text nahraďte názvem skupiny prostředků, která se má odstranit. Všechny prostředky v rámci skupiny prostředků se odstraní.
ansible-playbook delete_rg.yml --extra-vars "name=<resource_group>"Klíčové body:
- Kvůli proměnné
registeradebugoddílu playbooku se výsledky zobrazí po dokončení příkazu.
- Kvůli proměnné