LoginSignup
4
3

More than 3 years have passed since last update.

許可したAzure Virtual Machine からのい blobファイルへアクセスする方法

Posted at

利用目的

Azure VM内部からblobストレージに置いたファイルをダウンロード(アップロード)する場合に
Azure VM上に認証情報となるキーなどを一切保存せずアクセスできるようにするために利用します。
意外と実例が無かったので記事にしました。

利用方法 概略

直ぐに使いたい人のための手順概略のみを記載しました。

  1. Azure Virtual MachineのマネージドIDを有効にする
  2. blobストレージまたはBlobコンテナなどに対して、Azure Virtual Machine Blobのアクセス権を追加する
  3. 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をオンにします。
他の必要な項目を入力して、仮想マシンを作成します。
image.png

  • 既存のAzure Virtual MachineでマネージドIDを有効にする場合

Azure の[Virtual Machines]から該当の仮想マシンを選択
メニューの[設定] => [ID] を選択
状態のスイッチをオンに切り替え、保存をクリックすることでマネージドIDを有効にします。
image.png

Blobコンテナに対して、仮想マシンのファイルアクセス権を追加する

Azureの[ストレージアカウント]から該当のストレージアカウントを選択します。
[Blob service] => [コンテナー] へ移動します。
[+コンテナー]を選択して新しいコンテナーを作成します。
コンテナ名を入力して、[作成]をクリックします
image.png
[パブリックアクセスレベル]は、[プライベート]とすることで匿名アクセスを防ぎます。

作成したコンテナ名を選択して画面を切り替えます。
image.png

[アクセス制御(IAM)]画面に移動し、[+追加]->[ロールの割り当ての追加]をクリック
image.png

[役割]を[ストレージ BLOBの閲覧者]にします。
※ ファイルをアップロードする場合は、[ストレージ BLOBの共同所有者]を選んでください。
[アクセスの割当先]を[仮想マシン]にします。
[サブスクリプション]は仮想マシンのサブスクリプションを選びます。
一覧にマネージドIDが割り当てられた仮想マシン一覧が表示されるので、対象の仮想マシンをクリックして
[選択したメンバー]に移動します。
[保存]をクリックします。
image.png

設定を確認する場合は、[アクセス制御(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はコンテナ内部のファイルをクリックすると表示されます。

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3