LoginSignup
7
7

More than 5 years have passed since last update.

Azure Blob Storageの権限設定

Last updated at Posted at 2019-04-10

Azure CLIを使ってBlob Storageにアクセスする際に、閲覧・書き込みでユーザ権限を分ける方法です。

ストレージアカウント作成

  • ストレージアカウントを作って、[test]というコンテナーを作成しておきます。
    image.png

  • testコンテナーに、適当にファイルをアップロードしておきます。
    image.png

Blob閲覧者用サービスプリンシパル作成

  • Azure ADを選択して、[アプリの登録]→[新しいアプリケーションの登録]の順に選択します。
    image.png

  • アプリ名を入れます。サインオンURLは使わないので適当で。
    image.png

  • 作成されたらアプリケーションIDをメモっておきます。
    image.png

  • [設定]を選択します。
    image.png

  • [キー]を選択します。
    image.png

  • 説明に[token]を、有効期限は要件次第ですが今回は[期限なし]を選択して、[保存]を押します。
    image.png

  • キーが表示されるのでメモしておきます。
    image.png

Blob書き込み権限用サービスプリンシパル作成

閲覧者用の手順でサービスプリンシパルを作成します。今回は[BlobWriter]という名前で作りました。

ストレージアカウントに権限を付与する

  • ストレージアカウントを選択して、[アクセス制御(IAM)]→[ロールの割り当て]→[追加]の順に選択します。
    image.png

  • [ロールの割り当ての追加]を選択します。
    image.png

  • 役割に[ストレージBLOBデータ閲覧者]を選び、先程作った[BlobReader]サービスプリンシパルに権限を与えます。
    image.png

  • 今度は役割に[ストレージBLOBデータ共同作成者]を選び、先ほど作った[BlobWriter]サービスプリンシパルに権限を与えます。
    image.png

Azure Active DirectoryテナントID取得

  • AADの[プロパティ]を選択し、[ディレクトリID]をメモしておきます。 image.png

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

コンテナー単位で権限制御する

  • コンテナーを選択してIAM設定すれば可能です。コンテナー単位にする場合、ストレージアカウントのIAM権限は設定しなくても大丈夫です。
    image.png

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してみてください。
7
7
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
7
7