Shared Access Signature (SAS) を使用すると、ストレージ アカウント内のコンテナーと BLOB への制限付きアクセスを許可できます。 SAS を作成するときに、クライアントがアクセスできる Azure Storage リソース、それらのリソースに対するアクセス許可、SAS の有効期間などの制約を指定します。
すべての SAS はキーによって署名されます。 次の 2 つの方法のいずれかで SAS に署名できます。
- Microsoft Entra 資格情報を使用して作成されたキーを使用します。 Microsoft Entra の資格情報を使用して署名された SAS は、"ユーザー委任" SAS です。 ユーザー委任 SAS を作成するクライアントには、Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey アクションを含む Azure RBAC ロールを割り当てる必要があります。 詳細については、「ユーザー委任 SAS の作成」を参照してください。
- ストレージ アカウント キーを使用する。 サービス SAS とアカウント SAS は、どちらもストレージ アカウント キーを使用して署名されます。 サービス SAS を作成するクライアントには、アカウント キーへの直接アクセス権を付与するか、Microsoft.Storage/storageAccounts/listkeys/action アクセス許可を割り当てる必要があります。 詳細については、「サービス SAS の作成」または「アカウント SAS の作成」を参照してください。
Note
ユーザー委任 SAS により、ストレージ アカウント キーで署名された SAS のセキュリティが向上します。 Microsoft では、ユーザー委任 SAS を可能な限り使用することを推奨しています。 詳細については、「Shared Access Signatures (SAS) でデータの制限付きアクセスを付与する」を参照してください。
この記事では、Microsoft Entraの認証情報を使い、Azure CLIを使ってコンテナやBlob用のユーザー委任SASを作成する方法を紹介しています。
ユーザー委任 SAS について
コンテナーまたは BLOB にアクセスするための SAS トークンは、Microsoft Entra 資格情報またはアカウント キーのいずれかを使用してセキュリティ保護することができます。 Microsoft Entra 資格情報でセキュリティ保護された SAS は、ユーザーの代わりに、SAS に署名するために使用される OAuth 2.0 トークンが要求されるため、ユーザー委任 SAS と呼ばれます。
Microsoft では、セキュリティのベスト プラクティスとして、より簡単に侵害される可能性があるアカウント キーを使用するのではなく、可能な限り Microsoft Entra の資格情報を使用することをお勧めします。 アプリケーション設計で Shared Access Signature が必要な場合は、セキュリティを強化するために、Microsoft Entra 資格情報を使用してユーザー委任 SAS を作成してください。 ユーザー委任 SAS の詳細については、「ユーザー委任 SAS を作成する」を参照してください。
Caution
有効な SAS を所有するすべてのクライアントは、その SAS で許可されているストレージ アカウント内のデータにアクセスできます。 SAS を悪意のある、または意図しない用途から保護することが重要です。 SASの配布は裁量を用い、侵害されたSASを取り消すための計画を立ててください。 意図しない使用を防ぐために、ユーザーバウンドのユーザー委託SASを使用してください。これはSASトークンを意図されたエンドユーザーに紐付け、他の誰も使えない状態にします。
共有アクセス署名の詳細については、「Azure ストレージ リソースへの制限付きアクセスを共有アクセス署名 (SAS) を使用して付与する」を参照してください。
Azure CLI の最新バージョンをインストールする
Azure CLIを使ってMicrosoft Entra認証情報付きのSASを保護するには、まず最新バージョンのAzure CLIをインストールしていることを確認してください。 Azure CLIのインストールに関する詳細は、「Azure CLIのインストール」をご覧ください。
Azure CLIを使ってユーザー委任SASを作成するには、バージョン2.0.78以降をインストールしていることを確認してください。 インストールされたバージョンを確認するには、 az --version コマンドを使ってください。
Microsoft Entra資格情報を使用してサインインする
Microsoft Entraの認証情報でAzure CLIにサインインしてください。 詳細については、「 Azure CLI を使用したサインイン」を参照してください。
Azure RBAC でアクセス許可を割り当てる
Azure PowerShell からユーザー委任 SAS を作成するには、Azure CLI へのサインインに使用する Microsoft Entra アカウントに、Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey アクションを含むロールが割り当てられている必要があります。 この権限により、そのMicrosoft Entraアカウントはユーザー委任キーを要求できます。 ユーザー委任キーはユーザー委任SASに署名するために使われます。 Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey アクションを提供するロールは、ストレージ アカウント、リソース グループ、またはサブスクリプションのレベルで割り当てる必要があります。
Microsoft EntraのセキュリティプリンシパルにAzureロールを割り当てる権限が十分でない場合は、アカウント所有者や管理者に必要な権限を割り当てるよう依頼する必要があるかもしれません。
以下の例では、Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey アクションを含む Storage Blob Data Contributor ロールを割り当てます。 この役割はストレージアカウントのレベルに限定されています。
山括弧内のプレースホルダー値は、忘れずに自分の値に置き換えてください。
az role assignment create \
--role "Storage Blob Data Contributor" \
--assignee <email> \
--scope "/subscriptions/<subscription>/resourceGroups/<resource-group>/providers/Microsoft.Storage/storageAccounts/<storage-account>"
Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey アクションを含む組み込みロールの詳細については、Azure の組み込みロールを参照してください。
Microsoft Entra認証情報を使ってSASを安全に確保しましょう
Azure CLIでユーザー委任SASを作成すると、SASに署名するユーザー委任キーが暗黙的に作成されます。 SASで指定した開始時間と有効期限は、ユーザー委任キーの開始時間と有効期限としても使われます。
ユーザー委任キーが有効となる最大期間は開始日から7日であるため、SASの有効期限は開始日から7日以内に設定すべきです。 SASはユーザー委任キーの有効期限が切れると無効になるため、有効期限が7日を超えるSASは依然として7日間のみ有効です。
ユーザー委任SASを作成する際には、 --auth-mode login と --as-user parameters が必要です。
--auth-modeパラメータにログインを指定し、Azure StorageへのリクエストがMicrosoft Entra認証情報で承認されるようにしてください。 返されるSASがユーザー委任SASであるべきであることを示す --as-user パラメータを指定します。
コンテナ用のユーザー委任SASを作成します
Azure CLIでコンテナ用のユーザー委任SASを作成するには、az storage container generate-sasコマンドを呼び出します。
コンテナ上のユーザー委任SASに対してサポートされる権限には、追加、作成、削除、リスト、読み取り、書き込みが含まれます。 権限は単独でも組み合わせて指定することもできます。 これらの権限の詳細については、「 ユーザー委任SASの作成」をご覧ください。
以下の例はコンテナのユーザー委任SASトークンを返します。 かっこ内のプレースホルダー値を独自の値に置き換えることを忘れないでください。
az storage container generate-sas \
--account-name <storage-account> \
--name <container> \
--permissions acdlrw \
--expiry <date-time> \
--auth-mode login \
--as-user
SASトークンが返されるユーザー委任は以下の通りです:
se=2019-07-27&sp=r&sv=2018-11-09&sr=c&skoid=<skoid>&sktid=<sktid>&skt=2019-07-26T18%3A01%3A22Z&ske=2019-07-27T00%3A00%3A00Z&sks=b&skv=2018-11-09&sig=<signature>
Note
Blob Storageが返すSASトークンには、URLクエリ文字列の区切り文字('?')が含まれていません。 リソースURLにSASトークンを付け加える場合は、区切り文字も必ず付け加えることを忘れないでください。
blob用のユーザー委任SASを作成します
Azure CLIでblob用のユーザー委任SASを作成するには、az storage blob generate-sas コマンドを呼び出してください。
Blob上のユーザー委任SASに対してサポートされる権限には、追加、作成、削除、読み取り、書き込みが含まれます。 権限は単独でも組み合わせて指定することもできます。 これらの権限の詳細については、「 ユーザー委任SASの作成」をご覧ください。
以下の構文は、blobに対してユーザー委任SASを返します。 例では --full-uri パラメータが指定されており、SASトークンを付け加えたURIを返します。 かっこ内のプレースホルダー値を独自の値に置き換えることを忘れないでください。
az storage blob generate-sas \
--account-name <storage-account> \
--container-name <container> \
--name <blob> \
--permissions acdrw \
--expiry <date-time> \
--auth-mode login \
--as-user \
--full-uri
SAS URIが返すユーザー委任は以下と似ています。
https://storagesamples.blob.core.windows.net/sample-container/blob1.txt?se=2019-08-03&sp=rw&sv=2018-11-09&sr=b&skoid=<skoid>&sktid=<sktid>&skt=2019-08-02T2
2%3A32%3A01Z&ske=2019-08-03T00%3A00%3A00Z&sks=b&skv=2018-11-09&sig=<signature>
Note
Azure CLIが返すSASトークンには、URLクエリ文字列の区切り文字('?')が含まれていません。 SAS トークンをリソース URL に追加する場合は、SAS トークンを追加する前に、リソース URL に区切り文字を追加することを忘れないでください。
ユーザー委任SASは、保存アクセスポリシーで権限を定義することをサポートしていません。
ユーザー委任 SAS を失効させる
Azure CLI からユーザー委任 SAS を取り消すには、az storage account revoke-delegation-keys コマンドを実行します。 このコマンドは指定されたストレージアカウントに関連付けられたすべてのユーザー委任キーを取り消します。 これらの鍵に関連付けられた共有アクセス署名は無効化されます。
山括弧内のプレースホルダー値は、忘れずに自分の値に置き換えてください。
az storage account revoke-delegation-keys \
--name <storage-account> \
--resource-group <resource-group>
重要
ユーザー委任キーとAzureの役割割り当てはどちらもAzure Storageによってキャッシュされているため、取り消しプロセスを開始するタイミングから既存のユーザー委任SASが無効になるまでに遅延が発生する可能性があります。