ユーザー委任 SAS を作成する
大事な
最適なセキュリティを確保するために、Microsoft では、可能な限り、マネージド ID で Microsoft Entra ID を使用して、BLOB、キュー、テーブル データに対する要求を承認することをお勧めします。 Microsoft Entra ID とマネージド ID を使用した承認は、共有キーの承認よりも優れたセキュリティと使いやすさを提供します。 詳細については、Microsoft Entra IDを使用した承認
オンプレミス アプリケーションなど、Azure の外部でホストされているリソースの場合は、Azure Arc を介してマネージド ID を使用できます。たとえば、Azure Arc 対応サーバーで実行されているアプリでは、マネージド ID を使用して Azure サービスに接続できます。 詳細については、「Azure Arc 対応サーバーを使用した Azure リソースに対する認証」を参照してください。
Microsoft Entra 資格情報またはアカウント キーを使用して、コンテナー、ディレクトリ、または BLOB にアクセスするための Shared Access Signature (SAS) トークンをセキュリティで保護できます。 Microsoft Entra 資格情報で保護された SAS は、SAS
すべての SAS はキーで署名されます。 ユーザー委任 SAS を作成するには、まず ユーザー委任キーを要求する必要があります。このキーを使用して SAS に署名します。 ユーザー委任キーは、サービス SAS またはアカウント SAS の署名に使用されるアカウント キーに似ていますが、Microsoft Entra 資格情報に依存している点が異なります。 ユーザー委任キーを要求するには、Get User Delegation Key 操作を呼び出します。 その後、ユーザー委任キーを使用して SAS を作成できます。
Azure Blob Storage と Azure Data Lake Storage では、ユーザー委任 SAS がサポートされています。 保存されたアクセス ポリシーは、ユーザー委任 SAS ではサポートされていません。
注意
Shared Access Signature はストレージ リソースへのアクセス許可を付与するキーであり、アカウント キーを保護する場合と同様に保護する必要があります。 悪意のある、または意図しない使用から SAS を保護することが重要です。 SAS の配布には裁量を使用し、侵害された SAS を取り消す計画を立てます。 Shared Access Signature を使用する操作は HTTPS 接続経由でのみ実行し、Shared Access Signature URI は HTTPS などのセキュリティで保護された接続でのみ配布する必要があります。
アカウント キーを使用して SAS をセキュリティで保護する方法については、「
ディレクトリ スコープ アクセスに対するユーザー委任 SAS のサポート
ユーザー委任 SAS は、承認バージョン (sr=d
) が 2020-02-10 以降で階層型名前空間 (HNS) が有効になっている場合に、ディレクトリ スコープ (sv
) をサポートします。 ディレクトリ スコープ (sr=d
) のセマンティクスは、コンテナー スコープ (sr=c
) に似ていますが、アクセスはディレクトリとその中のファイルとサブディレクトリに制限される点が異なります。
sr=d
を指定する場合は、sdd
クエリ パラメーターも必要です。
承認バージョン 2020-02-10 の文字列から署名の形式は変更されません。
ユーザー OID に対するユーザー委任 SAS のサポート
ユーザー委任 SAS では、認証バージョン (saoid
) が 2020-02-10 以降である場合に、suoid
または sv
パラメーターで実行される省略可能なユーザー オブジェクト識別子 (OID) がサポートされます。
saoid
パラメーターと suoid
パラメーターは、SAS を使用しているエンド ユーザーのセキュリティ プリンシパルに対応し、Hadoop や Spark などのマルチユーザー クラスター ワークロードに対して強化された承認モデルを提供します。
SAS トークンは、特定のファイルシステム操作とユーザーに制限できます。これは、マルチユーザー クラスター全体に分散する方が安全な脆弱なアクセス トークンを提供します。 これらの機能のユース ケースの 1 つは、Hadoop ABFS ドライバーと Apache Ranger の統合です。
省略可能な saoid
パラメーターと suoid
パラメーターの詳細については、「署名済みユーザー オブジェクト IDを指定する」を参照してください。
ユーザー委任 SAS を承認する
クライアントがユーザー委任 SAS を使用して Blob Storage リソースにアクセスすると、Azure Storage への要求は、SAS の作成に使用された Microsoft Entra 資格情報で承認されます。 リソースへのクライアントのアクセスは、次のアクセス許可によって決まります。
- ユーザー委任キーを要求した Microsoft Entra セキュリティ プリンシパルに付与されるロールベースのアクセス制御 (RBAC) アクセス許可。
- ユーザー委任キーを要求したセキュリティ プリンシパルに付与される POSIX アクセス制御リスト (ACL) アクセス許可。 この追加チェックは、RBAC アクセス許可がアクセス権を付与できない場合、およびストレージ アカウントで階層型名前空間が有効になっている場合にのみ発生します。
- SAS トークンに対して明示的に付与されるアクセス許可。
この方法により、セキュリティ レベルが強化され、アプリケーション コードにアカウント アクセス キーを格納する必要がなくなります。 このような理由から、Microsoft Entra 資格情報を使用して SAS を作成することは、セキュリティのベスト プラクティスです。
SAS を所有するクライアントに付与されるアクセス許可は、ユーザー委任キーを要求したセキュリティ プリンシパルに付与されたアクセス許可と、signedPermissions
(sp
) フィールドを使用して SAS トークンのリソースに付与されたアクセス許可の積集合です。 RBAC または POSIX ACL を介してセキュリティ プリンシパルに付与されたアクセス許可が SAS トークンにも付与されていない場合、そのアクセス許可は、SAS を使用してリソースにアクセスしようとするクライアントには付与されません。 ユーザー委任 SAS を作成するときは、RBAC と POSIX ACL を介して付与されたアクセス許可と SAS トークンを介して付与されたアクセス許可の両方が、クライアントに必要なアクセス レベルと一致していることを確認します。
ユーザー委任 SAS を作成するには、次の操作を行います。
- RBAC または POSIX ACL を使用して、ユーザー委任キーを要求するセキュリティ プリンシパルに必要なアクセス許可を付与します。
- Microsoft Entra ID から OAuth 2.0 トークンを取得します。
- トークンを使用して、ユーザー委任キーの取得 操作
呼び出して、ユーザー委任キーを要求します。 - ユーザー委任キーを使用して、適切なフィールドで SAS トークンを構築します。
RBAC を使用してアクセス許可を割り当てる
ユーザー委任キーを要求するセキュリティ プリンシパルには、これを行う適切なアクセス許可が必要です。 Microsoft Entra ID セキュリティ プリンシパルには、ユーザー、グループ、サービス プリンシパル、またはマネージド ID を指定できます。
ユーザー委任キーを要求するには、Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey アクション
- 共同作成者
- ストレージ アカウント共同作成者 を
する - Storage BLOB データ共同作成者
- ストレージ BLOB データ所有者 の
- Storage BLOB データ 閲覧者の
- Storage Blob Delegator
セキュリティ プリンシパルに、データ アクセスを許可するロールが割り当てられているが、コンテナーのレベルにスコープが設定されている場合は、ストレージ アカウント、リソース グループ、またはサブスクリプションのレベルで、Storage Blob Delegator ロールをセキュリティ プリンシパルに追加で割り当てることができます。 Storage Blob Delegator ロールは、ユーザー委任キーを要求するアクセス許可をセキュリティ プリンシパルに付与します。
Azure Storage の RBAC ロールの詳細については、「Microsoft Entraを使用した承認
OAuth 2.0 トークンを取得する
ユーザー委任キーを取得するには、まず Microsoft Entra ID から OAuth 2.0 トークンを要求します。 Get User Delegation Key 操作への呼び出しを承認するベアラー スキームをトークンに指定します。 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 |
必須 | すべての | Shared Access Signature を使用してアクセスできる BLOB リソースを指定します。 |
signedStart |
st |
随意 | すべての | 随意。 Shared Access Signature が有効になる時刻。受け入れ可能な ISO 8601 UTC 形式のいずれかで表されます。 この値を省略すると、現在の UTC 時刻が開始時刻として使用されます。 受け入れ可能な UTC 形式の詳細については、「DateTime 値形式 |
signedExpiry |
se |
必須 | すべての | 共有アクセス署名が無効になった時刻 。受け入れ可能な ISO 8601 UTC 形式のいずれかで表されます。 受け入れ可能な UTC 形式の詳細については、「DateTime 値形式 |
signedPermissions |
sp |
必須 | すべての | SAS を所有するクライアントがリソースに対して実行できる操作を示します。 アクセス許可を組み合わせることができます。 |
signedIp |
sip |
随意 | 2015-04-05 以降 | 要求を受け入れる IP アドレスまたは包括的な IP アドレス範囲を指定します。 範囲を指定する場合は、その範囲が包括的であることに注意してください。 IPv4 アドレスのみがサポートされています。 たとえば、 sip=198.51.100.0 や sip=198.51.100.10-198.51.100.20 などです。 |
signedProtocol |
spr |
随意 | 2015-04-05 以降 | SAS で行われた要求に対して許可されるプロトコルを指定します。 SAS トークンで行われた要求で HTTPS を使用することを要求するには、このフィールドを含めます。 |
signedObjectId |
skoid |
必須 | 2018-11-09 以降 | Microsoft Entra セキュリティ プリンシパルのオブジェクト ID を指定します。 このオブジェクト ID は、ユーザー委任キーを要求したセキュリティ プリンシパルに対応します。 操作を承認する前に、Azure Storage は RBAC のアクセス許可をオブジェクト ID に対してチェックします。 RBAC アクセス許可でアクセスを許可できない場合、Azure Storage はオブジェクト ID に対して POSIX ACL アクセス許可をチェックします。 |
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 を指定します。 このオブジェクト ID は、SAS のエンド ユーザーのセキュリティ プリンシパルに対応します。 POSIX アクセス制御リスト (ACL) に対する追加のアクセス許可チェックは実行されません。 |
signedUnauthorizedObjectId |
suoid |
随意 | 2020-02-10 以降 | 階層型名前空間が有効な場合の Microsoft Entra セキュリティ プリンシパルのオブジェクト ID を指定します。 このオブジェクト ID は、SAS のエンド ユーザーのセキュリティ プリンシパルに対応します。 Azure Storage は、操作を承認する前に、オブジェクト ID に対して POSIX ACL チェックを実行します。 |
signedCorrelationId |
scid |
随意 | 2020-02-10 以降 | ストレージ監査ログを、SAS を生成して配布するプリンシパルによって使用される監査ログと関連付けます。 |
signedDirectoryDepth |
sdd |
sr=d 時に必須 |
2020-02-10 以降 | 文字列対符号の canonicalizedResource フィールドに指定されたディレクトリのルート フォルダー内のディレクトリの数を示します。 |
signedEncryptionScope |
ses |
随意 | 2020-12-06 以降 | 要求の内容の暗号化に使用する暗号化スコープを示します。 |
signature |
sig |
必須 | すべての | 署名はハッシュベースのメッセージ認証コード (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
) フィールドは、Shared Access Signature のサービス バージョンを指定します。 この値は、signature
フィールドの構築に使用されるサービスのバージョンを示し、この Shared Access Signature で行われた要求を処理するサービスのバージョンを指定します。
sv
フィールドの値は、バージョン 2018-11-09 以降である必要があります。
署名されたリソース フィールドを指定する
必要な signedResource
(sr
) フィールドは、Shared Access Signature を使用してアクセスできるリソースを指定します。 次の表では、SAS トークン内の BLOB、コンテナー、またはディレクトリ リソースを参照する方法について説明します。
資源 | パラメーター値 | サポートされているバージョン | 形容 |
---|---|---|---|
ブロッブ | b | すべての | BLOB のコンテンツとメタデータへのアクセスを許可します。 |
BLOB のバージョン | bv | 2018-11-09 以降 | BLOB バージョンのコンテンツとメタデータへのアクセスを許可しますが、ベース BLOB にはアクセスできません。 |
BLOB スナップショット | 理学士 | 2018-11-09 以降 | BLOB スナップショットのコンテンツとメタデータへのアクセスを許可しますが、ベース BLOB にはアクセスできません。 |
コンテナ | c | すべての | コンテナー内の任意の BLOB のコンテンツとメタデータ、およびコンテナー内の BLOB の一覧へのアクセスを許可します。 |
ディレクトリ | d | 2020-02-10 以降 | 階層型名前空間が有効になっているストレージ アカウント内の、ディレクトリ内の任意の BLOB のコンテンツとメタデータ、およびディレクトリ内の BLOB の一覧へのアクセスを許可します。
signedResource フィールドにディレクトリを指定する場合は、signedDirectoryDepth (sdd ) パラメーターも必要です。 ディレクトリは常にコンテナー内にあります。 |
署名の有効期間を指定する
signedStart
(st
) フィールドと signedExpiry
(se
) フィールドは、SAS の開始時刻と有効期限を示します。
signedExpiry
フィールドが必要です。
signedStart
フィールドは省略可能です。 省略すると、現在の UTC 時刻が開始時刻として使用されます。
ユーザー委任 SAS の場合、SAS の開始時刻と有効期限は、ユーザー委任キーに対して定義されている間隔内にある必要があります。 ユーザー委任キーの有効期限が切れた後にクライアントが SAS を使用しようとすると、SAS 自体がまだ有効であるかどうかに関係なく、SAS は承認エラーで失敗します。
受け入れ可能な UTC 形式の詳細については、「DateTime 値形式
アクセス許可を指定する
SAS トークンの signedPermissions
(sp
) フィールドに指定されたアクセス許可は、SAS を所有するクライアントがリソースに対して実行できる操作を示します。
アクセス許可を組み合わせて、クライアントが同じ SAS で複数の操作を実行できるようにします。 SAS を構築するときは、次の順序でアクセス許可を含める必要があります。
racwdxltmeop
コンテナーの有効なアクセス許可設定の例としては、rw
、rd
、rl
、wd
、wl
、rl
などがあります。 無効な設定の例としては、wr
、dr
、lr
、dw
などがあります。 アクセス許可の指定を複数回指定することはできません。
ユーザー委任 SAS では、特定の操作へのアクセスを許可できません。
- コンテナーを作成、削除、または一覧表示することはできません。
- コンテナーのメタデータとプロパティを読み取ったり書き込んだりすることはできません。
- コンテナーをリースすることはできません。
これらの操作へのアクセスを許可する SAS を構築するには、アカウント SAS を使用します。 詳細については、「アカウント SASの作成」を参照してください。
リソースの種類ごとにサポートされるアクセス許可を次の表に示します。
許可 | URI シンボル | 資源 | バージョンのサポート | 許可される操作 |
---|---|---|---|---|
読む | r | コンテナ ディレクトリ ブロッブ |
すべての | コンテナーまたはディレクトリ内の BLOB のコンテンツ、ブロックリスト、プロパティ、メタデータを読み取ります。 コピー操作のソースとして BLOB を使用します。 |
足す | ある | コンテナ ディレクトリ ブロッブ |
すべての | 追加 BLOB にブロックを追加します。 |
創造する | c | コンテナ ディレクトリ ブロッブ |
すべての | 新しい BLOB を書き込むか、BLOB のスナップショットを作成するか、BLOB を新しい BLOB にコピーします。 |
書く | w | コンテナ ディレクトリ ブロッブ |
すべての | コンテンツ、プロパティ、メタデータ、またはブロックリストを作成または書き込みます。 BLOB をスナップショットまたはリースします。 BLOB のサイズを変更します (ページ BLOB のみ)。 コピー操作のコピー先として BLOB を使用します。 |
削除 | d | コンテナ ディレクトリ ブロッブ |
すべての | BLOB を削除します。 バージョン 2017-07-29 以降では、削除アクセス許可を使用して BLOB のリースを解除することもできます。 詳細については、「リース BLOB 操作」を参照してください。 |
バージョンの削除 | x | コンテナ ブロッブ |
2019-12-12 以降 | BLOB バージョンを削除します。 |
完全削除 | y | ブロッブ | 2020-02-10 以降 | BLOB スナップショットまたはバージョンを完全に削除します。 |
リスト | l | コンテナ ディレクトリ |
すべての | BLOB を再帰的に一覧表示しない。 |
タグ | t | ブロッブ | 2019-12-12 以降 | BLOB のタグの読み取りまたは書き込み。 |
動く | m | コンテナ ディレクトリ ブロッブ |
2020-02-10 以降 | BLOB またはディレクトリとその内容を新しい場所に移動します。
saoid パラメーターが SAS トークンに含まれ、スティッキー ビットが親ディレクトリに設定されている場合、この操作は必要に応じて子 BLOB、ディレクトリ、または親ディレクトリの所有者に制限できます。 |
実行する | e | コンテナ ディレクトリ ブロッブ |
2020-02-10 以降 | システム プロパティを取得し、ストレージ アカウントに対して階層型名前空間が有効になっている場合は、BLOB の POSIX ACL を取得します。 階層型名前空間が有効で、呼び出し元が BLOB の所有者である場合、このアクセス許可は、BLOB の所有グループ、POSIX アクセス許可、POSIX ACL を設定する権限を付与します。 呼び出し元がユーザー定義メタデータを読み取ることはできません。 |
所有権 | o | コンテナ ディレクトリ ブロッブ |
2020-02-10 以降 | 階層型名前空間が有効になっている場合、このアクセス許可により、呼び出し元は所有者または所有グループを設定できます。また、スティッキー ビットが設定されているディレクトリ内のディレクトリまたは BLOB の名前を変更または削除するときに、呼び出し元が所有者として機能できるようになります。 |
権限 | p | コンテナ ディレクトリ ブロッブ |
2020-02-10 以降 | 階層型名前空間が有効になっている場合、このアクセス許可により、呼び出し元はディレクトリと BLOB にアクセス許可と POSIX ACL を設定できます。 |
不変ポリシーを設定する | 私 | コンテナ ブロッブ |
2020-06-12 以降 | BLOB の不変ポリシーまたは訴訟ホールドを設定または削除します。 |
IP アドレスまたは IP 範囲を指定する
省略可能な signedIp
(sip
) フィールドは、要求を受け入れるパブリック IP アドレスまたはパブリック IP アドレスの範囲を指定します。 要求の発信元の IP アドレスが、SAS トークンで指定された IP アドレスまたはアドレス範囲と一致しない場合、要求は承認されません。 IPv4 アドレスのみがサポートされています。
IP アドレスの範囲を指定すると、その範囲は含まれます。 たとえば、SAS で sip=198.51.100.0
または sip=198.51.100.10-198.51.100.20
を指定すると、要求はそれらの IP アドレスに制限されます。
次の表では、クライアント環境とストレージ アカウントの場所に基づいて、特定のシナリオの SAS トークンに signedIp
フィールドを含めるかどうかを示します。
クライアント環境 | ストレージ アカウントの場所 | 勧告 |
---|---|---|
Azure で実行されているクライアント | クライアントと同じリージョン内 | このシナリオでクライアントに提供される SAS には、signedIp フィールドの送信 IP アドレスを含めることはできません。 指定した送信 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
です。
手記
spr
フィールドに HTTP を指定することはできません。
署名されたオブジェクト ID を指定する
ユーザー委任 SAS には、signedObjectId
(skoid
) フィールドが必要です。
ユーザー委任キーの取得 操作は、応答の一部としてこの値を返します。 署名されたオブジェクト ID は、Microsoft ID プラットフォームのセキュリティ プリンシパルの不変識別子を提供する GUID 値です。
署名されたテナント ID を指定する
ユーザー委任 SAS には、signedTenantId
(sktid
) フィールドが必要です。
ユーザー委任キーの取得 操作は、応答の一部としてこの値を返します。 署名済みテナント ID は、セキュリティ プリンシパルが定義されている Microsoft Entra テナントを表す GUID 値です。
署名されたキーの開始時刻を指定する
必須の signedKeyStartTime
(skt
) フィールドは、ISO 日付形式でユーザー委任キーの有効期間の開始を示します。
ユーザー委任キーの取得 操作は、応答の一部としてこの値を返します。
署名されたキーの有効期限を指定する
ISO 日付形式のユーザー委任 SAS には、signedKeyExpiryTime
(ske
) フィールドが必要です。
ユーザー委任キーの取得 操作は、応答の一部としてこの値を返します。 署名されたキーの有効期限は、ユーザー委任キーの有効期間の終了を示します。 有効期限の値は、SAS の開始時刻から最大 7 日間である場合があります。
署名されたキー サービスを指定する
ユーザー委任 SAS には、signedKeyService
(sks
) フィールドが必要です。
ユーザー委任キーの取得 操作は、応答の一部としてこの値を返します。 署名済みキー サービス フィールドは、ユーザー委任キーが有効なサービスを示します。 Blob Storage の署名済みキー サービス フィールドの値が b
。
署名済みキーのバージョンを指定する
ユーザー委任 SAS には、signedkeyversion
(skv
) フィールドが必要です。
ユーザー委任キーの取得 操作は、応答の一部としてこの値を返します。
signedkeyversion
フィールドは、ユーザー委任キーの取得に使用されるストレージ サービスのバージョンを指定します。 このフィールドには、バージョン 2018-11-09 以降を指定する必要があります。
セキュリティ プリンシパルの署名付きユーザー オブジェクト ID を指定する
オプションの signedAuthorizedObjectId
(saoid
) フィールドと signedUnauthorizedObjectId
(suoid
) フィールドを使用すると、Azure Data Lake Storage ワークロード用の 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 チェックが成功しない場合、操作は失敗します。suoid
フィールドが SAS トークンに含まれている場合は、ストレージ アカウントに対して階層型名前空間を有効にする必要があります。 それ以外の場合、アクセス許可チェックは承認エラーで失敗します。
ユーザー委任キーを要求するセキュリティ プリンシパルのオブジェクト ID は、必要な skoid
フィールドにキャプチャされます。
saoid
または suoid
フィールドにオブジェクト 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
(o
) 権限に加えて、Permissions
(p
) 権限が含まれている必要があります。
SAS トークンを使用して要求を行うと、saoid
または suoid
フィールドに指定されたオブジェクト ID が診断ログに含まれます。
saoid
または suoid
フィールドは、signedVersion
(sv
) フィールドがバージョン 2020-02-10 以降に設定されている場合にのみサポートされます。 SAS トークンに含めることができるフィールドは、次のうち 1 つだけです。
関連付け ID を指定する
signedCorrelationId
(scid
) フィールドは、ストレージ監査ログと、SAS を生成して配布するプリンシパルによって使用される監査ログを関連付けるために使用できる関連付け ID を指定します。 たとえば、信頼された承認サービスには、通常、ユーザーの認証と承認、SAS の生成、ローカル監査ログへのエントリの追加、ユーザーへの SAS の返しを行うマネージド ID があり、SAS を使用して Azure Storage リソースにアクセスできます。 ローカル監査ログとストレージ監査ログの両方に関連付け ID を含めることで、これらのイベントを後で関連付けできるようになります。 値は、中かっこのない GUID で、小文字を使用します。
このフィールドは、バージョン 2020-02-10 以降でサポートされています。
ディレクトリの深さを指定する
signedResource
フィールドでディレクトリ (sr=d
) を指定する場合は、ルート ディレクトリの下にあるサブディレクトリの数を示す signedDirectoryDepth
(sdd
) フィールドも指定する必要があります。
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
に設定されます。 この値は、この Shared Access Signature のみを使用して、要求の BLOB に格納されている Content-Type
ヘッダー値をオーバーライドします。
応答ヘッダーをクエリ パラメーターとして指定する Shared Access Signature を作成する場合は、署名文字列の構築に使用される文字列対署名に応答ヘッダーを含める必要があります。 詳細については、「署名を指定する」セクションを参照してください。
暗号化スコープを指定する
signed encryption scope
(ses
) フィールドは、Put Blob 操作を使用して SAS トークンを使用して BLOB をアップロードするときにクライアント アプリケーションが使用する暗号化スコープを指定します。
signed encryption scope
フィールドは、SAS トークンの署名済みバージョン (sv
) フィールドがバージョン 2020-12-06 以降の場合にサポートされます。 署名済みバージョン フィールドで、サポートされているバージョンより前のバージョンが指定されている場合、サービスはエラー応答コード 403 (禁止) を返します。
コンテナーまたはファイルシステムに既定の暗号化スコープが設定されている場合、ses
フィールドはコンテナー暗号化ポリシーを考慮します。
ses
クエリ パラメーターと x-ms-default-encryption-scope
ヘッダーの間に不一致があり、x-ms-deny-encryption-scope-override
ヘッダーが true
に設定されている場合、サービスはエラー応答コード 403 (Forbidden) を返します。
x-ms-encryption-scope
ヘッダーと ses
クエリ パラメーターの両方が PUT 要求で指定されていて、不一致がある場合、サービスはエラー応答コード 400 (Bad Request) を返します。
署名を指定する
signature
(sig
) フィールドは、クライアントが共有アクセス署名を使用して行った要求を承認するために使用されます。 文字列対署名は、要求を承認するために検証する必要があるフィールドから構築された一意の文字列です。 署名は、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)
URL = https://myaccount.dfs.core.windows.net/music
canonicalizedResource = "/blob/myaccount/music"
ディレクトリの例 (Azure Data Lake Storage)
URL = https://myaccount.dfs.core.windows.net/music/instruments/guitar/
canonicalizedResource = "/blob/myaccount/music/instruments/guitar/"
BLOB の例 (Azure Data Lake Storage)
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=198.51.100.10-198.51.100.20&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 時刻で指定します。 |
オブジェクト 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=198.51.100.10-198.51.100.20 |
要求の受け入れ元となる IP アドレスの範囲。 |
議定書 | 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 の作成に使用されるセキュリティ プリンシパルの RBAC ロールの割り当てと POSIX ACL を変更または削除します。
大事な
ユーザー委任キーと RBAC ロールの割り当てはどちらも Azure Storage によってキャッシュされるため、失効プロセスを開始してから既存のユーザー委任 SAS が無効になるまでに遅延が発生する可能性があります。
ユーザー委任キーを取り消す
ユーザー委任キーの取り消し 操作を呼び出すことで、ユーザー委任キーを取り消すことができます。 ユーザー委任キーを取り消すと、そのキーに依存するすべての共有アクセス署名が無効になります。 その後、ユーザー委任キーの取得 操作をもう一度呼び出し、そのキーを使用して新しい共有アクセス署名を作成できます。 これは、ユーザー委任 SAS を取り消す最も簡単な方法です。
ロールの割り当てまたは ACL を変更または削除する
SAS の作成に使用されるセキュリティ プリンシパルの RBAC ロールの割り当てと POSIX ACL を変更または削除できます。 クライアントが SAS を使用してリソースにアクセスすると、Azure Storage は、SAS のセキュリティ保護に資格情報が使用されたセキュリティ プリンシパルに、リソースに対する必要なアクセス許可があることを確認します。
関連項目
- Shared Access Signature を使用してアクセスを委任する
- サービス SAS を作成する
- アカウント SAS を作成する
- SAS エラー コード