6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Azure Blob Storage ユーザー委任SASを使う

Posted at

Shared Access Signatures (SAS)を使ってセキュアにAzure Storage Blobにアクセスさせることができます。
アカウントSAS、サービスSAS、ユーザー委任SASと3種類ありますが、ストレージアカウントキーで署名しない方法であるユーザー委任SASを試したので手順に残します。

ユーザー委任SAS作成

Azure Portalから

  • ストレージアカウントの左メニュー[Shared Access Signature]からはユーザー委任SASを作ることはできません。この画面からはストレージアカウントキーで署名するアカウントSASが作成できます。
    image.png

  • ではユーザー委任SASをPortalから設定するには、コンテナーもしくはBLOBを選択して[SASの生成]を選択します。
    image.png

  • Portalだとここからユーザー委任SASを作成することができます。このときPortalにログインしているAzure ADユーザーの資格情報を使用して作成されます。尚、ユーザー委任SASの有効期限は最大1週間となります。
    image.png

  • 今回はコンテナーのBLOB一覧を表示したいので、アクセス許可の[読み取り]と[リスト]にチェックします。
    image.png

  • [SASトークンおよびURLを生成]を選択し、[BLOB SAS トークン]をコピーしておきます。
    image.png

Azure CLIから

  • 次にCLIから作成する方法です。Portalと同じようにAzure ADユーザーでトークンを発行してもよいのですが、こっちはユーザーではなくサービスプリンシパルに権限を与える方法がユースケースとしては多いかなと思います。まずはサービスプリンシパルを作成して、トークンを発行する流れとします。

  • Azure ADを選択して、[アプリの登録]→[新規登録]の順に選択します。
    image.png

  • アプリケーション名を入力し、他はデフォルト設定のまま作成します。
    image.png

  • 作成されたら[アプリケーションID]と[テナントID]を控えておきます。
    image.png

  • [証明書とシークレット]→[新しいクライアントシークレット]の順に選択します。
    image.png

  • シークレット名と有効期限を入れて追加します。
    image.png

  • 追加されると[値]がこのときだけ表示されるためメモしておきます。

  • 次に自PCでコマンドプロンプトを開きます。必要に応じてAzure CLIを最新化しておきます。

az upgrade
  • 事前に作成したサービスプリンシパルの各種情報を入力してログインします。
az login --service-principal --username [アプリケーションID] --password [シークレット] --tenant [ディレクトリID]
  • ユーザー委任SASを生成します。今回はpermissionsにl(list)とr(read)を付与しています。expiryは1週間以内の日時を指定します。
az storage container generate-sas --account-name [ストレージアカウント名] --name [コンテナー名] --permissions lr --expiry 2022-05-01T00:00:00Z --auth-mode login --as-user
  • SASトークンが返ってくるのでメモしておきます。

RBAC設定

  • ユーザー委任SASを発行したユーザー(今回だとAzure ADユーザーまたはサービスプリンシパル)に、ストレージアカウントへのアクセス権限を与える必要があります。

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

  • 権限は要件次第ですが、今回は[ストレージBLOBデータ閲覧者]を付与します。ここでの注意点は、例えばサブスクリプションに対して[共同作成者]権限が付与されており、このストレージアカウントに権限が継承されていたとしても、個別に[ストレージBLOBデータ共同作成者]等の権限をストレージアカウントに付与してあげる必要があります。
    image.png

ユーザー委任SASを使ったアクセス

  • az loginしていない新規コマンドプロンプトを起動し、コンテナー配下のBLOBリストを表示してみます。
az storage blob list --account-name [ストレージアカウント名] -c [コンテナー名] --sas-token "[ユーザー委任SASトークン]"
  • ログインしていなくてもユーザー委任SASを使ってアクセスできればOKです。

以上

6
2
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
6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?