PowerShell を使用してコンテナーまたは 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 PowerShell でコンテナーまたは 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 リソースへの制限付きアクセスを許可する」を参照してください。

PowerShell モジュールをインストールする

PowerShell を使用してユーザー委任 SAS を作成するには、バージョン 1.10.0 以降の Az. Storage モジュールをインストールします。 次の手順のようにしてモジュールの最新バージョンをインストールします。

  1. Azure PowerShell の以前のインストールがある場合はアンインストールします。

    • [設定][アプリと機能] 設定を使用して、Windows から Azure PowerShell の以前のインストールを削除します。
    • %Program Files%\WindowsPowerShell\Modules からすべての Azure モジュールを削除します。
  2. 最新バージョンの PowerShellGet がインストールされていることを確認します。 Windows PowerShell ウィンドウを開き、次のコマンドを実行して最新バージョンをインストールします。

    Install-Module PowerShellGet -Repository PSGallery -Force
    
  3. PowerShellGet のインストール後、PowerShell ウィンドウを閉じて再び開きます。

  4. 最新バージョンの Azure PowerShell をインストールします。

    Install-Module Az -Repository PSGallery -AllowClobber
    
  5. Azure PowerShell バージョン 3.2.0 以降がインストールされていることを確認します。 次のコマンドを実行して、最新バージョンの Azure Storage PowerShell モジュールをインストールします。

    Install-Module -Name Az.Storage -Repository PSGallery -Force
    
  6. PowerShell ウィンドウを閉じて再び開きます。

インストールされている Az.Storage モジュールのバージョンを確認するには、次のコマンドを実行します。

Get-Module -ListAvailable -Name Az.Storage -Refresh

Azure PowerShell のインストールの詳細については、PowerShellGet を使用した Azure PowerShell のインストールに関するページを参照してください。

Microsoft Entra ID を使用して Azure PowerShell にサインインする

Connect-AzAccount コマンドを呼び出して、Microsoft Entra アカウントでサインインします。

Connect-AzAccount

PowerShell を使用したサインインの詳細については、「Azure PowerShell を使用してサインインする」を参照してください。

Azure RBAC を使用してアクセス許可を割り当てる

Azure PowerShell からユーザー委任 SAS を作成するには、PowerShell へのサインインに使用する Microsoft Entra アカウントに、Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey アクションを含むロールが割り当てられている必要があります。 このアクセス許可により、Microsoft Entra アカウントがユーザー委任キーを要求できるようにします。 ユーザー委任キーは、ユーザー委任 SAS に署名するために使用されます。 Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey アクションを提供するロールは、ストレージ アカウント、リソース グループ、またはサブスクリプションのレベルで割り当てられている必要があります。 ユーザー委任 SAS を作成するための Azure RBAC アクセス許可の詳細については、「ユーザー委任 SAS を作成する」の Azure RBAC によるアクセス許可の割り当てに関するセクションを参照してください。

Microsoft Entra セキュリティ プリンシパルに Azure ロールを割り当てるための十分なアクセス許可がない場合は、アカウント所有者または管理者に依頼して、必要なアクセス許可を割り当ててもらう必要がある場合があります。

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

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

New-AzRoleAssignment -SignInName <email> `
    -RoleDefinitionName "Storage Blob Data Contributor" `
    -Scope  "/subscriptions/<subscription>/resourceGroups/<resource-group>/providers/Microsoft.Storage/storageAccounts/<storage-account>"

Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey アクションを含む組み込みロールの詳細については、「Azure 組み込みロール」を参照してください。

Microsoft Entra 資格情報を使用して SAS をセキュリティで保護する

Azure PowerShell を使用してユーザー委任 SAS を作成すると、SAS への署名に使用されるユーザー委任キーが暗黙的に作成されます。 SAS に指定した開始時刻と有効期限は、ユーザー委任キーの開始時刻と有効期限としても使用されます。

ユーザー委任キーが有効な最大間隔は開始日から 7 日であるため、SAS の有効期限を開始時刻から 7 日以内で指定する必要があります。 ユーザー委任キーの有効期限が切れると SAS は無効になるため、有効期限が 7 日を超える SAS でも、7 日間だけ有効になります。

Azure PowerShell を使用してコンテナーまたは BLOB のユーザー委任 SAS を作成するには、まず、-UseConnectedAccount パラメーターを指定して新しい Azure Storage コンテキスト オブジェクトを作成します。 -UseConnectedAccount パラメーターは、コマンドで、サインインに使用した Microsoft Entra アカウントの下にコンテキスト オブジェクトを作成することを指定します。

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

$ctx = New-AzStorageContext -StorageAccountName <storage-account> -UseConnectedAccount

コンテナー用にユーザー委任 SAS を作成する

コンテナーのユーザー委任 SAS トークンを返すには、New-AzStorageContainerSASToken コマンドを呼び出し、前に作成した Azure Storage コンテキスト オブジェクトを渡します。

次の例では、コンテナー用のユーザー委任 SAS トークンが返されます。 かっこ内のプレースホルダー値を独自の値に置き換えることを忘れないでください。

New-AzStorageContainerSASToken -Context $ctx `
    -Name <container> `
    -Permission racwdl `
    -ExpiryTime <date-time>

返されるユーザー委任 SAS トークンは、次のようになります。

?sv=2018-11-09&sr=c&sig=<sig>&skoid=<skoid>&sktid=<sktid>&skt=2019-08-05T22%3A24%3A36Z&ske=2019-08-07T07%3A
00%3A00Z&sks=b&skv=2018-11-09&se=2019-08-07T07%3A00%3A00Z&sp=rwdl

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

BLOB のユーザー委任 SAS トークンを返すには、New-AzStorageBlobSASToken コマンドを呼び出し、前に作成した Azure Storage コンテキスト オブジェクトを渡します。

次の構文では、BLOB 用のユーザー委任 SAS が返されます。 この例では、-FullUri パラメーターを指定しており、これにより SAS トークンを追加した BLOB URI が返されます。 かっこ内のプレースホルダー値を独自の値に置き換えることを忘れないでください。

New-AzStorageBlobSASToken -Context $ctx `
    -Container <container> `
    -Blob <blob> `
    -Permission racwd `
    -ExpiryTime <date-time>
    -FullUri

返されるユーザー委任 SAS URI は、次のようになります。

https://storagesamples.blob.core.windows.net/sample-container/blob1.txt?sv=2018-11-09&sr=b&sig=<sig>&skoid=<skoid>&sktid=<sktid>&skt=2019-08-06T21%3A16%3A54Z&ske=2019-08-07T07%3A00%3A00Z&sks=b&skv=2018-11-09&se=2019-08-07T07%3A00%3A00Z&sp=racwd

Note

ユーザー委任 SAS では、保存されているアクセス ポリシーを使用したアクセス許可の定義はサポートされていません。

ユーザー委任 SAS を取り消す

Azure PowerShell からユーザー委任 SAS を取り消すには、Revoke-AzStorageAccountUserDelegationKeys コマンドを呼び出します。 このコマンドにより、指定したストレージ アカウントに関連付けられているすべてのユーザー委任キーが取り消されます。 これらのキーに関連付けられているすべての共有アクセス署名が無効になります。

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

Revoke-AzStorageAccountUserDelegationKeys -ResourceGroupName <resource-group> `
    -StorageAccountName <storage-account>

重要

ユーザーの委任キーと Azure ロールの割り当てはいずれも Azure Storage によってキャッシュされるため、失効プロセスの開始と、既存のユーザーの委任 SAS の無効化の間に、遅延が発生する可能性があります。

次のステップ