Storage サービス SAS の作成手順 (Azure Portal, Azure Storage Explorer, PowerShell, Azure CLI)
はじめに
お客様がShared Access Signatures ( SAS ) をご利用になる際には SASトークンを取得する必要があります。
なお前提として、権限は最小特権の原則に従うべきものとなります。
Shared Access Signatures ( SAS ) とは
Shared Access Signature ( SAS ) とは、ストレージ アカウント内のリソースへのセキュリティで保護された、署名された URL を介した制限付きの委任アクセス機能です。 SAS を使用すると、クライアントがデータにアクセスする方法をきめ細かく制御できます。 なお、SAS トークンは以下の 3 つの種類がございます。
- ユーザー委任 SAS
- サービス SAS
- ご参考:本記事
- アカウント SAS
ご参考:Shared Access Signatures (SAS) でデータの制限付きアクセスを付与する
この Blog 記事ではサービス SAS について、Azure portal、Azure Storage Explorer、PowerShell、およびAzure CLIを使用した 4 通りの作成方法を紹介します。
サービス SAS とは
サービス SAS は、アカウント アクセス キーを使用して署名され、次のうち 1 つだけの Azure Storage サービスのリソースへのアクセスを委任します。
- Blob コンテナー・Blob
- ファイル共有
- キュー
- テーブル
またサービス SAS は、アクセス ポリシーを使用して SAS のアクセス許可と期間を定義することができることが他の SAS との大きな違いとなります。
ご参考:サービス SAS の作成
SAS 利用上のご注意
- SAS トークンの保存について
SAS トークンは、Azure Storage によって追跡されません。お客様側で計算して生成される署名文字列です。そのため、ウィンドウが閉じられると SAS トークンの値は取得できなくなるため、お客様にて生成された値をコピーして安全な場所に保存しておく必要があります。
- ご参考:SAS トークンの保存
- SAS URL について
SAS URL を作成するには、SAS トークン ( URI ) をストレージ サービスのリソース URL に追加します。作成時に各プラットホームから返される SAS トークンには、URL クエリ文字列に必要な区切り文字 ( “?” ) が含まれていません。SAS URL を作成する際は、必ずリソース URL と SAS トークンの間に区切り文字を追加してください。
- ご参考:SAS URL について
- SAS の失効について
有効な SAS を所有するすべてのクライアントは、その SAS で許可されているストレージ アカウントのデータにアクセスできます。 SAS を悪意のある、または意図しない用途から保護することが重要です。 SAS の配布は慎重に行い、侵害された SAS を失効させるための計画を用意しておいてください。
- ご参考 1 : Shared Access Signature (SAS) トークンの失効方法
- ご参考 2 : SAS を取り消す
サービス SAS の作成を行う際に設定する主なパラメータについて
サービス SAS の作成に際しては、主に下記のパラメータを使用します。
-
署名方法 ( Signing method ): サービス SAS を作成する際は、「アカウント キー(Account key)」を選択します。
- 保存されているアクセス ポリシー( Stored access policy ):
- 保存されているアクセス ポリシーを使用して、SAS のアクセス許可と期間を定義することができます。 既存の保存されているアクセス ポリシーの名前が指定されている場合、そのポリシーは、SAS に関連付けられます。
- SAS が侵害された場合は、できるだけ早くその SAS を失効させることをお勧めします。 保存されているアクセス ポリシーに関連付けられているサービス SAS を失効させるには、保存されているアクセス ポリシーを削除するか、ポリシーの名前を変更するか、または有効期限を過去の時間に変更します。
- 保存されているアクセス ポリシーを指定しない場合は、SAS のアクセス許可と期間を設定してご使用ください。保存されているアクセス ポリシーに関連付けられていないサービス SAS を失効させることはできません。 このため、SAS の有効期限が 1 時間以下になるように制限することをお勧めします。
- ご参考: ID 管理とアクセス管理
- 開始日時と有効期限の日時 ( Start and expiry date-time ):
SAS トークンの有効期間を定義します。開始日時と終了日時を設定できます。指定を省略した場合は、それぞれの作成方法でデフォルトの有効期限が設定されます。
- SAS を発行する場合は、可能な限り短い有効期限を使用するようにします。
- ご参考 1 :BLOB ストレージのセキュリティに関する推奨事項
- ご参考 2 :SAS を使用する際のベスト プラクティス
- SAS を発行する場合は、可能な限り短い有効期限を使用するようにします。
- アクセス許可 ( Permissions ):
- SAS が許可する操作を指定します。読み取り ( r ) 、書き込み ( w ) 、削除 ( d ) 、リスト表示 ( l ) 、追加 ( a ) 、作成 ( c ) 、更新 ( u ) 、処理 ( p ) などの操作を選択できます。
- 選択できるアクセス許可はサービス SAS の対象となるリソースによって異なります。
- ご参考:アクセス許可を指定する
- サービス SAS では、特定の操作へのアクセスを許可できません。
- コンテナー、キュー、およびテーブルを作成、削除、または一覧表示することはできません。
- コンテナーのメタデータとプロパティを読み取ったり書き込んだりすることはできません。
- キューをクリアすることはできません。また、そのメタデータを書き込むことができません。
- コンテナーをリースすることはできません。
これらの操作へのアクセスを許可する SAS を構築するには、アカウント SAS をご使用ください。 - ご参考:アカウント SAS を作成する
- 使用できる IP アドレス ( Allowed IP addresses ): SAS を使用できる IP アドレスを指定します。ただし、パブリック IP アドレスのみ設定可能、Azure リソースからのアクセスの場合は異なるリージョンのパブリック IP アドレスであることにご留意ください。
-
許可されるプロトコル ( Allowed protocols ): SAS を使用できるプロトコルを指定します。「 HTTPS のみ( HttpsOnly ) 」または「 HTTPS と HTTP ( HttpsOrHttp ) 」を選択できます。
-
署名キー ( Signing key ): SAS トークンの生成と検証に使用されます。key1 または key2 のどちらかを指定します。
- 使用できるリソースの種類 ( SignedResource ):
サービスSAS がアクセスを許可するリソースの種類を指定します。
- Blob Storage のみ BLOB ( b ) 、BLOB バージョン ( Bv )、BLOB スナップショット ( bs )、コンテナー ( c )、ディレクトリ ( d ) のいずれか、または複数を選択できます。
- Azure Files 共有リソースがファイルかどうかを指定 ( f )、 共有リソースが共有であるかどうかを指定 ( s ) のいずれか、または複数を選択できます。
Blob のサービス SAS の作成手順
下記では以下の4つの条件を許可する設定の例をご案内します。
- あるコンテナー内の特定の Blob に対して、
- 読み取りのみ、
- HTTPS 接続のみ、
- 有効期限が「現在~ 30 分後」
Azure Portal を使用してサービス SAS を作成する
(1) Azure Portalにログインし、ポータル上部の検索欄に該当のストレージ アカウント名を入力・検索し、選択します。
(2) サービス SAS を作成したい Blob の名称上で右クリックし、「SAS の作成」を選択します。
(3) 必要なオプションを指定します。
(4) 必要事項の設定後、「SAS トークンおよび URL を生成」を選択します。
(5) SASトークンが生成されます。
Azure Storage Explorer を使用してサービス SAS を作成する
(1) Azure Storage Explorer を起動します。
(2) 左側のパネルで対象のストレージ アカウント内の 該当の Blob の名称上で右クリックし、「Shared Access Signatureの取得…」 を選択します。
(3) Shared Access Signature ダイアログ ボックスが表示されます。 必要なオプションを指定します。
(4) 必要事項の設定後、「作成」を押下します。
(5) SAS トークンが生成されます。
PowerShellを使用してサービス SAS を作成する
(1) サブスクリプションへ接続します。
Connect-AzAccount -Subscription <Subscription Id>
(2) SASトークンの作成に必要な各種パラメータの変数を設定していきます。
$accountName = "<storage-account>"
$containerName = "<container-name>"
$blobName = "<blob-name>"
$permissions = "r"
$protocol = "HttpsOnly"
$startTime = Get-Date
$expiryTime = $startTime.AddMinutes(30)
- 上記では省略されているパラメータもご利用可能です。
(3) Azure Storage に対する操作を行う際に認証情報や接続情報を保持するためのオブジェクトである Azure Storage コンテキストを作成します。
$ctx = New-AzStorageContext -StorageAccountName $accountName
(4) SAS トークンを作成します。
New-AzStorageBlobSASToken `
-Container $containerName `
-Blob $blobName `
-Permission $permissions `
-Protocol $protocol `
-StartTime $startTime `
-ExpiryTime $expiryTime `
-Context $ctx
(5) 生成された SAS トークンが表示されます。
Azure CLI を使用してサービス SAS を作成する
(1) Azure にログインします。
az login
(2) サブスクリプションへ接続します。
az account set --subscription <Subscription Id>
(3) SASトークンの作成に必要な各種パラメータの変数を設定していきます。
storageAccount="<storage-account>"
containerName="<container-name>"
resourceGroup="<resource-group>"
blobName="<blob-name>"
expiry=$(date -u -d "30 minutes" '+%Y-%m-%dT%H:%MZ')
permissions="r"
- 上記では省略されているパラメータもご利用可能です。
(4) ストレージ アカウントの接続文字列を取得します。
connectionString=$(az storage account show-connection-string \
--name $storageAccount \
--resource-group $resourceGroup \
--output tsv)
(5) SAS トークンを作成します。
az storage blob generate-sas \
--account-name $storageAccount \
--connection-string $connectionString \
--container-name $containerName \
--name $blobName \
--permissions $permissions \
--expiry $expiry \
--https-only
(6) 生成された SAS トークンが表示されます。
保存されているアクセス ポリシーを使用したサービス SAS の作成例 ( Azure Portal )
以下に、保存されているアクセス ポリシーを使用した、 Blob へのサービス SAS の作成で最も簡単なAzure Portal での作成方法をご案内します。
(1) アクセス ポリシーを作成し、保存します。 (保存済みの場合は手順 (5) にお進みください。) Blob のアクセス ポリシーはその Blob を内包するコンテナーに対して設定します。 該当のコンテナーの名称上で右クリックし、「アクセス ポリシー」を選択します。
(2) アクセス ポリシー ブレード内の「+ ポリシーの追加」を選択します。
(3) ID 欄にアクセス ポリシー名を入力し、アクセス許可・開始時刻・有効期限を設定後「 OK 」を押下します。
(4) リスト内に作成したアクセス ポリシーが表示されたことを確認したら、「保存」を選択します。
以上でアクセス ポリシーの作成及び保存ができました。
(5) 保存されているアクセス ポリシーを使用した SAS トークンを作成します。 サービス SAS を作成したい Blob の名称上で右クリックし、「 SAS の作成」を選択します。
(6) 「保存されているアクセス ポリシー」欄で、使用したいアクセス ポリシー名を選択し、その他必要事項の設定後、「SAS トークンおよび URL を生成」を選択します。 「保存されているアクセス ポリシー」が選択されると、アクセス許可及び開始日時と有効期限の日時欄がグレーアウトして入力できなくなることをご確認ください。
(7) SASトークンが生成されます。
SAS を使用する
上記の手順で作成した SAS トークンの簡単な使い方をご案内いたします。
(1) 該当のBLOBのURLを取得します。
(2) ブラウザのアドレス欄に、コピーしたURLに区切り文字「 ? 」および SAS トークンを加えた文字列を入力し、BLOBにアクセスします。
ブラウザのアドレス欄には以下のような内容を貼り付けています。
2024 年 02 月 26 日時点の内容となります。
本記事の内容は予告なく変更される場合がございますので予めご了承ください。