Azure CLIを使ってBlob Storageにアクセスする際に、閲覧・書き込みでユーザ権限を分ける方法です。
ストレージアカウント作成
Blob閲覧者用サービスプリンシパル作成
Blob書き込み権限用サービスプリンシパル作成
閲覧者用の手順でサービスプリンシパルを作成します。今回は[BlobWriter]という名前で作りました。
ストレージアカウントに権限を付与する
-
役割に[ストレージBLOBデータ閲覧者]を選び、先程作った[BlobReader]サービスプリンシパルに権限を与えます。
-
今度は役割に[ストレージBLOBデータ共同作成者]を選び、先ほど作った[BlobWriter]サービスプリンシパルに権限を与えます。
Azure Active DirectoryテナントID取得
Azure CLIで閲覧者権限のテスト
- 閲覧者用サービスプリンシパルでログインします。操作端末は、Azure CLIが入っていれば、LinuxでもWindowsでもなんでもよいです。
$ az login --service-principal -u [事前にメモしたアプリケーションID] -p [事前にメモしたtoken] --tenant [事前にメモしたテナントID]
- コンテナー内のBlobリストが表示できるか試します。JSONでBlob情報が取得できればOKです。
$ az storage blob list --container-name [コンテナー名] --account-name [ストレージアカウント名] --auth-mode login
- コンテナーにBlobをアップロードできるか試します。エラーになればOKです。
$ az storage blob upload --container-name [コンテナー名] --name bbb.txt --file bbb.txt --account-name [ストレージアカウント名] --auth-mode login
Azure CLIで書き込み権限のテスト
- 次に書き込み権限のテストをします。一度ログアウトします。
$ az logout
- 書き込み権限用サービスプリンシパルでログインします。
$ az login --service-principal -u [事前にメモしたアプリケーションID] -p [事前にメモしたtoken] --tenant [事前にメモしたテナントID]
- コンテナー内のBlobリストが表示できるか試します。JSONでBlob情報が取得できればOKです。
$ az storage blob list --container-name [コンテナー名] --account-name [ストレージアカウント名] --auth-mode login
- コンテナーにBlobをアップロードできるか試します。アップロードできればOKです。
$ az storage blob upload --container-name [コンテナー名] --name bbb.txt --file bbb.txt --account-name [ストレージアカウント名] --auth-mode login
コンテナー単位で権限制御する
No subscriptions were foundエラーが出る
-
az login
コマンド実行時に以下のエラーが出ることがあります。
No subscriptions were found for '[アプリケーションID]'. If this is expected, use '--allow-no-subscriptions' to have tenant level accesses
- これは対象のサービスプリンシパルに何も権限が当たっていないときに出力されるので、何かIAM権限を与えたあとに
az login
してみてください。