Öğretici: Ansible ile VM gizli dizilerini depolamak için Azure Key Vault kullanma
Bu hızlı başlangıçta, Ansible ile Azure anahtar kasasından gizli diziler oluşturacak ve alacağız.
Önemli
Bu makaledeki örnek playbook'ları çalıştırmak için Ansible 2.9 (veya üzeri) gereklidir.
Bu makalede şunları öğreneceksiniz:
- Azure anahtar kasası örneği oluşturma
- Azure anahtar kasasında gizli dizi deposu oluşturma
- Ansible ile Azure anahtar kasasından gizli dizileri alma
Önkoşullar
- Azure aboneliği: Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.
- Azure hizmet sorumlusu: Aşağıdaki değerleri not ederek bir hizmet sorumlusu oluşturun: appId, displayName, password ve tenant.
Ansible'ı Yükleme: Aşağıdaki seçeneklerden birini yapın:
Azure anahtar kasası oluşturma
Ansible,kaynaklarınızı dağıtmak için bir kaynak grubuna ihtiyaç duyar.
Adlı bir Ansible playbook
create_kv.yml
oluşturun, kaynak grubu oluşturmak için aşağıdaki görevi ekleyin:--- - name: Create Azure key vault hosts: localhost connection: local tasks: - name: Create resource group azure_rm_resourcegroup: name: ansible-kv-test-rg location: eastus
Kiracı kimliği, hizmet sorumlusu nesne kimliği ve kasa adı için gerekli değişkenleri tanımlayın.
--- vars: tenant_id: <tenantId> object_id: <servicePrincipalObjectId> vault_name: <vaultName>
,
<servicePrincipalObjectId>
ve<vaultName>
değerlerini uygun değerlerle değiştirin<tenantId>
. objectId, anahtar kasası içindeki gizli dizilere erişim vermek için kullanılır.anahtar noktası:
- Azure anahtar kasası adları genel olarak evrensel olarak benzersiz olmalıdır. Anahtar kasasına ve içindeki anahtarlara/gizli dizilere URI aracılığıyla
https://{vault-name}.vault.azure.net
erişilir.
- Azure anahtar kasası adları genel olarak evrensel olarak benzersiz olmalıdır. Anahtar kasasına ve içindeki anahtarlara/gizli dizilere URI aracılığıyla
Görevi ekleyerek Azure anahtar kasası örneğini
create_kv.yml
yapılandırın.--- - 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 - delete
Playbook'u
create_kv.yml
çalıştırın.ansible-playbook create_kv.yml
PLAY [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
Azure key vault playbook'u oluşturma işlemini tamamlayın
Bu bölümde Azure anahtar kasası oluşturmaya yönelik örnek Ansible playbook'unun tamamı listelenir.
- 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
Anahtar kasasında gizli dizi oluşturma
Gizli dizi oluşturulabilmesi için önce anahtar kasası URI'sine ihtiyacınız olacaktır.
adlı
create_kv_secret.yml
başka bir playbook oluşturun. Playbook'a aşağıdaki kodu kopyalayın:--- - 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 }}"
değerini anahtar kasası adınızın adıyla ve
<secretValue>
gizli dizi değeriyle değiştirin<vaultName>
.Anahtar nokta:
azure_rm_keyvault_info
veset_facts
modülleri anahtar kasası URI'sini değişken olarak kaydeder. Bu değişken daha sonra gizli diziyi oluşturmak için modüle geçirilirazure_rm_keyvaultsecret
.
Playbook'u
create_kv_secret.yml
çalıştırın.ansible-playbook create_kv_secret.yml
PLAY [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
Anahtar kasasından gizli dizileri alma
Azure anahtar kasasında depolanan gizli diziler Ansible değişkenlerini doldurmak için kullanılabilir.
Ansible ile anahtar kasası gizli dizilerini almak için adlı
get_kv_secrets.yml
yeni bir playbook oluşturun.azure_preview_modules ile Ansible 2.9
--- - 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 }}"
,
<vaultName>
,<servicePrincipalApplicationId>
ve<servicePrincipalSecret>
değerlerini uygun değerlerle değiştirin<tenantId>
.hakkında
azure_preview_modules
daha fazla bilgi edinmek için Ansible Galaxy sayfasına bakın.azure.azcollection ile Ansible 2.10
--- - 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 }}"
değerini uygun değerle değiştirin
<vaultName>
.hakkında
azcollection
daha fazla bilgi edinmek için bkz . Azure için Ansible koleksiyonu.Playbook'u
get-secret-value.yml
çalıştırın.ansible-playbook get-secret-value.yml
TASK [Output key vault secret] ************************************************* ok: [localhost] => { "msg": "<plainTextPassword>" }
Değiştirilen
<plainTextPassword>
çıkışın daha önce Azure anahtar kasasında oluşturulan gizli dizinin düz metin değeri olduğunu onaylayın.
Örnek Ansible playbook'unun tamamı
Bu bölümde, anahtar kasası gizli dizisi kullanarak Azure Windows VM'sini yapılandırmaya yönelik örnek Ansible playbook'unun tamamı listelenir.
---
- 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
ve <key_vault_secret_name>
değerlerini uygun değerlerle değiştirin<key_vault_uri>
.
Kaynakları temizleme
Aşağıdaki kodu olarak
delete_rg.yml
kaydedin.--- - hosts: localhost tasks: - name: Deleting resource group - "{{ name }}" azure_rm_resourcegroup: name: "{{ name }}" state: absent register: rg - debug: var: rg
ansible-playbook komutunu kullanarak playbook'u çalıştırın. Yer tutucuyu silinecek kaynak grubunun adıyla değiştirin. Kaynak grubundaki tüm kaynaklar silinir.
ansible-playbook delete_rg.yml --extra-vars "name=<resource_group>"
Önemli noktalar:
- Playbook'un
register
değişkeni vedebug
bölümü nedeniyle, komut tamamlandığında sonuçlar görüntülenir.
- Playbook'un
Sonraki adımlar
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin