利用目的
Azure VM内部からblobストレージに置いたファイルをダウンロード(アップロード)する場合に
Azure VM上に認証情報となるキーなどを一切保存せずアクセスできるようにするために利用します。
意外と実例が無かったので記事にしました。
利用方法 概略
直ぐに使いたい人のための手順概略のみを記載しました。
- Azure Virtual MachineのマネージドIDを有効にする
- blobストレージまたはBlobコンテナなどに対して、Azure Virtual Machine Blobのアクセス権を追加する
- Azure Virtual Machineから以下のコマンドでダウンロードする
response=$(curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fstorage.azure.com%2F' -H Metadata:true -s)
access_token=$(echo $response | python -c 'import sys, json; print (json.load(sys.stdin)["access_token"])')
curl -H "x-ms-version:2017-11-09" -H "Authorization: Bearer ${access_token}" {blobのURI}
利用方法 詳細
手順の詳細を知りたい人のために記載しました。
Azure Virtual MachineにマネージドIDを有効にする
- 新規にAzure Virtual Machineを作る時に有効にする場合
Azure の[Virtual Machines]から追加をクリックしてウィザードを起動します。
管理のタグでID システム割り当てマネージドIDをオンにします。
他の必要な項目を入力して、仮想マシンを作成します。
- 既存のAzure Virtual MachineでマネージドIDを有効にする場合
Azure の[Virtual Machines]から該当の仮想マシンを選択
メニューの[設定] => [ID] を選択
状態のスイッチをオンに切り替え、保存をクリックすることでマネージドIDを有効にします。
Blobコンテナに対して、仮想マシンのファイルアクセス権を追加する
Azureの[ストレージアカウント]から該当のストレージアカウントを選択します。
[Blob service] => [コンテナー] へ移動します。
[+コンテナー]を選択して新しいコンテナーを作成します。
コンテナ名を入力して、[作成]をクリックします
[パブリックアクセスレベル]は、[プライベート]とすることで匿名アクセスを防ぎます。
[アクセス制御(IAM)]画面に移動し、[+追加]->[ロールの割り当ての追加]をクリック
[役割]を[ストレージ BLOBの閲覧者]にします。
※ ファイルをアップロードする場合は、[ストレージ BLOBの共同所有者]を選んでください。
[アクセスの割当先]を[仮想マシン]にします。
[サブスクリプション]は仮想マシンのサブスクリプションを選びます。
一覧にマネージドIDが割り当てられた仮想マシン一覧が表示されるので、対象の仮想マシンをクリックして
[選択したメンバー]に移動します。
[保存]をクリックします。
設定を確認する場合は、[アクセス制御(IAM)]の[ロール割り当て]のタブを見てください
※ ダウンロードするファイルは必要に応じてファイルをアップロードしてください。(本文書では手順を記載しません)
仮想マシンのLinuxのBASHからファイルをダウンロードする
Blobのアクセストークンを取得するために以下コマンドを入力します。
response=$(curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fstorage.azure.com%2F' -H Metadata:true -s)
access_token=$(echo $response | python -c 'import sys, json; print (json.load(sys.stdin)["access_token"])')
curlコマンドを使って、ファイルをダウンロードします。
curl -H "x-ms-version:2017-11-09" -H "Authorization: Bearer ${access_token}" {blobのURL}
※ Authorization ヘッダを付けてアクセストークンを指定します。
※ blobのURIはコンテナ内部のファイルをクリックすると表示されます。