Storage アカウント SAS の作成手順 (Azure Portal, Azure Storage Explorer, PowerShell, Azure CLI)
はじめに
お客様が Shared Access Signatures ( SAS ) をご利用になる際には 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 は、アカウント アクセス キーを使用して署名されます。 ストレージ アカウント全体へのアクセスを委任 します。
他の SAS との違いかつアカウント SAS の大きな特徴には以下の 2 点が挙げられます。
- 複数のサービスにまたがった 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 を失効させるための計画を用意しておいてください。
アカウント SAS の作成を行う際に設定する主なパラメータについて
アカウント SAS の作成に際しては、主に下記のパラメータを使用します。
-
使用できるサービス ( Available Services ): SAS がアクセスを許可するストレージ サービスを指定します。Blob ( b ) 、File ( f ) 、Queue ( q ) 、Table ( t ) のいずれか、または複数を選択できます。 Azure Portal、Azure Storage Explorer、PowerShell、Azure CLI で設定が必須です。
-
使用できるリソースの種類 ( Resource Types ): SAS がアクセスを許可するリソースの種類を指定します。Service ( s ) 、Container ( c ) 、Object ( o ) のいずれか、または複数を選択できます。 Azure Portal、Azure Storage Explorer、PowerShell、Azure CLI で設定が必須です。
- アクセス許可 ( Permissions ) :
SAS が許可する操作を指定します。読み取り ( r ) 、書き込み ( w ) 、削除 ( d ) 、リスト表示 ( l ) 、追加 ( a ) 、作成 ( c ) 、更新 ( u ) 、処理 ( p ) などの操作を選択できます。
- 選択できるアクセス許可はサービス、リソースの種類の組み合わせによって異なります。
- ご参考:操作別のアカウント SAS アクセス許可
-
BLOB バージョン管理のアクセス許可 ( Blob Versioning Permissions ): SAS が許可する Blob バージョンの操作を指定します。Blob バージョニングは、オブジェクトの以前のバージョンを自動的に保持するために Blob ストレージのバージョニングを有効にすることができます。Blob バージョニングが有効になっている場合、Blob が変更または削除された場合にデータを復元するために以前のバージョンの Blob にアクセスできます。
-
許可された BLOB インデックスのアクセス許可 ( Allowed Blob Indexing Permissions ) : SAS が許可する Blob インデックスの操作を指定します。特定の Blob インデックスに対する読み取り、書き込み、削除などの操作を制御します。
- 開始日時と有効期限の日時 ( Start and Expiry Date-Time ) :
SAS トークンの有効期間を定義します。開始日時と終了日時を設定できます。指定を省略した場合は、それぞれの作成方法でデフォルトの有効期限が設定されます。Azure CLI のみ終了日時の設定が必須です。
- SAS を発行する場合は、可能な限り短い有効期限を使用するようにします。
- 使用できる IP アドレス ( Allowed IP Addresses ) : SAS を使用できる IP アドレスを指定します。 ただし、パブリック IP アドレスのみ設定可能、Azure リソースからのアクセスの場合は異なるリージョンのパブリック IP アドレスであることにご留意ください。
-
許可されるプロトコル ( Allowed Protocols ) : SAS トークンを HTTPS プロトコルのみで使用できるようにする場合は、このフラグを指定します。 SAS を使用できるプロトコルを指定します。「 HTTPS のみ」または「 HTTPS と HTTP 」を選択できます。
-
署名キー ( Signing Key ) : SAS トークンの生成と検証に使用されます。key1 または key2 のどちらかを指定します。
- 暗号化スコープ ( Encryption-scope ) : サービス上のデータを暗号化するために使用される定義済みの暗号化スコープです。PowerShell、Azure CLI のみ使用可能です。
アカウント SAS の作成手順
下記では以下の4つの条件を許可する設定の例をご案内します。
- ストレージ アカウント内の Blob に対して
- 使用できるリソースの種類はオブジェクト のみ
- 読み取りのみ、
- 有効期限が「現在~ 30 分後」
Azure Portal を使用してアカウント SAS を作成する
(1) Azure Portalにログインし、ポータル上部の検索欄に該当のストレージ アカウント名を入力・検索し、選択します。
(2) 左側のメニューから「 Shared Access Signature 」を選択します。
(3) 「 Shared Access Signature 」ブレードが開きます。 特定のストレージ サービスやリソースへのアクセス許可を制御する設定をします。 開始日時と有効期限の日時はデフォルトで現在時刻から 8 時間後までとなります。必要に応じてご変更ください。
(4) 「 SAS と接続文字列を生成する」を押下します。
(5) SAS トークンが生成されます。
Azure Storage Explorer を使用してアカウント SAS を作成する
(1) Azure Storage Explorer を起動します。
(2) 左側のパネルで対象のストレージ アカウントを右クリックし、「 Shared Access Signatureの取得… 」を選択します。
(3) Shared Access Signature ダイアログ ボックスが表示されます。 特定のストレージ サービスやリソースへのアクセス許可を制御する設定をします。 開始日時と有効期限の日時はデフォルトで現在時刻から 24 時間後までとなります。
(4) 「作成」を押下します。
(5) SAS トークンが生成されます。
PowerShell を使用してアカウント SAS を作成する
(1) サブスクリプションへ接続します。
Connect-AzAccount -Subscription <Subscription Id>
(2) SAS トークンの作成に必要な各種パラメータの変数を設定していきます。
$storageAccount = Get-AzStorageAccount `
-ResourceGroupName "<resource-group>" `
-Name "<storage-account>"
$services = "Blob"
$resourceTypes = "Object"
$permissions ="r"
$startTime = Get-Date
$expiryTime = $startTime.AddMinutes(30)
- 上記では省略されているパラメータもご利用可能です。
(3) SAS トークンを作成します。
New-AzStorageAccountSASToken `
-Service $services `
-ResourceType $resourceTypes `
-Permission $permissions `
-StartTime $startTime `
-ExpiryTime $expiryTime `
-Context $storageAccount.Context
(4) 上記を実行すると SAS トークンが表示されます。
また、本コマンドを変数に格納することで後から容易に SAS トークンを確認することが可能となります。
$sas = New-AzStorageAccountSASToken `
-Service $services `
-ResourceType $resourceTypes `
-Permission $permissions `
-StartTime $startTime `
-ExpiryTime $expiryTime `
-Context $storageAccount.Context
SAS トークンの表示は「 $sas 」を入力します。
Azure CLI を使用してアカウント SAS を作成する
(1) Azure にログインします。
az login
(2) サブスクリプションへ接続します。
az account set --subscription <Subscription Id>
(3) SAS トークンの作成に必要な各種パラメータの変数を設定していきます。
resourceGroup="<resource-group>"
storageAccount="<storage-account>"
services="b"
resourceTypes="o"
permissions="r"
expiry=$(date -u -d "30 minutes" '+%Y-%m-%dT%H:%MZ')
- 上記では省略されているパラメータもご利用可能です。
(4) ストレージ アカウントの接続文字列を取得します。
connectionString=$(az storage account show-connection-string \
--name $storageAccount \
--resource-group $resourceGroup \
--output tsv)
(5) SAS トークンを作成します。
az storage account generate-sas \
--connection-string $connectionString \
--services $services \
--resource-types $resourceTypes \
--permissions $permissions \
--expiry $expiry \
--https-only
(6) 生成された SAS トークンが表示されます。
SAS を使用する
上記の手順で作成した SAS トークンの簡単な使い方をご案内いたします。
(1) 該当のBLOBのURLを取得します。
(2) ブラウザのアドレス欄に、コピーしたURLに区切り文字「 ? 」および SAS トークンを加えた文字列を入力し、BLOBにアクセスします。
ブラウザのアドレス欄には以下のような内容を貼り付けています。
2024 年 02 月 26 日時点の内容となります。
本記事の内容は予告なく変更される場合がございますので予めご了承ください。