Shared Access Signatures (SAS)を使ってセキュアにAzure Storage Blobにアクセスさせることができます。
アカウントSAS、サービスSAS、ユーザー委任SASと3種類ありますが、ストレージアカウントキーで署名しない方法であるユーザー委任SASを試したので手順に残します。
ユーザー委任SAS作成
Azure Portalから
-
ストレージアカウントの左メニュー[Shared Access Signature]からはユーザー委任SASを作ることはできません。この画面からはストレージアカウントキーで署名するアカウントSASが作成できます。
-
ではユーザー委任SASをPortalから設定するには、コンテナーもしくはBLOBを選択して[SASの生成]を選択します。
-
Portalだとここからユーザー委任SASを作成することができます。このときPortalにログインしているAzure ADユーザーの資格情報を使用して作成されます。尚、ユーザー委任SASの有効期限は最大1週間となります。
Azure CLIから
-
次にCLIから作成する方法です。Portalと同じようにAzure ADユーザーでトークンを発行してもよいのですが、こっちはユーザーではなくサービスプリンシパルに権限を与える方法がユースケースとしては多いかなと思います。まずはサービスプリンシパルを作成して、トークンを発行する流れとします。
-
追加されると[値]がこのときだけ表示されるためメモしておきます。
-
次に自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ユーザーまたはサービスプリンシパル)に、ストレージアカウントへのアクセス権限を与える必要があります。
-
権限は要件次第ですが、今回は[ストレージBLOBデータ閲覧者]を付与します。ここでの注意点は、例えばサブスクリプションに対して[共同作成者]権限が付与されており、このストレージアカウントに権限が継承されていたとしても、個別に[ストレージBLOBデータ共同作成者]等の権限をストレージアカウントに付与してあげる必要があります。
ユーザー委任SASを使ったアクセス
- az loginしていない新規コマンドプロンプトを起動し、コンテナー配下のBLOBリストを表示してみます。
az storage blob list --account-name [ストレージアカウント名] -c [コンテナー名] --sas-token "[ユーザー委任SASトークン]"
- ログインしていなくてもユーザー委任SASを使ってアクセスできればOKです。
以上