首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获取Ansible中的Azure RM存储帐户密钥?

如何获取Ansible中的Azure RM存储帐户密钥?
EN

Stack Overflow用户
提问于 2017-03-26 10:13:37
回答 4查看 2.2K关注 0票数 4

我正在用Ansible创建一个Azure存储帐户,我想获取访问键的值,以便以后在模板中使用。这些值是在Azure端生成的。例如,我可以使用PowerShell Get-AzureStorageKey cmdlet获取它们。

但是,模块的返回值和模块收集的事实都不包含这些键。

我想我可以使用REST调用(每个这个答案)来获取它们,但是我必须为这个任务创建一个OAuth2令牌。使用REST,很可能无法使用为Ansible定义的凭证集(即环境变量AZURE_CLIENT_IDAZURE_SECRETAZURE_SUBSCRIPTION_IDAZURE_TENANT)。

有任何方法来获取这些密钥(使用已经提供给Ansible的凭据)吗?

事实上,Ansible库似乎包括获取这些密钥的代码,但也似乎它们只在内部使用。

我的剧本:

代码语言:javascript
复制
---
- hosts: localhost
  connection: local

  vars:
    resource_group_name: fetchtest01
    resource_group_location: southcentralus
    storage_account: fdsahf343u2s
    storage_account_type: Standard_LRS

  tasks:
    - name: Ensure resource group "{{ resource_group_name }}" exists
      azure_rm_resourcegroup:
        name: "{{ resource_group_name }}"
        location: "{{ resource_group_location }}"

    - name: Ensure storage account "{{ storage_account }}" exists in "{{ resource_group_name }}" resource group
      azure_rm_storageaccount:
        resource_group: "{{ resource_group_name }}"
        name: "{{ storage_account }}"
        account_type: "{{ storage_account_type }}"

   - name: Fetch storage account keys
     # fetch storage_account_keys

   - name: Use the storage_account_keys.primary in a template 
     template:
       # ...
EN

回答 4

Stack Overflow用户

发布于 2018-10-26 17:52:21

将Azure Cli包装在任务中,

代码语言:javascript
复制
  tasks:
    - name: Retrieve storage access key
      shell: az storage account keys list --account-name {{ storage_account.name }} --resource-group {{ azure.resource_group }} --query "[0].value" --output tsv
      register: storage_access_key

现在,storage_access_key将包含所需的结果。

票数 3
EN

Stack Overflow用户

发布于 2018-10-10 19:06:40

本周,我一直在努力解决同样的问题。我想要一种检索这些密钥的方法,最后我使用了Azure服务原则和Azure REST。我在笔记本电脑上将凭证存储在~/..azure/凭据中,如文档Azure.html#文件存储所解释

我还使用了一个具有多个服务主体的蔚蓝凭据配置文件,并在命令行中指定了AZURE_PROFILE环境变量,如下所示:

代码语言:javascript
复制
ansible-playbook -e AZURE_PROFILE="profile-dev" -i inventories/local playbooks/azure_sas_token.yml -vvv

azure_sas_token.yml游戏手册

代码语言:javascript
复制
---
- name: get sas token and storage account keys
  hosts: 127.0.0.1
  become: no

  vars:
    az_subscription_id: "{{ lookup('ini',  'subscription_id section={{ AZURE_PROFILE }}  file={{ ansible_env.HOME }}/.azure/credentials') }}"
    az_client_id: "{{ lookup('ini',  'client_id section={{ AZURE_PROFILE }}  file={{ ansible_env.HOME }}/.azure/credentials') }}"
    az_tenant_id: "{{ lookup('ini',  'tenant section={{ AZURE_PROFILE }}  file={{ ansible_env.HOME }}/.azure/credentials') }}"
    az_secret: "{{ lookup('ini',  'secret section={{ AZURE_PROFILE }}  file={{ ansible_env.HOME }}/.azure/credentials') }}"

  tasks:
    - name: get sas token through oauth2
      uri:
        url: "https://login.windows.net/{{ az_tenant_id }}/oauth2/token"
        method: POST
        body: "resource=https://management.core.windows.net&client_id={{ az_client_id }}&grant_type=client_credentials&client_secret={{ az_secret }}"
        return_content: yes
      register: sas_token_info
      no_log: true

    - name: get the storage account keys
      uri:
        url: "https://management.azure.com/subscriptions/{{ az_subscription_id }}/resourceGroups/{{ resource_group }}/providers/Microsoft.Storage/storageAccounts/{{ storage_account }}/listKeys?api-version=2016-12-01"
        method: POST
        headers:
          Authorization: "Bearer {{ sas_token_info.json.access_token }}"
        return_content: yes
      register: storage_account_keys

    - debug:
        msg: "{{ storage_account_keys.json['keys'].0.value }}"

    - debug:
        msg: "{{ storage_account_keys.json['keys'].1.value }}"

使用这两个任务,我能够获得我的存储帐户的密钥,然后我能够自动化我的文件共享创建和挂载我的cifs驱动器。

希望能帮上忙。

票数 2
EN

Stack Overflow用户

发布于 2017-03-26 12:14:52

我没有直接回答您的问题,因为我没有使用Ansible,所以我将解释为什么您无法使用azure_rm_storageaccount_facts模块获得存储帐户密钥。

本质上,在Azure资源管理器中,执行操作需要某些类型的权限。由于您可能更新存储帐户中的数据,团队将获取存储帐户属性和密钥的操作拆分为两个单独的操作。要获得属性,您需要执行不返回键的Get Properties操作。要获得密钥,您需要执行List Keys

我相信azure_rm_storageaccount_facts只执行第一个操作(即获取属性),这就是为什么您没有得到密钥。我查看了所有与Azure相关的操作here,无法找到返回密钥的操作。

如果使用PowerShell是一个选项,那么您希望使用的Cmdlet是Get-AzureRmStorageAccountKey,而不是Get-AzureStorageKey,因为这是用于Classic存储帐户的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43027457

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档