ユーザーの委任 SAS の作成

資格情報またはアカウント キーを使用して、コンテナー、ディレクトリ、または BLOB にアクセスするための共有アクセス署名 (SAS) トークンMicrosoft Entraセキュリティで保護できます。 Microsoft Entra資格情報でセキュリティ保護された SAS は、ユーザー委任 SAS と呼ばれます。 セキュリティのベスト プラクティスとして、より簡単に侵害される可能性があるアカウント キーではなく、可能な場合はMicrosoft Entra資格情報を使用することをお勧めします。 アプリケーション設計で共有アクセス署名が必要な場合は、Microsoft Entra資格情報を使用してユーザー委任 SAS を作成し、セキュリティを強化します。

すべての SAS はキーによって署名されます。 ユーザー委任 SAS を作成するには、まず ユーザー委任キーを要求する必要があります。このキーを使用して SAS に署名します。 ユーザー委任キーは、Microsoft Entra資格情報に依存する点を除き、サービス SAS またはアカウント SAS の署名に使用されるアカウント キーに似ています。 ユーザー委任キーを要求するには、 ユーザー委任キーの取得 操作を呼び出します。 その後、ユーザー委任キーを使用して SAS を作成できます。

ユーザー委任 SAS は、Azure Blob StorageとAzure Data Lake Storage Gen2でサポートされています。 保存されたアクセス ポリシーは、ユーザー委任 SAS ではサポートされていません。

注意事項

共有アクセス署名はストレージ リソースにアクセス許可を付与するキーであり、アカウント キーを保護するのと同じように保護する必要があります。 SAS を悪意のある、または意図しない用途から保護することが重要です。 SAS の配布は慎重に行い、侵害された SAS を失効させるための計画を用意しておいてください。 共有アクセス署名を使用する操作は HTTPS 接続経由でのみ実行する必要があり、共有アクセス署名 URI は HTTPS などのセキュリティで保護された接続でのみ配布する必要があります。

アカウント キーを使用して SAS をセキュリティで保護する方法については、「 サービス SAS の作成 」および「 アカウント SAS の作成」を参照してください。

ディレクトリ スコープ アクセスに対するユーザー委任 SAS のサポート

ユーザー委任 SAS は、承認バージョンsv (sr=d) が 2020-02-10 以降で階層型名前空間 (HNS) が有効になっている場合に、ディレクトリ スコープ () をサポートします。 ディレクトリ スコープ (sr=d) のセマンティクスは、コンテナー スコープ (sr=c) に似ていますが、アクセスはディレクトリとその中のファイルとサブディレクトリに制限されます。 が指定されている場合 sr=d は、 sdd クエリ パラメーターも必要です。

承認バージョン 2020-02-10 の文字列から署名の形式は変更されません。

ユーザー OID のユーザー委任 SAS サポート

ユーザー委任 SAS では、承認バージョン () が 2020-02-10 以降の場合に または suoid パラメーターでsaoid実行されるオプションのユーザー オブジェクト識別子 (svOID) がサポートされます。 この省略可能なパラメーターは、Hadoop や Spark などのマルチユーザー クラスター ワークロードの拡張承認モデルを提供します。

SAS トークンは、特定のファイルシステム操作とユーザーに制限できます。これにより、マルチユーザー クラスター全体に分散する方が安全な脆弱なアクセス トークンが提供されます。 これらの機能のユース ケースの 1 つは、Hadoop ABFS ドライバーと Apache Ranger の統合です。

ユーザー委任 SAS を承認する

クライアントがユーザー委任 SAS を使用して Blob Storage リソースにアクセスすると、Azure Storage への要求は、SAS の作成に使用されたMicrosoft Entra資格情報で承認されます。 そのMicrosoft Entra アカウントに付与されるロールベースのアクセス制御 (RBAC) アクセス許可と、SAS で明示的に付与されたアクセス許可によって、リソースへのクライアントのアクセスが決まります。 この方法により、セキュリティ レベルが強化され、アプリケーション コードにアカウント アクセス キーを格納する必要がなくなります。 このような理由から、Microsoft Entra資格情報を使用して SAS を作成することは、セキュリティのベスト プラクティスです。

SAS を所有するクライアントに付与されるアクセス許可は、ユーザー委任キーを要求したセキュリティ プリンシパルに付与されたアクセス許可と、 (sp) フィールドを使用して signedPermissions SAS トークンのリソースに付与されたアクセス許可の共通部分です。 RBAC を介してセキュリティ プリンシパルに付与されたアクセス許可も SAS トークンに付与されていない場合、そのアクセス許可は、SAS を使用してリソースにアクセスしようとするクライアントには付与されません。 ユーザー委任 SAS を作成するときは、RBAC 経由で付与されるアクセス許可と SAS トークン経由で付与されたアクセス許可の両方が、クライアントに必要なアクセス レベルに一致していることを確認します。

ユーザー委任 SAS を作成するには、次の操作を行います。

  1. RBAC を使用して、ユーザー委任キーを要求するセキュリティ プリンシパルに目的のアクセス許可を付与します。
  2. Microsoft Entra IDから OAuth 2.0 トークンを取得します。
  3. トークンを使用して、ユーザー委任キーの取得操作を呼び出して ユーザー委任キーを 要求します。
  4. ユーザー委任キーを使用して、適切なフィールドで SAS トークンを構築します。

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

ユーザー委任キーを要求するセキュリティ プリンシパルには、これを行うための適切なアクセス許可が必要です。 Microsoft Entra IDセキュリティ プリンシパルには、ユーザー、グループ、サービス プリンシパル、またはマネージド ID を指定できます。

ユーザー委任キーを要求するには、 Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey アクションをセキュリティ プリンシパルに割り当てる必要があります。 次の組み込み RBAC ロールには、 Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey アクションが含まれます。明示的に、またはワイルドカード定義の一部として使用されます。

ユーザー委任キーの取得操作はストレージ アカウントのレベルで機能するため、Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey アクションは、ストレージ アカウント、リソース グループ、またはサブスクリプションのレベルでスコープを設定する必要があります。 セキュリティ プリンシパルに、前述の組み込みロール、または Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey アクションを含むカスタム ロールがストレージ アカウント、リソース グループ、またはサブスクリプションのレベルで割り当てられている場合、セキュリティ プリンシパルはユーザー委任キーを要求できます。

セキュリティ プリンシパルに、データ アクセスを許可するロールが割り当てられているが、コンテナーのレベルにスコープが設定されている場合は、ストレージ アカウント、リソース グループ、またはサブスクリプションのレベルで、 ストレージ BLOB Delegator ロールをセキュリティ プリンシパルに追加で割り当てることができます。 Storage Blob Delegator ロールは、ユーザー委任キーを要求するためのアクセス許可をセキュリティ プリンシパルに付与します。

Azure Storage の RBAC ロールの詳細については、「Azure Active Directory で承認する」を参照してください。

OAuth 2.0 トークンを取得する

ユーザー委任キーを取得するには、まず、Microsoft Entra IDから OAuth 2.0 トークンを要求します。 トークンに Bearer スキームを指定して、 ユーザー委任キーの取得 操作の呼び出しを承認します。 Microsoft Entra IDからの OAuth トークンの要求の詳細については、「認証フローとアプリケーション シナリオ」を参照してください。

ユーザー委任キーを要求する

ユーザー委任キーの取得操作を呼び出すと、ユーザー委任 SAS トークンのパラメーターとして使用される値のセットとしてキーが返されます。 これらのパラメーターについては、 ユーザー委任キーの取得 に関するリファレンスと、次のセクション「ユーザー委任 SAS の構築」で説明されています。

クライアントが OAuth 2.0 トークンを使用してユーザー委任キーを要求すると、Azure Storage はセキュリティ プリンシパルに代わってユーザー委任キーを返します。 ユーザー委任キーを使用して作成された SAS には、セキュリティ プリンシパルに付与されたアクセス許可が付与されます。

ユーザー委任キーを取得したら、それを使用して、キーの有効期間中に任意の数のユーザー委任共有アクセス署名を作成できます。 ユーザー委任キーは、取得に使用する OAuth 2.0 トークンとは独立しているため、キーがまだ有効である限り、トークンを更新する必要はありません。 キーが最大 7 日間有効であることを指定できます。

ユーザー委任 SAS を構築する

次の表は、ユーザー委任 SAS トークンでサポートされているフィールドをまとめたものです。 以降のセクションでは、これらのパラメーターを指定する方法について詳しく説明します。

SAS フィールド名 SAS トークン パラメーター 必須または省略可能 バージョンのサポート 説明
signedVersion sv 必須 2018-11-09 以降 署名フィールドの作成に使用されるサービスのバージョンを示します。 また、この SAS で行われた要求を処理するサービス バージョンも指定します。
signedResource sr 必須 All 共有アクセス署名を使用してアクセスできる BLOB リソースを指定します。
signedStart st オプション すべて 省略可能。 共有アクセス署名が有効になる時刻。受け入れられる ISO 8601 UTC 形式のいずれかで表されます。 この値を省略すると、現在の UTC 時刻が開始時刻として使用されます。 受け入れられる UTC 形式の詳細については、「 DateTime 値の書式設定」を参照してください。
signedExpiry se 必須 All 共有アクセス署名が無効になる時刻。受け入れられる ISO 8601 UTC 形式のいずれかで表されます。 受け入れられる UTC 形式の詳細については、「 DateTime 値の書式設定」を参照してください。
signedPermissions sp 必須 All SAS を所有するクライアントがリソースに対して実行できる操作を示します。 アクセス許可を組み合わせることができます。
signedIp sip オプション 2015-04-05 以降 要求を受け入れる IP アドレスまたは包括的な IP アドレス範囲を指定します。 範囲を指定する場合は、その範囲が包括的であることに注意してください。 サポートされているのは、IPv4 アドレスのみです。

たとえば、sip=168.1.5.65 または sip=168.1.5.60-168.1.5.70 です。
signedProtocol spr オプション 2015-04-05 以降 SAS で行われた要求に対して許可されるプロトコルを指定します。 SAS トークンで行われた要求で HTTPS が使用されることを要求するには、このフィールドを含めます。
signedObjectId skoid 必須 2018-11-09 以降 Microsoft Entraセキュリティ プリンシパルを識別します。
signedTenantId sktid 必須 2018-11-09 以降 セキュリティ プリンシパルが定義されているMicrosoft Entra テナントを指定します。
signedKeyStartTime skt 省略可能。 2018-11-09 以降 値は、 ユーザー委任キーの取得 操作によって返されます。 許容される ISO 8601 UTC 形式のいずれかで表される、ユーザー委任キーの有効期間の開始を示します。 値を省略すると、現在の時刻が想定されます。 受け入れられる UTC 形式の詳細については、「 DateTime 値の書式設定」を参照してください。
signedKeyExpiryTime ske 必須 2018-11-09 以降 値は、 ユーザー委任キーの取得 操作によって返されます。 許容される ISO 8601 UTC 形式のいずれかで表される、ユーザー委任キーの有効期間の終了を示します。 受け入れられる UTC 形式の詳細については、「 DateTime 値の書式設定」を参照してください。
signedKeyVersion skv 必須 2018-11-09 以降 値は、 ユーザー委任キーの取得 操作によって返されます。 ユーザー委任キーの取得に使用されたストレージ サービスのバージョンを指定します。 このフィールドには、バージョン 2018-11-09 以降を指定する必要があります。
signedKeyService sks 必須 2018-11-09 以降 ユーザー委任キーが有効なサービスを示します。 現時点では、Blob Storage のみがサポートされています。
signedAuthorizedObjectId saoid オプション 2020-02-10 以降 SAS トークンによって付与されたアクションを実行するためにユーザー委任キーの所有者によって承認されるMicrosoft Entraセキュリティ プリンシパルのオブジェクト ID を指定します。 ポータブル オペレーティング システム インターフェイス (POSIX) アクセス制御リスト (ACL) に対する追加のアクセス許可チェックは実行されません。
signedUnauthorizedObjectId suoid オプション 2020-02-10 以降 階層型名前空間が有効になっている場合に、Microsoft Entraセキュリティ プリンシパルのオブジェクト ID を指定します。 Azure Storage は、操作を承認する前に、オブジェクト ID に対して POSIX ACL チェックを実行します。
signedCorrelationId scid オプション 2020-02-10 以降 ストレージ監査ログを、SAS を生成して配布するプリンシパルによって使用される監査ログと関連付ける。
signedDirectoryDepth sdd sr=d の場合は必須 2020-02-10 以降 string-to-sign の フィールドで canonicalizedResource 指定されたディレクトリのルート フォルダー内のディレクトリの数を示します。
signedEncryptionScope ses オプション 2020-12-06 以降 要求の内容の暗号化に使用する暗号化スコープを示します。
signature sig 必須 All 署名はハッシュベースのメッセージ認証コード (HMAC) です。これは、SHA256 アルゴリズムを使用して文字列対署名とキーを使用して計算され、Base64 エンコードを使用してエンコードされます。
Cache-Control 応答ヘッダー rscc オプション 2013-08-15 以降 Azure Storage は、 Cache-Control 応答ヘッダーを SAS トークンで指定された値に設定します。
Content-Disposition 応答ヘッダー rscd オプション 2013-08-15 以降 Azure Storage は、 Content-Disposition 応答ヘッダーを SAS トークンで指定された値に設定します。
Content-Encoding 応答ヘッダー rsce オプション 2013-08-15 以降 Azure Storage は、 Content-Encoding 応答ヘッダーを SAS トークンで指定された値に設定します。
Content-Language 応答ヘッダー rscl オプション 2013-08-15 以降 Azure Storage は、 Content-Language 応答ヘッダーを SAS トークンで指定された値に設定します。
Content-Type 応答ヘッダー rsct オプション 2013-08-15 以降 Azure Storage は、 Content-Type 応答ヘッダーを SAS トークンで指定された値に設定します。

署名済みバージョン フィールドを指定する

必須 signedVersion (sv) フィールドは、共有アクセス署名のサービス バージョンを指定します。 この値は、フィールドの構築に使用されるサービスのバージョンを signature 示し、この共有アクセス署名で行われた要求を処理するサービスのバージョンを指定します。 フィールドの sv 値は、バージョン 2018-11-09 以降である必要があります。

署名されたリソース フィールドを指定する

必須 signedResource (sr) フィールドは、共有アクセス署名を介してアクセスできるリソースを指定します。 次の表では、SAS トークンで BLOB、コンテナー、またはディレクトリ リソースを参照する方法について説明します。

リソース パラメーター値 サポートされているバージョン 説明
BLOB b All BLOB のコンテンツとメタデータへのアクセスを許可します。
BLOB バージョン Bv 2018-11-09 以降 BLOB バージョンのコンテンツとメタデータへのアクセスを許可しますが、ベース BLOB へのアクセスは許可しません。
BLOB スナップショット bs 2018-11-09 以降 BLOB スナップショットのコンテンツとメタデータへのアクセスを許可しますが、ベース BLOB にはアクセスできません。
コンテナー c All コンテナー内の任意の BLOB のコンテンツとメタデータ、およびコンテナー内の BLOB の一覧へのアクセスを許可します。
ディレクトリ d 2020-02-10 以降 階層型名前空間が有効になっているストレージ アカウント内の、ディレクトリ内の任意の BLOB のコンテンツとメタデータ、およびディレクトリ内の BLOB の一覧へのアクセスを許可します。 フィールドにディレクトリが指定されている signedResource 場合は、 signedDirectoryDepth (sdd) パラメーターも必要です。 ディレクトリは常にコンテナー内にあります。

署名の有効期間を指定する

(st) フィールドと signedExpiry (se) フィールドはsignedStart、SAS の開始時刻と有効期限を示します。 signedExpiry フィールドは必須です。 signedStart フィールドは省略可能です。 省略すると、現在の UTC 時刻が開始時刻として使用されます。

ユーザー委任 SAS の場合、SAS の開始時刻と有効期限は、ユーザー委任キーに対して定義されている間隔内に設定する必要があります。 ユーザー委任キーの有効期限が切れた後にクライアントが SAS を使用しようとすると、SAS 自体がまだ有効かどうかに関係なく、SAS は承認エラーで失敗します。

受け入れられる UTC 形式の詳細については、「 DateTime 値の書式設定」を参照してください。

アクセス許可を指定する

SAS トークンの (sp) フィールドに指定されたsignedPermissionsアクセス許可は、SAS を所有するクライアントがリソースに対して実行できる操作を示します。

アクセス許可を組み合わせて、クライアントが同じ SAS で複数の操作を実行できるようにすることができます。 SAS を構築するときは、次の順序でアクセス許可を含める必要があります。

racwdxltmeop

コンテナーの有効なアクセス許可設定の例にはrw、、、rdrlwdwl、 などがありますrl。 無効な設定の例には、wr、、drlr、 などがありますdw。 アクセス許可の指定を複数回指定することは許可されません。

ユーザー委任 SAS では、特定の操作へのアクセスを許可できません。

  • コンテナーを作成、削除、または一覧表示することはできません。
  • コンテナーのメタデータとプロパティを読み取ったり書き込んだりすることはできません。
  • コンテナーをリースすることはできません。

これらの操作へのアクセスを許可する SAS を構築するには、アカウント SAS を使用します。 詳細については、「アカウント SAS を作成する」を参照してください。

リソースの種類ごとにサポートされるアクセス許可を次の表に示します。

アクセス許可 URI の略記 リソース バージョンのサポート 許可される操作
Read r コンテナー
ディレクトリ
BLOB
All コンテナーまたはディレクトリ内のすべての BLOB のコンテンツ、ブロックリスト、プロパティ、メタデータを読み取ります。 コピー操作のソースとして BLOB を使用します。
追加 a コンテナー
ディレクトリ
BLOB
All 追加 BLOB にブロックを追加します。
作成 c コンテナー
ディレクトリ
BLOB
All 新しい BLOB を書き込むか、BLOB をスナップショットするか、BLOB を新しい BLOB にコピーします。
Write コンテナー
ディレクトリ
BLOB
All コンテンツ、プロパティ、メタデータ、またはブロックリストを作成または書き込みます。 BLOB のスナップショットの作成または BLOB のリース。 BLOB のサイズ変更 (ページ BLOB のみ)。 コピー操作のコピー先として BLOB を使用します。
削除 d コンテナー
ディレクトリ
BLOB
All BLOB を削除する バージョン 2017-07-29 以降の場合、削除アクセス許可では、BLOB のリースを中断することもできます。 詳細については、 BLOB のリース 操作に関するページを参照してください。
バージョンの削除 x コンテナー
BLOB
2019-12-12 以降 BLOB バージョンを削除します。
完全削除 y BLOB 2020-02-10 以降 BLOB スナップショットまたはバージョンを完全に削除します。
List l コンテナー
ディレクトリ
All BLOB を非再帰的に一覧表示する。
Tags t BLOB 2019-12-12 以降 BLOB のタグを読み取りまたは書き込みます。
詳細ビュー m コンテナー
ディレクトリ
BLOB
2020-02-10 以降 BLOB またはディレクトリとその内容を新しい場所に移動します。 パラメーターが SAS トークンに含まれ、スティッキー ビットが親ディレクトリに設定されている場合 saoid 、この操作は必要に応じて子 BLOB、ディレクトリ、または親ディレクトリの所有者に制限できます。
実行 e コンテナー
ディレクトリ
BLOB
2020-02-10 以降 システム プロパティを取得し、ストレージ アカウントに対して階層型名前空間が有効になっている場合は、BLOB の POSIX ACL を取得します。 階層型名前空間が有効で、呼び出し元が BLOB の所有者である場合、このアクセス許可は、BLOB の所有グループ、POSIX アクセス許可、および POSIX ACL を設定する機能を付与します。 呼び出し元がユーザー定義メタデータを読み取ることはできません。
所有権 o コンテナー
ディレクトリ
BLOB
2020-02-10 以降 階層型名前空間が有効になっている場合、このアクセス許可により、呼び出し元は所有者または所有グループを設定したり、呼び出し元が固定ビットが設定されているディレクトリ内のディレクトリまたは BLOB の名前を変更または削除するときに所有者として機能したりできます。
アクセス許可 p コンテナー
ディレクトリ
BLOB
2020-02-10 以降 階層型名前空間が有効になっている場合、このアクセス許可により、呼び出し元はディレクトリと BLOB にアクセス許可と POSIX ACL を設定できます。
不変ポリシーを設定する i コンテナー
BLOB
2020-06-12 以降 BLOB の不変性ポリシーまたは訴訟ホールドを設定または削除します。

IP アドレスまたは IP 範囲を指定する

オプション signedIp の (sip) フィールドは、要求を受け入れるパブリック IP アドレスまたはパブリック IP アドレスの範囲を指定します。 要求の発信元の IP アドレスが、SAS トークンで指定された IP アドレスまたはアドレス範囲と一致しない場合、要求は承認されません。 サポートされているのは、IPv4 アドレスのみです。

IP アドレスの範囲を指定すると、その範囲は包括的になります。 たとえば、SAS で または sip=168.1.5.60-168.1.5.70 を指定するとsip=168.1.5.65、要求はそれらの IP アドレスに制限されます。

次の表では、クライアント環境とストレージ アカウントの signedIp 場所に基づいて、特定のシナリオの SAS トークンに フィールドを含めるかどうかを示します。

クライアント環境 ストレージ アカウントの場所 推奨
Azure で実行されているクライアント クライアントと同じリージョン内 このシナリオでクライアントに提供される SAS には、フィールドの送信 IP アドレスを signedIp 含めてはいけません。 指定した送信 IP アドレスを持つ SAS を使用して同じリージョン内から行った要求は失敗します。

代わりに、Azure 仮想ネットワークを使用してネットワーク セキュリティ制限を管理します。 同じリージョン内からの Azure Storage への要求は、常にプライベート IP アドレスを介して行われます。 詳細については、Azure Storage ファイアウォールおよび仮想ネットワークの構成に関する記事を参照してください。
Azure で実行されているクライアント クライアントとは異なるリージョン内 このシナリオでクライアントに提供される SAS には、パブリック IP アドレスまたはフィールドのアドレス範囲が signedIp 含まれる場合があります。 SAS で行う要求は、指定された IP アドレスまたはアドレス範囲から送信される必要があります。
オンプレミスまたは別のクラウド環境で実行されているクライアント 任意の Azure リージョン このシナリオでクライアントに提供される SAS には、パブリック IP アドレスまたはフィールドのアドレス範囲が signedIp 含まれる場合があります。 SAS で行う要求は、指定された IP アドレスまたはアドレス範囲から送信される必要があります。

要求がプロキシまたはゲートウェイを通過する場合は、そのプロキシまたはゲートウェイのパブリック送信 IP アドレスを フィールドに signedIp 指定します。

HTTP プロトコルを指定する

省略可能な signedProtocol (spr) フィールドは、SAS で行われる要求に対して許可されるプロトコルを指定します。 使用可能な値は、HTTPS と HTTP の両方 (https,http) または HTTPS のみ (https) です。 既定値は https,http です。

Note

フィールドに HTTP spr を指定することはできません。

署名されたオブジェクト ID を指定する

ユーザー委任 SAS には signedObjectId 、(skoid) フィールドが必要です。 ユーザー委任キーの取得操作は、応答の一部としてこの値を返します。 署名されたオブジェクト ID は、Microsoft ID プラットフォームのセキュリティ プリンシパルの不変識別子を提供する GUID 値です。

署名されたテナント ID を指定する

ユーザー委任 SAS には signedTenantId 、(sktid) フィールドが必要です。 ユーザー委任キーの取得操作は、応答の一部としてこの値を返します。 署名されたテナント ID は、セキュリティ プリンシパルが定義されているMicrosoft Entra テナントを表す GUID 値です。

署名されたキーの開始時刻を指定する

省略可能な signedKeyStartTime (skt) フィールドは、ISO 日付形式でユーザー委任キーの有効期間の開始を示します。 ユーザー委任キーの取得操作は、応答の一部としてこの値を返します。 開始時刻を省略すると、署名されたキーの開始時刻は現在の時刻と見なされます。

署名されたキーの有効期限を指定する

signedKeyExpiryTime (ske) フィールドは、ISO 日付形式のユーザー委任 SAS に必要です。 ユーザー委任キーの取得操作は、応答の一部としてこの値を返します。 署名されたキーの有効期限は、ユーザー委任キーの有効期間の終了を示します。 有効期限の値は、SAS の開始時刻から最大 7 日間である場合があります。

署名されたキー サービスを指定する

ユーザー委任 SAS には signedKeyService 、(sks) フィールドが必要です。 ユーザー委任キーの取得操作は、応答の一部としてこの値を返します。 署名済みキー サービス フィールドは、ユーザー委任キーが有効なサービスを示します。 Blob Storage の署名済みキー サービス フィールドの値は です b

署名済みキーのバージョンを指定する

ユーザー委任 SAS には signedkeyversion 、(skv) フィールドが必要です。 ユーザー委任キーの取得操作は、応答の一部としてこの値を返します。 フィールドは signedkeyversion 、ユーザー委任キーの取得に使用されるストレージ サービスのバージョンを指定します。 このフィールドには、バージョン 2018-11-09 以降を指定する必要があります。

セキュリティ プリンシパルの署名付きオブジェクト ID を指定する

オプションsignedAuthorizedObjectIdの (saoid) フィールドと signedUnauthorizedObjectId (suoid) フィールドを使用すると、Azure Data Lake Storage Gen2 ワークロードに対して Apache Hadoop および Apache Ranger との統合が可能になります。 SAS トークンで次のいずれかのフィールドを使用して、セキュリティ プリンシパルのオブジェクト ID を指定します。

  • フィールドはsaoid、SAS トークンによって付与されたアクションを実行するためにユーザー委任キーの所有者によって承認される、Microsoft Entraセキュリティ プリンシパルのオブジェクト ID を指定します。 Azure Storage は SAS トークンを検証し、Azure Storage がアクセスを許可する前に、ユーザー委任キーの所有者が必要なアクセス許可を持っていることを確認します。 POSIX ACL に対する追加のアクセス許可チェックは実行されません。
  • このフィールドはsuoid、ストレージ アカウントに対して階層型名前空間が有効になっている場合に、Microsoft Entra セキュリティ プリンシパルのオブジェクト ID を指定します。 フィールドは suoid 、階層型名前空間を持つアカウントに対してのみ有効です。 フィールドが suoid SAS トークンに含まれている場合、Azure Storage は、操作を承認する前に、オブジェクト ID に対して POSIX ACL チェックを実行します。 この ACL チェックが成功しない場合、操作は失敗します。 フィールドが SAS トークンに含まれている場合は、ストレージ アカウントに対して suoid 階層型名前空間を有効にする必要があります。 それ以外の場合、権限チェックは承認エラーで失敗します。

ユーザー委任キーを要求するセキュリティ プリンシパルのオブジェクト ID が、必須 skoid フィールドにキャプチャされます。 または フィールドを使用saoidして SAS トークンのオブジェクト ID を指定するには、フィールドでskoid識別されるセキュリティ プリンシパルに、Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action または Microsoft.Storage/storageAccounts/blobServices/containers/blobs/manageOwnership/action を含む RBAC ロールを割り当てる必要があります。suoid これらのアクションの詳細については、「 Azure リソース プロバイダーの操作」を参照してください。

または suoid フィールドにsaoidオブジェクト ID を指定すると、ディレクトリまたは BLOB の所有権に関連する操作も次のように制限されます。

  • 操作によってディレクトリまたは BLOB が作成された場合、Azure Storage は、ディレクトリまたは BLOB の所有者をオブジェクト ID で指定された値に設定します。 オブジェクト ID が指定されていない場合、Azure Storage は、ディレクトリまたは BLOB の所有者を パラメーターで指定された値に skoid 設定します。
  • 親ディレクトリに固定ビットが設定されていて、操作によってディレクトリまたは BLOB が削除または名前変更された場合、親ディレクトリの所有者またはリソースの所有者のオブジェクト ID は、オブジェクト ID で指定された値と一致する必要があります。
  • 操作によってディレクトリまたは BLOB の所有者が設定され x-ms-owner 、ヘッダーが指定されている場合、オブジェクト ID で指定される値は、ヘッダーで x-ms-owner 指定された値と一致する必要があります。
  • 操作によってディレクトリまたは BLOB のグループが設定され x-ms-group 、ヘッダーが指定されている場合、オブジェクト ID で指定される値は、ヘッダーで x-ms-group 指定されたグループのメンバーである必要があります。
  • 操作でディレクトリまたは BLOB のアクセス許可または ACL を設定する場合は、次の 2 つの条件のいずれかを満たす必要もあります。
    • オブジェクト ID に指定する値は、ディレクトリまたは BLOB の所有者である必要があります。
    • () フィールドの値には、signedPermissions(sp) アクセス許可にOwnership加えて (op) アクセス許可をPermissions含める必要があります。

または suoid フィールドでsaoid指定されたオブジェクト ID は、SAS トークンを使用して要求を行うときに診断ログに含まれます。

saoidまたは suoid フィールドは、(sv) フィールドがバージョン 2020-02-10 以降に設定されている場合signedVersionにのみサポートされます。 SAS トークンに含めることができるフィールドは、次の 1 つだけです。

関連付け ID を指定する

(scid) フィールドはsignedCorrelationId、ストレージ監査ログと、SAS を生成および配布するプリンシパルによって使用される監査ログを関連付けるために使用できる関連付け ID を指定します。 たとえば、通常、信頼された承認サービスには、ユーザーの認証と承認、SAS の生成、ローカル監査ログへのエントリの追加、SAS のユーザーへの返しを行うマネージド ID があり、SAS を使用して Azure Storage リソースにアクセスできます。 ローカル監査ログとストレージ監査ログの両方に関連付け ID を含めることで、これらのイベントを後で関連付けることを許可します。 値は、中かっこのない GUID で、小文字を使用します。

このフィールドは、バージョン 2020-02-10 以降でサポートされています。

ディレクトリの深さを指定する

フィールドでsignedResourceディレクトリ (sr=d) が指定されている場合は、ルート ディレクトリの下にあるサブディレクトリの数を示す (sdd) フィールドも指定signedDirectoryDepthする必要があります。 フィールドの sdd 値は負以外の整数である必要があります。

たとえば、ルート ディレクトリ https://{account}.blob.core.windows.net/{container}/ の深さは 0 です。 ルート ディレクトリ内の各サブディレクトリは、深さに 1 ずつ加算されます。 ディレクトリ https://{account}.blob.core.windows.net/{container}/d1/d2 の深さは 2 です。

このフィールドは、バージョン 2020-02-10 以降でサポートされています。

応答ヘッダーをオーバーライドするクエリ パラメーターを指定する

要求で共有アクセス署名を使用した場合に返される特定の応答ヘッダーの値を定義するには、クエリ パラメーターに応答ヘッダーを指定できます。 応答ヘッダーと対応するクエリ パラメーターを次に示します。

応答ヘッダー名 対応する SAS クエリ パラメーター
Cache-Control rscc
Content-Disposition rscd
Content-Encoding rsce
Content-Language rscl
Content-Type rsct

たとえば、SAS トークンにクエリ パラメーターを rsct=binary 指定した場合、 Content-Type 応答ヘッダーは に binary設定されます。 この値は、この共有アクセス署名のみを使用する要求の BLOB に対して保存されている Content-Type ヘッダー値よりもオーバーライドされます。

応答ヘッダーをクエリ パラメーターとして指定する共有アクセス署名を作成する場合は、署名文字列の構築に使用される文字列対署名に、これらの応答ヘッダーを含める必要があります。 詳細については、「署名の指定」セクションを参照してください。

暗号化スコープを指定する

() フィールドはsigned encryption scopePut Blob 操作を使用して SAS トークンを使用して BLOB をアップロードするときにクライアント アプリケーションが使用する暗号化スコープを指定します。ses このフィールドは signed encryption scope 、SAS トークンの署名済みバージョン (sv) フィールドがバージョン 2020-12-06 以降の場合にサポートされます。 署名されたバージョン フィールドで、サポートされているバージョンより前のバージョンが指定されている場合、サービスはエラー応答コード 403 (禁止) を返します。

コンテナーまたはファイルシステムに既定の暗号化スコープが設定されている場合、フィールドは ses コンテナー暗号化ポリシーを考慮します。 クエリ パラメーターとx-ms-default-encryption-scopeヘッダーの間にses不一致があり、ヘッダーが にtrue設定されている場合、x-ms-deny-encryption-scope-overrideサービスはエラー応答コード 403 (Forbidden) を返します。

x-ms-encryption-scopeヘッダーとクエリ パラメーターのses両方が PUT 要求で指定されていて、不一致がある場合、サービスはエラー応答コード 400 (Bad Request) を返します。

署名を指定する

signature (sig) フィールドは、共有アクセス署名を使用してクライアントによって行われた要求を承認するために使用されます。 string-to-sign は、要求を承認するために検証する必要があるフィールドから構築された一意の文字列です。 署名は、SHA256 アルゴリズムを使用して文字列から署名とキーに対して計算され、Base64 エンコードを使用してエンコードされる HMAC です。

ユーザー委任 SAS の署名文字列を作成するには、要求を構成するフィールドから文字列対署名を作成し、文字列を UTF-8 としてエンコードしてから、HMAC-SHA256 アルゴリズムを使用して署名を計算します。 文字列から署名に含まれるフィールドは、URL デコードされている必要があります。

文字列から署名に必要なフィールドは、承認に使用されるサービス バージョン (sv フィールド) によって異なります。 次のセクションでは、ユーザー委任 SAS をサポートするバージョンの文字列から署名への構成について説明します。

バージョン 2020-12-06 以降

承認バージョン 2020-12-06 以降の文字列から署名までの形式は次のとおりです。

StringToSign =  signedPermissions + "\n" +
                signedStart + "\n" +
                signedExpiry + "\n" +
                canonicalizedResource + "\n" +
                signedKeyObjectId + "\n" +
                signedKeyTenantId + "\n" +
                signedKeyStart + "\n" +
                signedKeyExpiry  + "\n" +
                signedKeyService + "\n" +
                signedKeyVersion + "\n" +
                signedAuthorizedUserObjectId + "\n" +
                signedUnauthorizedUserObjectId + "\n" +
                signedCorrelationId + "\n" +
                signedIP + "\n" +
                signedProtocol + "\n" +
                signedVersion + "\n" +
                signedResource + "\n" +
                signedSnapshotTime + "\n" +
                signedEncryptionScope + "\n" +
                rscc + "\n" +
                rscd + "\n" +
                rsce + "\n" +
                rscl + "\n" +
                rsct

バージョン 2020-02-10

承認バージョン 2020-02-10 の文字列から署名の形式は次のとおりです。

StringToSign =  signedPermissions + "\n" +
                signedStart + "\n" +
                signedExpiry + "\n" +
                canonicalizedResource + "\n" +
                signedKeyObjectId + "\n" +
                signedKeyTenantId + "\n" +
                signedKeyStart + "\n" +
                signedKeyExpiry  + "\n" +
                signedKeyService + "\n" +
                signedKeyVersion + "\n" +
                signedAuthorizedUserObjectId + "\n" +
                signedUnauthorizedUserObjectId + "\n" +
                signedCorrelationId + "\n" +
                signedIP + "\n" +
                signedProtocol + "\n" +
                signedVersion + "\n" +
                signedResource + "\n" +
                signedSnapshotTime + "\n" +
                rscc + "\n" +
                rscd + "\n" +
                rsce + "\n" +
                rscl + "\n" +
                rsct

2020-02-10 より前のバージョン

2020-02-10 より前の承認バージョンの文字列から署名の形式は次のとおりです。

StringToSign =  signedPermissions + "\n" +  
                signedStart + "\n" +  
                signedExpiry + "\n" +  
                canonicalizedResource + "\n" +  
                signedKeyObjectId + "\n" +
                signedKeyTenantId + "\n" +
                signedKeyStart + "\n" +
                signedKeyExpiry  + "\n" +
                signedKeyService + "\n" +
                signedKeyVersion + "\n" +
                signedAuthorizedUserObjectId + "\n" +
                signedUnauthorizedUserObjectId + "\n" +
                signedCorrelationId + "\n" +
                signedIP + "\n" +  
                signedProtocol + "\n" +  
                signedVersion + "\n" +  
                signedResource + "\n" +
                rscc + "\n" +
                rscd + "\n" +  
                rsce + "\n" +  
                rscl + "\n" +  
                rsct

正規化されたリソース

文字列の canonicalizedResource の部分は、署名対象リソースへの正規化されたパスです。 BLOB ストレージ エンドポイントとリソース名を含める必要があり、URL デコードする必要があります。 BLOB パスには、そのコンテナーを含める必要があります。 ディレクトリ パスには、 パラメーターに対応するサブディレクトリの数を sdd 含める必要があります。

コンテナーの正規化されたリソース文字列は、そのコンテナーへのアクセスを提供する SAS の末尾のスラッシュ (/) を省略する必要があります。

次の例は、リソースの種類に応じて、文字列の部分を構築 canonicalizedResource する方法を示しています。

コンテナーの例 (Azure Blob Storage)
URL = https://myaccount.blob.core.windows.net/music  
canonicalizedResource = "/blob/myaccount/music"  
BLOB の例 (Azure Blob Storage)
URL = https://myaccount.blob.core.windows.net/music/intro.mp3  
canonicalizedResource = "/blob/myaccount/music/intro.mp3"  
コンテナーの例 (Azure Data Lake Storage Gen2)
URL = https://myaccount.dfs.core.windows.net/music  
canonicalizedResource = "/blob/myaccount/music"  
ディレクトリの例 (Azure Data Lake Storage Gen2)
URL = https://myaccount.dfs.core.windows.net/music/instruments/guitar/  
canonicalizedResource = "/blob/myaccount/music/instruments/guitar/"  
BLOB の例 (Azure Data Lake Storage Gen2)
URL = https://myaccount.dfs.core.windows.net/music/intro.mp3  
canonicalizedResource = "/blob/myaccount/music/intro.mp3"  

省略可能なフィールド

フィールドが省略可能で、SAS トークンの一部として指定されていない場合は、フィールドに空の文字列を指定します。 空の文字列の後には必ず改行文字 (\n) を付けます。

ユーザー委任 SAS の例

次の例は、ユーザー委任 SAS トークンが追加された BLOB URI を示しています。 ユーザー委任 SAS トークンは、BLOB に対する読み取りおよび書き込みアクセス許可を提供します。

https://myaccount.blob.core.windows.net/sascontainer/blob1.txt?sp=rw&st=2023-05-24T01:13:55Z&se=2023-05-24T09:13:55Z&skoid=<object-id>&sktid=<tenant-id>&skt=2023-05-24T01:13:55Z&ske=2023-05-24T09:13:55Z&sks=b&skv=2022-11-02&sip=168.1.5.60-168.1.5.70&spr=https&sv=2022-11-02&sr=b&sig=<signature>

URI の各部分を次の表に示します。

名前 SAS の部分 説明
リソース URI https://myaccount.blob.core.windows.net/sascontainer/blob1.txt BLOB のアドレス。 HTTPS を使用することを強くお勧めします。
区切り記号 ? クエリ文字列の前にある区切り記号。 区切り記号は SAS トークンの一部ではありません。
アクセス許可 sp=rw SAS で付与されるアクセス許可には、読み取り (r) および書き込み (w) が含まれます。
開始時刻 st=2023-05-24T01:13:55Z UTC 時間で指定。 SAS をすぐに有効にする場合は、開始時刻を省略します。
期限切れ日時 se=2023-05-24T09:13:55Z UTC 時間で指定。
Object ID skoid=<object-id> Microsoft Entra セキュリティ プリンシパル。
テナント ID sktid=<tenant-id> セキュリティ プリンシパルが登録されているMicrosoft Entra テナント。
キーの開始時刻 skt=2023-05-24T01:13:55Z ユーザー委任キーの有効期間の開始。
キーの有効期限 ske=2023-05-24T09:13:55Z ユーザー委任キーの有効期間の終了。
キー サービス sks=b サービス値に対してサポートされているのは BLOB サービスのみです。
キーのバージョン skv=2022-11-02 ユーザー委任キーの取得に使用されたストレージ サービスのバージョン。
IP 範囲 sip=168.1.5.60-168.1.5.70 要求が受け入れられる IP アドレスの範囲です。
Protocol spr=https HTTPS を使用する要求のみが許可されます。
BLOB サービスのバージョン sv=2022-11-02 Azure Storage バージョン 2012-02-12 以降では、このパラメーターは使用するバージョンを示します。
リソース sr=b リソースは BLOB です。
署名 sig=<signature> BLOB へのアクセスを承認するために使用します。 署名は、SHA256 アルゴリズムを使用して文字列対署名とキーを使用して計算され、Base64 エンコードを使用してエンコードされる HMAC です。

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

SAS が侵害されたと思われる場合は、その SAS を取り消す必要があります。 ユーザー委任 SAS を取り消すには、ユーザー委任キーを取り消すか、SAS の作成に使用されるセキュリティ プリンシパルの RBAC ロールの割り当てを変更または削除します。

重要

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

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

ユーザー委任キーの取り消し操作を呼び出すことで 、ユーザー委任キーを取り消 すことができます。 ユーザー委任キーを取り消すと、そのキーに依存する共有アクセス署名は無効になります。 その後、ユーザー 委任キーの取得 操作をもう一度呼び出し、キーを使用して新しい共有アクセス署名を作成できます。 これは、ユーザー委任 SAS を取り消す最も簡単な方法です。

ロールの割り当てを変更または削除する

SAS の作成に使用されるセキュリティ プリンシパルの RBAC ロールの割り当てを変更または削除できます。 クライアントが SAS を使用してリソースにアクセスすると、Azure Storage は、SAS のセキュリティ保護に使用された資格情報を持つセキュリティ プリンシパルが、リソースに必要なアクセス許可を持っていることを確認します。

関連項目