ユーザーの委任 SAS の作成
Azure Active Directory (Azure AD) 資格情報またはアカウント キーを使用して、コンテナー、ディレクトリ、または BLOB にアクセスするための共有アクセス署名 (SAS) トークンをセキュリティで保護できます。 Azure AD 資格情報でセキュリティ保護された SAS は、 ユーザー委任 SAS と呼ばれます。 セキュリティのベスト プラクティスとして、より簡単に侵害される可能性があるアカウント キーではなく、可能な場合は Azure AD 資格情報を使用することをお勧めします。 アプリケーション設計で共有アクセス署名が必要な場合は、Azure AD 資格情報を使用してユーザー委任 SAS を作成し、セキュリティを強化します。
すべての SAS はキーによって署名されます。 ユーザー委任 SAS を作成するには、まず ユーザー委任キーを要求する必要があります。このキーを使用して SAS に署名します。 ユーザー委任キーは、Azure AD 資格情報に依存する点を除き、サービス 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
実行されるオプションのユーザー オブジェクト識別子 (sv
OID) がサポートされます。 この省略可能なパラメーターは、Hadoop や Spark などのマルチユーザー クラスター ワークロードの拡張承認モデルを提供します。
SAS トークンは、特定のファイルシステム操作とユーザーに制限できます。これにより、マルチユーザー クラスター全体に分散する方が安全な脆弱なアクセス トークンが提供されます。 これらの機能のユース ケースの 1 つは、Hadoop ABFS ドライバーと Apache Ranger の統合です。
ユーザー委任 SAS を承認する
クライアントがユーザー委任 SAS を使用して Blob Storage リソースにアクセスすると、Azure Storage への要求は、SAS の作成に使用された Azure AD 資格情報で承認されます。 その Azure AD アカウントに付与されるロールベースのアクセス制御 (RBAC) アクセス許可と、SAS で明示的に付与されたアクセス許可によって、リソースへのクライアントのアクセスが決まります。 この方法により、セキュリティ レベルが強化され、アプリケーション コードにアカウント アクセス キーを格納する必要がなくなります。 このような理由から、Azure AD 資格情報を使用して SAS を作成することは、セキュリティのベスト プラクティスです。
SAS を所有するクライアントに付与されるアクセス許可は、ユーザー委任キーを要求したセキュリティ プリンシパルに付与されたアクセス許可と、 (sp
) フィールドを使用して signedPermissions
SAS トークンのリソースに付与されたアクセス許可の共通部分です。 RBAC を介してセキュリティ プリンシパルに付与されたアクセス許可も SAS トークンに付与されていない場合、そのアクセス許可は、SAS を使用してリソースにアクセスしようとするクライアントには付与されません。 ユーザー委任 SAS を作成するときは、RBAC 経由で付与されるアクセス許可と SAS トークン経由で付与されたアクセス許可の両方が、クライアントに必要なアクセス レベルに一致していることを確認します。
ユーザー委任 SAS を作成するには、次の操作を行います。
- RBAC を使用して、ユーザー委任キーを要求するセキュリティ プリンシパルに目的のアクセス許可を付与します。
- Azure AD から OAuth 2.0 トークンを取得します。
- トークンを使用して、ユーザー委任キーの取得操作を呼び出して ユーザー委任キーを 要求します。
- ユーザー委任キーを使用して、適切なフィールドで SAS トークンを構築します。
RBAC を使用してアクセス許可を割り当てる
ユーザー委任キーを要求するセキュリティ プリンシパルには、これを行うための適切なアクセス許可が必要です。 Azure AD セキュリティ プリンシパルには、ユーザー、グループ、サービス プリンシパル、またはマネージド ID を指定できます。
ユーザー委任キーを要求するには、Microsoftをセキュリティ プリンシパルに割り当てる必要があります。Storage/storageAccounts/blobServices/generateUserDelegationKey アクション。 次の組み込み RBAC ロールには、Microsoftが含まれます。Storage/storageAccounts/blobServices/generateUserDelegationKey アクション (明示的またはワイルドカード定義の一部として):
- Contributor
- Storage Account Contributor
- ストレージ BLOB データ共同作成者
- ストレージ BLOB データ所有者
- ストレージ BLOB データ閲覧者
- Storage Blob デリゲータ
ユーザー委任キーの取得操作はストレージ アカウントのレベルで機能するため、Microsoft。Storage/storageAccounts/blobServices/generateUserDelegationKey アクションのスコープは、ストレージ アカウント、リソース グループ、またはサブスクリプションのレベルで指定する必要があります。 セキュリティ プリンシパルに、前述の組み込みロール、またはMicrosoftを含むカスタム ロールのいずれかが割り当てられている場合。Storage/storageAccounts/blobServices/generateUserDelegationKey アクションは、ストレージ アカウント、リソース グループ、またはサブスクリプションのレベルで、ユーザー委任キーを要求できます。
セキュリティ プリンシパルに、データ アクセスを許可するロールが割り当てられているが、コンテナーのレベルにスコープが設定されている場合は、ストレージ アカウント、リソース グループ、またはサブスクリプションのレベルで、 ストレージ BLOB Delegator ロールをセキュリティ プリンシパルに追加で割り当てることができます。 Storage Blob Delegator ロールは、ユーザー委任キーを要求するためのアクセス許可をセキュリティ プリンシパルに付与します。
Azure Storage の RBAC ロールの詳細については、「Azure Active Directory で承認する」を参照してください。
OAuth 2.0 トークンを取得する
ユーザー委任キーを取得するには、まず Azure AD から OAuth 2.0 トークンを要求します。 トークンに Bearer スキームを指定して、 ユーザー委任キーの取得 操作の呼び出しを承認します。 Azure AD から 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 以降 | Azure AD セキュリティ プリンシパルを識別します。 |
signedTenantId |
sktid |
必須 | 2018-11-09 以降 | セキュリティ プリンシパルが定義されている Azure AD テナントを指定します。 |
signedKeyStartTime |
skt |
省略可能。 | 2018-11-09 以降 | 値は、 ユーザー委任キーの取得 操作によって返されます。 許容される ISO 8601 UTC 形式のいずれかで表される、ユーザー委任キーの有効期間の開始を示します。 値を省略すると、現在の時刻が想定されます。 受け入れられる UTC 形式の詳細については、「 DateTime 値の書式設定」を参照してください。 |
signedKeyExpiryTime |
ske |
必須 | 2018-11-09 以降 | 値は、 ユーザー委任キーの取得 操作によって返されます。 許容される ISO 8601 UTC 形式のいずれかで表される、ユーザー委任キーの有効期間の終了を示します。 受け入れられる UTC 形式の詳細については、「 DateTime 値の書式設定」を参照してください。 |
signedKeyService |
sks |
必須 | 2018-11-09 以降 | ユーザー委任キーが有効なサービスを示します。 現時点では、Blob Storage のみがサポートされています。 |
signedAuthorizedObjectId |
saoid |
省略可能 | 2020-02-10 以降 | SAS トークンによって付与されたアクションを実行するためにユーザー委任キーの所有者によって承認される Azure AD セキュリティ プリンシパルのオブジェクト ID を指定します。 ポータブル オペレーティング システム インターフェイス (POSIX) アクセス制御リスト (ACL) に対する追加のアクセス許可チェックは実行されません。 |
signedUnauthorizedObjectId |
suoid |
省略可能 | 2020-02-10 以降 | 階層型名前空間が有効になっている場合の Azure AD セキュリティ プリンシパルのオブジェクト 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 | すべて | コンテナー内の任意の 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
、、、rd
、rl
wd
、wl
、 などがありますrl
。 無効な設定の例としては、wr
、、dr
lr
、 などがあります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 バージョンを削除します。 |
完全削除 | ○ | 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 を指定する
signedObjectId
(skoid
) フィールドは、ユーザー委任 SAS に必要です。 ユーザー委任キーの取得操作は、応答の一部としてこの値を返します。 署名付きオブジェクト ID は、Microsoft ID プラットフォームのセキュリティ プリンシパルの不変識別子を提供する GUID 値です。
署名されたテナント ID を指定する
signedTenantId
(sktid
) フィールドは、ユーザー委任 SAS に必要です。 ユーザー委任キーの取得操作は、応答の一部としてこの値を返します。 署名済みテナント ID は、セキュリティ プリンシパルが定義されている Azure AD テナントを表す GUID 値です。
署名されたキーの開始時刻を指定する
省略可能な signedKeyStartTime
(skt
) フィールドは、ユーザー委任キーの有効期間の開始を ISO 日付形式で示します。 ユーザー委任キーの取得操作は、応答の一部としてこの値を返します。 開始時刻を省略すると、署名されたキーの開始時刻は現在の時刻と見なされます。
署名されたキーの有効期限を指定する
signedKeyExpiryTime
(ske
) フィールドは、ISO 日付形式のユーザー委任 SAS に必要です。 ユーザー委任キーの取得操作は、応答の一部としてこの値を返します。 署名済みキーの有効期限は、ユーザー委任キーの有効期間の終了を示します。 有効期限の値は、SAS の開始時刻から最大 7 日間である場合があります。
署名付きキー サービスを指定する
signedKeyService
(sks
) フィールドは、ユーザー委任 SAS に必要です。 ユーザー委任キーの取得操作は、応答の一部としてこの値を返します。 署名済みキー サービス フィールドは、ユーザー委任キーが有効なサービスを示します。 Blob Storage の署名済みキー サービス フィールドの値は です b
。
署名済みキーのバージョンを指定する
signedkeyversion
(skv
) フィールドは、ユーザー委任 SAS に必要です。 ユーザー委任キーの取得操作は、応答の一部としてこの値を返します。 フィールドは signedkeyversion
、ユーザー委任キーの取得に使用されるストレージ サービスのバージョンを指定します。 このフィールドには、バージョン 2018-11-09 以降を指定する必要があります。
セキュリティ プリンシパルの署名付きオブジェクト ID を指定する
省略可能な signedAuthorizedObjectId
(saoid
) フィールドと signedUnauthorizedObjectId
(suoid
) フィールドを使用すると、Azure Data Lake Storage Gen2ワークロード用の Apache Hadoop および Apache Ranger との統合が可能になります。 SAS トークンで次のいずれかのフィールドを使用して、セキュリティ プリンシパルのオブジェクト ID を指定します。
- フィールドは
saoid
、SAS トークンによって付与されたアクションを実行するためにユーザー委任キーの所有者によって承認される Azure AD セキュリティ プリンシパルのオブジェクト ID を指定します。 Azure Storage は SAS トークンを検証し、Azure Storage がアクセスを許可する前に、ユーザー委任キーの所有者が必要なアクセス許可を持っていることを確認します。 POSIX ACL に対する追加のアクセス許可チェックは実行されません。 - このフィールドは
suoid
、ストレージ アカウントに対して階層型名前空間が有効になっている場合に、Azure AD セキュリティ プリンシパルのオブジェクト ID を指定します。 フィールドはsuoid
、階層型名前空間を持つアカウントに対してのみ有効です。 フィールドがsuoid
SAS トークンに含まれている場合、Azure Storage は、操作を承認する前に、オブジェクト ID に対して POSIX ACL チェックを実行します。 この ACL チェックが成功しない場合、操作は失敗します。 フィールドが SAS トークンに含まれている場合は、ストレージ アカウントに対してsuoid
階層型名前空間を有効にする必要があります。 それ以外の場合、権限チェックは承認エラーで失敗します。
ユーザー委任キーを要求するセキュリティ プリンシパルのオブジェクト ID が、必須 skoid
フィールドにキャプチャされます。 または suoid
フィールドを使用saoid
して SAS トークンにオブジェクト ID を指定するには、フィールドでskoid
識別されるセキュリティ プリンシパルに、Microsoftを含む RBAC ロールを割り当てる必要があります。Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action または Microsoft。Storage/storageAccounts/blobServices/containers/blobs/manageOwnership/action。 これらのアクションの詳細については、「 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
加えて (o
p
) アクセス許可を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 scope
、PUT 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 が侵害されたと思われる場合は、その SAS を取り消す必要があります。 ユーザー委任 SAS を取り消すには、ユーザー委任キーを取り消すか、SAS の作成に使用されるセキュリティ プリンシパルの RBAC ロールの割り当てを変更または削除します。
重要
ユーザーの委任キーと RBAC ロールの割り当てはいずれも Azure Storage によってキャッシュされるため、失効プロセスの開始と、既存のユーザーの委任 SAS の無効化の間に、遅延が発生する可能性があります。
ユーザー委任キーを取り消す
[ユーザー委任キーの取り消し] 操作を呼び出すことで 、ユーザー委任キーを取り消 すことができます。 ユーザー委任キーを取り消すと、そのキーに依存するすべての共有アクセス署名が無効になります。 その後、 ユーザー委任キーの取得 操作をもう一度呼び出し、キーを使用して新しい共有アクセス署名を作成できます。 これは、ユーザー委任 SAS を取り消す最も簡単な方法です。
ロールの割り当てを変更または削除する
SAS の作成に使用されるセキュリティ プリンシパルの RBAC ロールの割り当てを変更または削除できます。 クライアントが SAS を使用してリソースにアクセスすると、Azure Storage は、SAS のセキュリティ保護に使用された資格情報を持つセキュリティ プリンシパルに、リソースに必要なアクセス許可があることを確認します。