Öğretici: sanal makine gizli dizilerini bir şekilde depolamak için Azure Key Vault kullanın

Bu hızlı başlangıçta, Azure Anahtar Kasası 'nda anormal olacak şekilde gizli dizi oluşturup buradan bir parola alacaksınız.

Önemli

Bu makaledeki örnek PlayBook 'ları çalıştırmak için anerişilebilir 2,9 (veya üzeri) gereklidir.

Bu makalede şunları öğreneceksiniz:

  • Azure Anahtar Kasası örneği oluşturma
  • Azure Anahtar Kasası 'nda gizli bir mağaza oluşturma
  • Azure Anahtar Kasası 'ndan anormal olan gizli dizileri al

Önkoşullar

  • Azure aboneliği: Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.

Azure Anahtar Kasası oluşturma

Anormal olarak, kaynaklarınızı dağıtmak için bir kaynak grubu gerekir.

  1. create_kv.ymlKaynak grubu oluşturmak için aşağıdaki görevi ekleyin adlı bir Anerişilebilir PlayBook oluşturun:

    ---
    - name: Create Azure key vault
      hosts: localhost
      connection: local
      tasks:
    
      - name: Create resource group
        azure_rm_resourcegroup:
          name: ansible-kv-test-rg
          location: eastus
    
  2. 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>
    

    <tenantId>, <servicePrincipalObjectId> Ve <vaultName> değerlerini uygun değerlerle değiştirin. ObjectID, anahtar kasasındaki gizli dizi erişimine izin vermek için kullanılır.

    anahtar noktası:

    • Azure Anahtar Kasası adları genel olarak evrensel olarak benzersiz olmalıdır. Anahtar Kasası ve içindeki anahtarlar/gizli diziler URI aracılığıyla erişilir https://{vault-name}.vault.azure.net .
  3. Görevi ekleyerek Azure Anahtar Kasası örneğini yapılandırın 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
                - delete
    
  4. create_kv.ymlPlayBook 'u ç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 Anahtar Kasası oluşturma PlayBook 'u tamamlamayı doldurun

Bu bölümde, Azure Anahtar Kasası oluşturmak için tüm örnek anormal PlayBook 'lar listelenmektedir.

- 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

Parolanın oluşturulabilmesi için, Anahtar Kasası URI 'SI gerekir.

  1. Adlı başka bir PlayBook oluşturun create_kv_secret.yml . Aşağıdaki kodu PlayBook 'a 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 }}"
    

    <vaultName>Anahtar Kasası adınızın adıyla ve <secretValue> gizli anahtar değeriyle değiştirin.

    Anahtar noktası:

    • azure_rm_keyvault_infoVe set_facts modülleri, Anahtar Kasası URI 'sini bir değişken olarak kaydeder. Daha sonra bu değişken, azure_rm_keyvaultsecret parolayı oluşturmak için modüle geçirilir.
  2. create_kv_secret.ymlPlayBook 'u ç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 al

Azure Anahtar Kasası 'nda depolanan gizli dizileri, erişilebilir değişkenleri doldurmak için kullanılabilir.

  1. Anahtar Kasası gizli dizilerini almak için adlı yeni bir PlayBook oluşturun get_kv_secrets.yml .

    Azure_preview_modules ile anerişilebilir 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 }}"
    

    ,,, <tenantId><vaultName><servicePrincipalApplicationId> Ve <servicePrincipalSecret> değerlerini uygun değerlerle değiştirin.

    Hakkında daha fazla bilgi edinmek için azure_preview_modules , bkz. azure_preview_modules sayfası.

    Azure. azcollection ile anerişilebilir 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 }}"
    

    <vaultName>Uygun değerle değiştirin.

    Hakkında daha fazla bilgi edinmek için azcollection bkz. azcollection.

  2. get-secret-value.ymlPlayBook 'u çalıştırın.

    ansible-playbook get-secret-value.yml
    
    TASK [Output key vault secret] *************************************************
    ok: [localhost] => {
        "msg": "<plainTextPassword>"
    }
    

    Yukarıdaki çıktıyı, <plainTextPassword> 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, bir Azure Windows sanal makinesini anahtar kasası parolası kullanarak yapılandırmaya yönelik örnek anormal bir playbook 'un tamamı listelenmektedir.

---
- 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

<key_vault_uri>Ve <key_vault_secret_name> değerlerini uygun değerlerle değiştirin.

Kaynakları temizleme

  1. Aşağıdaki kodu olarak kaydedin delete_rg.yml .

    ---
    - hosts: localhost
      tasks:
        - name: Deleting resource group - "{{ name }}"
          azure_rm_resourcegroup:
            name: "{{ name }}"
            state: absent
          register: rg
        - debug:
            var: rg
    
  2. Anerişilebilir-PlayBook komutunu kullanarak PlayBook 'u çalıştırın. Yer tutucusunu, silinecek kaynak grubunun adıyla değiştirin. Kaynak grubundaki tüm kaynaklar silinir.

    ansible-playbook delete_rg.yml --extra-vars "name=<resource_group>"
    

    Anahtar noktaları:

    • registerdebug PlayBook 'un değişkeni ve bölümü nedeniyle, sonuçlar komutun bittiği zaman görüntülenir.

Sonraki adımlar