2017-03-26 5 views
4

私はAzure RMストレージアカウントを作成していますが、後でテンプレートで使用するためにアクセスキーの値を取得したいと思います。これらの値はAzure側で生成されます。たとえば、PowerShell Get-AzureStorageKeyコマンドレットを使用してそれらを取得できます。AnsibleでAzure RMストレージアカウントキーを取得する方法は?

しかし、azure_rm_storageaccount moduleの戻り値も、​​azure_rm_storageaccount_facts moduleで収集されたファクトもこれらのキーを含んでいません。

私はREST APIコール(this answer)を使用してそれらをフェッチできると思いますが、このタスクのためだけにOAuth2トークンを作成する必要があります。 REST APIを使用すると、Ansible(環境変数AZURE_CLIENT_IDAZURE_SECRETAZURE_SUBSCRIPTION_IDAZURE_TENANT)に定義されている資格情報のセットを使用する方法がない可能性があります。

(既にAnsibleに提供されている資格情報を使用して)これらのキーをフェッチする方法はありますか?


は実際には、Ansibleライブラリはthe code for fetching these keysを含めるように見えるが、また、彼らは内部でのみ使用されているようです。


マイ脚本:私は、私はあなたがストレージを取得することができませんでした理由について説明を提供するつもりですAnsibleで働いていないように直接あなたの質問に

--- 
- 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: 
     # ... 

答えて

1

そうでもない答えアカウントキーはazure_rm_storageaccount_factsモジュールを使用しています。

本質的にAzure Resource Managerでは、操作を実行するために特定の種類の権限が必要です。ストレージアカウントのデータを更新する可能性があるため、チームはストレージアカウントのプロパティとキーを2つの別々の操作で分割する操作を分割しています。プロパティを取得するには、キーを返さないGet Properties操作を実行します。キーを取得するには、List Keysを実行する必要があります。

私はazure_rm_storageaccount_factsが最初の操作(つまりプロパティの取得)のみを実行するため、キーを取得できないと考えています。私はすべてのAzure関連の操作hereを見て、キーを返す操作を見つけることができませんでした。


PowerShellを使用してオプションである場合、これはClassicストレージアカウントのためであるとして、あなたが使用したいコマンドレットはGet-AzureRmStorageAccountKeyないGet-AzureStorageKeyです。

+0

:)です。 'キーがすべてAZURE_CLIENT_ID、AZURE_SECRET、AZURE_SUBSCRIPTION_ID、AZURE_TENANT資格情報を使用する方法を使用してアクセス可能な場合、あなたは知っていますか? ' - はい。これは本質的に「サービス主体」です。このサービスプリンシパルがリストキー操作を実行する権限を持っていることを確認するだけです。このサービスプリンシパルを 'Storage Account Contributor'ロールに入れることができます。ただし、OAuth2も使用します。 –

+0

はい、私は最初に、より深い分離があると思っていましたが、これはちょうど2つの異なる呼び出しです。実際には[Ansible](https:// github。com/ansible/ansible/blob/devel/lib/ansible/module_utils/azure_rm_common.py#L0455)。それを使用する方法をトレース... – techraf

0

ここにKEYを与えるbashスニペットがあります。コマンドは2つのキーを返します。 jqと紺色のcliがインストールされていると仮定します。

KEY=$(az storage account keys list --resource-group ${RG_NAME} --account-name ${STORAGE_NAME} | jq -r '.[].value' | head -1)

関連する問題