Azure CLI を使用してコンテナーまたは BLOB のユーザー委任 SAS を作成する

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 の作成」を参照してください。

注意

ユーザー委任 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 Entra 資格情報を使用することをお勧めします。 アプリケーション設計で Shared Access Signature が必要な場合は、セキュリティを強化するために、Microsoft Entra 資格情報を使用してユーザー委任 SAS を作成してください。 ユーザー委任 SAS の詳細については、「ユーザー委任 SAS を作成する」を参照してください。

注意

有効な SAS を所有するすべてのクライアントは、その SAS で許可されているストレージ アカウントのデータにアクセスできます。 SAS を悪意のある、または意図しない用途から保護することが重要です。 SAS の配布は慎重に行い、侵害された SAS を失効させるための計画を用意しておいてください。

Shared Access Signature の詳細については、「Shared Access Signatures (SAS) を使用して Azure Storage リソースへの制限付きアクセスを許可する」を参照してください。

最新バージョンの 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 ロールを割り当てるための十分なアクセス許可がない場合は、アカウント所有者または管理者に依頼して、必要なアクセス許可を割り当ててもらう必要がある場合があります。

次の例では、ストレージ BLOB データ共同作成者ロールを割り当てます。これには、Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey アクションが含まれます。 ロールは、ストレージ アカウントのレベルでスコープ設定されます。

山かっこ内のプレースホルダーをお客様独自の値に置き換えてください。

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 が必要です。 Azure Storage に対して行われた要求が Microsoft Entra 資格情報で承認されるように、--auth-mode パラメーターに login を指定します。 --as-user パラメーターを指定して、返される SAS がユーザー委任 SAS である必要があることを示します。

コンテナー用にユーザー委任 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>

注意

Blob Storage から返される SAS トークンには、URL クエリ文字列に必要な区切り文字 ("?") が含まれていません。 SAS トークンをリソース URL に追加する場合は、必ず区切り文字も追加してください。

BLOB 用のユーザー委任 SAS を作成する

Azure CLI で BLOB 用にユーザー委任 SAS を作成するには、az storage blob generate-sas コマンドを呼び出します。

BLOB でユーザー委任 SAS に対してサポートされているアクセス許可には、追加、作成、削除、読み取り、書き込みがあります。 アクセス許可は、単独で指定することも、組み合わせて指定することもできます。 これらのアクセス許可の詳細については、「ユーザー委任 SAS を作成する」を参照してください。

次の構文では、BLOB 用のユーザー委任 SAS が返されます。 この例では、--full-uri パラメーターを指定しており、これにより SAS トークンを追加した BLOB 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 の無効化の間に、遅延が発生する可能性があります。

次のステップ