Azure CLI を使用してコンテナーまたは BLOB のユーザー委任 SAS を作成する (プレビュー)Create a user delegation SAS for a container or blob with the Azure CLI (preview)

Shared Access Signature (SAS) を使用すると、ストレージ アカウント内のコンテナーと BLOB への制限付きアクセスを許可できます。A shared access signature (SAS) enables you to grant limited access to containers and blobs in your storage account. SAS を作成するときに、クライアントがアクセスできる Azure Storage リソース、それらのリソースに対するアクセス許可、SAS の有効期間などの制約を指定します。When you create a SAS, you specify its constraints, including which Azure Storage resources a client is allowed to access, what permissions they have on those resources, and how long the SAS is valid.

すべての SAS はキーによって署名されます。Every SAS is signed with a key. 次の 2 つの方法のいずれかで SAS に署名できます。You can sign a SAS in one of two ways:

  • Azure Active Directory (Azure AD) の資格情報を使用して作成されたキーを使用する。With a key created using Azure Active Directory (Azure AD) credentials. Azure AD の資格情報を使用して署名された SAS は、ユーザー委任 SAS です。A SAS signed with Azure AD credentials is a user delegation SAS.
  • ストレージ アカウント キーを使用する。With the storage account key. サービス SASアカウント SAS は、どちらもストレージ アカウント キーを使用して署名されます。Both a service SAS and an account SAS are signed with the storage account key.

この記事では、Azure Active Directory (Azure AD) 資格情報を使用して、Azure CLI でコンテナーまたは BLOB のユーザー委任 SAS を作成する方法について示します (プレビュー)。This article shows how to use Azure Active Directory (Azure AD) credentials to create a user delegation SAS for a container or blob with the Azure CLI (preview).

ユーザー委任 SAS について (プレビュー)About the user delegation SAS (preview)

コンテナーまたは BLOB にアクセスするための SAS トークンは、Azure AD 資格情報またはアカウント キーのいずれかを使用してセキュリティ保護することができます。A SAS token for access to a container or blob may be secured by using either Azure AD credentials or an account key. Azure AD 資格情報でセキュリティ保護された SAS は、ユーザーの代わりに、SAS に署名するために使用される OAuth 2.0 トークンが要求されるため、ユーザー委任 SAS と呼ばれます。A SAS secured with Azure AD credentials is called a user delegation SAS, because the OAuth 2.0 token used to sign the SAS is requested on behalf of the user.

セキュリティのベスト プラクティスとして、より簡単に侵害できるアカウント キーを使用するのではなく、可能な限り Azure AD 資格情報を使用することをお勧めします。Microsoft recommends that you use Azure AD credentials when possible as a security best practice, rather than using the account key, which can be more easily compromised. アプリケーション設計で Shared Access Signature が必要な場合は、セキュリティを強化するために、Azure AD 資格情報を使用してユーザー委任 SAS を作成してください。When your application design requires shared access signatures, use Azure AD credentials to create a user delegation SAS for superior security. ユーザー委任 SAS の詳細については、「ユーザー委任 SAS を作成する」を参照してください。For more information about the user delegation SAS, see Create a user delegation SAS.

注意

このユーザー委任 SAS プレビューは、非運用環境でのみの使用を意図しています。The user delegation SAS preview is intended for non-production use only.

注意事項

有効な SAS を所有するすべてのクライアントは、その SAS で許可されているストレージ アカウントのデータにアクセスできます。Any client that possesses a valid SAS can access data in your storage account as permitted by that SAS. SAS を悪意のある、または意図しない用途から保護することが重要です。It's important to protect a SAS from malicious or unintended use. SAS の配布は慎重に行い、侵害された SAS を失効させるための計画を用意しておいてください。Use discretion in distributing a SAS, and have a plan in place for revoking a compromised SAS.

Shared Access Signature の詳細については、「Shared Access Signatures (SAS) を使用して Azure Storage リソースへの制限付きアクセスを許可する」を参照してください。For more information about shared access signatures, see Grant limited access to Azure Storage resources using shared access signatures (SAS).

最新バージョンの Azure CLI をインストールするInstall the latest version of the Azure CLI

Azure CLI を使用して Azure AD の資格情報で SAS をセキュリティで保護するには、まず最新バージョンの Azure CLI がインストールされていることを確認します。To use the Azure CLI to secure a SAS with Azure AD credentials, first make sure that you have installed the latest version of Azure CLI. Azure CLI のインストールの詳細については、「Azure CLI のインストール」を参照してください。For more information about installing the Azure CLI, see Install the Azure CLI.

Azure AD の資格情報でサインインするSign in with Azure AD credentials

Azure AD の資格情報を使用して、Azure CLI にサインインします。Sign in to the Azure CLI with your Azure AD credentials. 詳細については、Azure CLI を使用したサインインに関するページを参照してください。For more information, see Sign in with the Azure CLI.

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

Azure PowerShell からユーザー委任 SAS を作成するには、Azure CLI へのサインインに使用する Azure AD アカウントに、Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey アクションを含むロールが割り当てられている必要があります。To create a user delegation SAS from Azure PowerShell, the Azure AD account used to sign into Azure CLI must be assigned a role that includes the Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey action. このアクセス許可により、Azure AD アカウントがユーザー委任キーを要求できるようにします。This permission enables that Azure AD account to request the user delegation key. ユーザー委任キーは、ユーザー委任 SAS に署名するために使用されます。The user delegation key is used to sign the user delegation SAS. Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey アクションを提供するロールは、ストレージ アカウント、リソース グループ、またはサブスクリプションのレベルで割り当てられている必要があります。The role providing the Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey action must be assigned at the level of the storage account, the resource group, or the subscription.

Azure AD セキュリティ プリンシパルに RBAC ロールを割り当てるための十分なアクセス許可がない場合は、アカウント所有者または管理者に依頼して、必要なアクセス許可を割り当ててもらう必要がある場合があります。If you do not have sufficient permissions to assign RBAC roles to an Azure AD security principal, you may need to ask the account owner or administrator to assign the necessary permissions.

次の例では、ストレージ BLOB データ共同作成者ロールを割り当てます。これには、Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey アクションが含まれます。The following example assigns the Storage Blob Data Contributor role, which includes the Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey action. ロールは、ストレージ アカウントのレベルでスコープ設定されます。The role is scoped at the level of the storage account.

山かっこ内のプレースホルダーをお客様独自の値に置き換えてください。Remember to replace placeholder values in angle brackets with your own values:

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 リソースの組み込みロール」を参照してください。For more information about the built-in roles that include the Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey action, see Built-in roles for Azure resources.

Azure AD の資格情報を使用して SAS をセキュリティ保護するUse Azure AD credentials to secure a SAS

Azure CLI を使用してユーザー委任 SAS を作成すると、SAS への署名に使用されるユーザー委任キーが暗黙的に作成されます。When you create a user delegation SAS with the Azure CLI, the user delegation key that is used to sign the SAS is created for you implicitly. SAS に指定した開始時刻と有効期限は、ユーザー委任キーの開始時刻と有効期限としても使用されます。The start time and expiry time that you specify for the SAS are also used as the start time and expiry time for the user delegation key.

ユーザー委任キーが有効な最大間隔は開始日から 7 日であるため、SAS の有効期限を開始時刻から 7 日以内で指定する必要があります。Because the maximum interval over which the user delegation key is valid is 7 days from the start date, you should specify an expiry time for the SAS that is within 7 days of the start time. ユーザー委任キーの有効期限が切れると SAS は無効になるため、有効期限が 7 日を超える SAS でも、7 日間だけ有効になります。The SAS is invalid after the user delegation key expires, so a SAS with an expiry time of greater than 7 days will still only be valid for 7 days.

ユーザー委任 SAS を作成する場合は、--auth-mode login--as-user parameters が必要です。When creating a user delegation SAS, the --auth-mode login and --as-user parameters are required. Azure Storage に対して行われた要求が Azure AD の資格情報で承認されるように、--auth-mode パラメーターにログインを指定します。Specify login for the --auth-mode parameter so that requests made to Azure Storage are authorized with your Azure AD credentials. --as-user パラメーターを指定して、返される SAS がユーザー委任 SAS である必要があることを示します。Specify the --as-user parameter to indicate that the SAS returned should be a user delegation SAS.

コンテナー用にユーザー委任 SAS を作成するCreate a user delegation SAS for a container

Azure CLI でコンテナー用にユーザー委任 SAS を作成するには、az storage container generate-sas コマンドを呼び出します。To create a user delegation SAS for a container with the Azure CLI, call the az storage container generate-sas command.

コンテナーでユーザー委任 SAS に対してサポートされているアクセス許可には、追加、作成、削除、一覧表示、読み取り、書き込みがあります。Supported permissions for a user delegation SAS on a container include Add, Create, Delete, List, Read, and Write. アクセス許可は、単独で指定することも、組み合わせて指定することもできます。Permissions can be specified singly or combined. これらのアクセス許可の詳細については、「ユーザー委任 SAS を作成する」を参照してください。For more information about these permissions, see Create a user delegation SAS.

次の例では、コンテナー用のユーザー委任 SAS トークンが返されます。The following example returns a user delegation SAS token for a container. かっこ内のプレースホルダー値を独自の値に置き換えることを忘れないでください。Remember to replace the placeholder values in brackets with your own values:

az storage container generate-sas \
    --account-name <storage-account> \
    --name <container> \
    --permissions acdlrw \
    --expiry <date-time> \
    --auth-mode login \
    --as-user

返されるユーザー委任 SAS トークンは、次のようになります。The user delegation SAS token returned will be similar to:

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 用のユーザー委任 SAS を作成するCreate a user delegation SAS for a blob

Azure CLI で BLOB 用にユーザー委任 SAS を作成するには、az storage blob generate-sas コマンドを呼び出します。To create a user delegation SAS for a blob with the Azure CLI, call the az storage blob generate-sas command.

BLOB でユーザー委任 SAS に対してサポートされているアクセス許可には、追加、作成、削除、読み取り、書き込みがあります。Supported permissions for a user delegation SAS on a blob include Add, Create, Delete, Read, and Write. アクセス許可は、単独で指定することも、組み合わせて指定することもできます。Permissions can be specified singly or combined. これらのアクセス許可の詳細については、「ユーザー委任 SAS を作成する」を参照してください。For more information about these permissions, see Create a user delegation SAS.

次の構文では、BLOB 用のユーザー委任 SAS が返されます。The following syntax returns a user delegation SAS for a blob. この例では、--full-uri パラメーターを指定しており、これにより SAS トークンを追加した BLOB URI が返されます。The example specifies the --full-uri parameter, which returns the blob URI with the SAS token appended. かっこ内のプレースホルダー値を独自の値に置き換えることを忘れないでください。Remember to replace the placeholder values in brackets with your own values:

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 は、次のようになります。The user delegation SAS URI returned will be similar to:

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>

注意

ユーザー委任 SAS では、保存されているアクセス ポリシーを使用したアクセス許可の定義はサポートされていません。A user delegation SAS does not support defining permissions with a stored access policy.

ユーザー委任 SAS を取り消すRevoke a user delegation SAS

Azure CLI からユーザー委任 SAS を取り消すには、az storage account revoke-delegation-keys コマンドを呼び出します。To revoke a user delegation SAS from the Azure CLI, call the az storage account revoke-delegation-keys command. このコマンドにより、指定したストレージ アカウントに関連付けられているすべてのユーザー委任キーが取り消されます。This command revokes all of the user delegation keys associated with the specified storage account. これらのキーに関連付けられているすべての共有アクセス署名が無効になります。Any shared access signatures associated with those keys are invalidated.

山かっこ内のプレースホルダーをお客様独自の値に置き換えてください。Remember to replace placeholder values in angle brackets with your own values:

az storage account revoke-delegation-keys \
    --name <storage-account> \
    --resource-group <resource-group>

重要

ユーザーの委任キーと RBAC ロールの割り当てはいずれも Azure Storage によってキャッシュされるため、失効プロセスの開始と、既存のユーザーの委任 SAS の無効化の間に、遅延が発生する可能性があります。Both the user delegation key and RBAC role assignments are cached by Azure Storage, so there may be a delay between when you initiate the process of revocation and when an existing user delegation SAS becomes invalid.

次の手順Next steps