サービス SAS を作成する
重要
最適なセキュリティを確保するために、Microsoft では、マネージド ID でMicrosoft Entra IDを使用して、可能な限り BLOB、キュー、テーブル データに対する要求を承認することをお勧めします。 Microsoft Entra ID ID とマネージド ID を使用した承認は、共有キーの承認よりも優れたセキュリティと使いやすさを提供します。 詳細については、「Microsoft Entra IDで承認する」を参照してください。 マネージド ID の詳細については、「 Azure リソースのマネージド ID とは」を参照してください。
オンプレミス アプリケーションなど、Azure の外部でホストされているリソースの場合は、Azure Arc を介してマネージド ID を使用できます。たとえば、Azure Arc 対応サーバーで実行されているアプリでは、マネージド ID を使用して Azure サービスに接続できます。 詳細については、「 Azure Arc 対応サーバーを使用した Azure リソースに対する認証」を参照してください。
共有アクセス署名 (SAS) が使用されるシナリオでは、ユーザー委任 SAS を使用することをお勧めします。 ユーザー委任 SAS は、アカウント キーではなくMicrosoft Entra資格情報で保護されます。 共有アクセス署名の詳細については、「ユーザー委任 SAS のCreate」を参照してください。
サービス共有アクセス署名 (SAS) は、Azure Blob Storage、Azure Queue Storage、Azure Table Storage、Azure Filesのいずれかのストレージ サービス内のリソースへのアクセスを委任します。 サービス レベル SAS の URI は、SAS がアクセスを委任するリソースへの URI と、SAS トークンで構成されます。
SAS トークンは、要求を承認するために必要なすべての情報を含むクエリ文字列です。 トークンは、クライアントがアクセスできるリソース、付与されたアクセス許可、および署名が有効な期間を指定します。
SAS では、要求の発信元となるサポートされている IP アドレスまたはアドレス範囲、要求を行うことができるサポートされているプロトコル、または要求に関連付けられているオプションのアクセス ポリシー識別子を指定することもできます。
最後に、すべての SAS トークンに署名が含まれます。
注意事項
共有アクセス署名はストレージ リソースにアクセス許可を付与するキーであり、アカウント キーを保護するのと同じように保護する必要があります。 SAS を悪意のある、または意図しない用途から保護することが重要です。 SAS の配布は慎重に行い、侵害された SAS を失効させるための計画を用意しておいてください。 共有アクセス署名を使用する操作は HTTPS 接続経由でのみ実行する必要があり、SAS URI は HTTPS などのセキュリティで保護された接続でのみ配布する必要があります。
サービス SAS を承認する
ストレージ アカウント キーを使用してアカウント SAS をセキュリティで保護します。 アカウント SAS を作成する場合、クライアント アプリケーションはアカウント キーを持っている必要があります。
Microsoft Entra資格情報を使用してコンテナーまたは BLOB の SAS をセキュリティで保護するには、ユーザー委任 SAS を作成します。
ディレクトリ スコープのアクセス権に関するサービス SAS のサポート
サービス SAS では、承認バージョン () が 2020-02-10 以降で階層型名前空間が有効になっている場合に、ディレクトリ スコープ (sr=d
sv
) がサポートされます。 ディレクトリ スコープ (sr=d
) のセマンティクスは、コンテナー スコープ (sr=c
) のセマンティクスと似ていますが、アクセスはディレクトリとその中のファイルとサブディレクトリに制限されます。 が指定されている場合 sr=d
は、 sdd
クエリ パラメーターも必要です。
承認バージョン 2020-02-10 の文字列から署名の形式は変更されません。
サービス SAS を構築する
次の図は、共有アクセス署名 URI の部分を表しています。 必要な部分はオレンジ色で表示されます。 SAS トークンを構成するフィールドについては、以降のセクションで説明します。
次のセクションでは、サービス SAS トークンを構成するパラメーターを指定する方法について説明します。
フィールドを指定するsignedVersion
signedVersion
(sv
) フィールドには、共有アクセス署名のサービス バージョンが含まれています。 この値は、この共有アクセス署名 (フィールド内) で使用される共有キー承認のバージョンを signature
指定します。 この値は、この共有アクセス署名で行われる要求のサービス バージョンも指定します。
共有アクセス署名を使用して要求を実行するときに使用されるバージョンについては、「 Azure Storage サービスのバージョン管理」を参照してください。
このパラメーターが共有アクセス署名を使用して行われた要求の承認にどのように影響するかについては、「共有アクセス署名 を使用してアクセスを委任する」を参照してください。
フィールド名 | Query parameter (クエリ パラメーター) | 説明 |
---|---|---|
signedVersion |
sv |
必須。 バージョン 2012-02-12 以降でサポートされています。 この共有アクセス署名で行った要求の承認と処理に使用するストレージ サービスのバージョン。 詳細については、「 Azure Storage サービスのバージョン管理」を参照してください。 |
レガシ SAS 要求のバージョンを決定する
が使用されていない従来の signedVersion
シナリオでは、Blob Storage によって、バージョンを決定するためのルールが適用されます。 これらのルールの詳細については、「 Azure Storage サービスのバージョン管理」を参照してください。
重要
クライアント ソフトウェアよりも新しいストレージ サービス バージョンを使用する共有アクセス署名 URI を使用すると、クライアント ソフトウェアで予期しないプロトコル動作が発生する可能性があります。 共有アクセス署名 URI を構築するコードは、ストレージ サービス要求を行うクライアント ソフトウェアによって認識されるバージョンに依存する必要があります。
署名されたリソースを指定する (Blob Storage のみ)
必要な 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 ) パラメーターも必要です。 ディレクトリは常にコンテナー内に入れ子になります。 |
署名されたリソースを指定する (Azure Files)
SAS は、Azure Files バージョン 2015-02-21 以降でサポートされています。
signedResource
フィールドでは、共有アクセス署名を使用してアクセスできるリソースを指定します。 次の表では、URI でファイルまたは共有リソースを参照する方法について説明します。
フィールド名 | Query parameter (クエリ パラメーター) | 説明 |
---|---|---|
signedResource |
sr |
必須。 共有リソースがファイルであるかどうかを指定 f します。 これにより、ファイルのコンテンツとメタデータへのアクセスが許可されます。共有リソースが共有であるかどうかを指定 s します。 これにより、共有内の任意のファイルのコンテンツとメタデータ、および共有内のディレクトリとファイルの一覧へのアクセスが許可されます。 |
応答ヘッダーをオーバーライドするクエリ パラメーターを指定する (Blob Storage とAzure Filesのみ)
要求で共有アクセス署名を使用した場合に返される特定の応答ヘッダーの値を定義するには、クエリ パラメーターに応答ヘッダーを指定できます。 この機能は、Blob Storage の場合はバージョン 2013-08-15、Azure Filesの場合はバージョン 2015-02-21 でサポートされています。 この機能を使用する共有アクセス署名には、Blob Storage の 場合は 以降、2013-08-15
Azure Filesの場合は 以降に設定されたパラメーターを2015-02-21
含めるsv
必要があります。
応答ヘッダーと対応するクエリ パラメーターを次の表に示します。
応答ヘッダー名 | 対応する SAS クエリ パラメーター |
---|---|
Cache-Control |
rscc |
Content-Disposition |
rscd |
Content-Encoding |
rsce |
Content-Language |
rscl |
Content-Type |
rsct |
たとえば、バージョン 2013-08-15 以降で作成された共有アクセス署名にクエリ パラメーターを指定 rsct=binary
すると、 Content-Type
応答ヘッダーは に binary
設定されます。 この値は、 Content-Type
この共有アクセス署名のみを使用する要求の BLOB に格納されているヘッダー値をオーバーライドします。
応答ヘッダーをクエリ パラメーターとして指定する共有アクセス署名を作成する場合は、署名文字列の構築に使用される文字列対署名に含める必要があります。 詳細については、この記事で後述する「署名文字列を作成する」セクションを参照してください。 その他の例については、「 サービス SAS の例」を参照してください。
テーブル名を指定する (テーブル ストレージのみ)
tableName
フィールドでは、共有するテーブルの名前を指定します。
フィールド名 | Query parameter (クエリ パラメーター) | 説明 |
---|---|---|
tableName |
tn |
必須。 共有するテーブルの名前。 |
アクセス ポリシーを指定する
URI のアクセス ポリシー部分は、共有アクセス署名が有効な期間と、ユーザーに付与されるアクセス許可を示します。 アクセス ポリシーを構成する URI の部分を次の表に示します。
フィールド名 | Query parameter (クエリ パラメーター) | 説明 |
---|---|---|
signedStart |
st |
省略可能。 共有アクセス署名が有効になる時刻。受け入れられる ISO 8601 UTC 形式のいずれかで表されます。 このパラメーターを省略すると、現在の UTC 時刻が開始時刻として使用されます。 2012-02-12 より前のバージョンでは、コンテナー ポリシーを使用しない限り、 と signedExpiry の間signedStart の期間は 1 時間を超えることはできません。 受け入れられる UTC 形式の詳細については、「 日付/時刻値の書式設定」を参照してください。 |
signedExpiry |
se |
必須。 共有アクセス署名が無効になる時刻。受け入れられる ISO 8601 UTC 形式のいずれかで表されます。 関連付けられている格納されているアクセス ポリシーで指定されている場合は、このフィールドを省略する必要があります。 受け入れられる UTC 形式の詳細については、「 日付/時刻値の書式設定」を参照してください。 |
signedPermissions
1 |
sp |
必須。 共有アクセス署名に関連付けられているアクセス許可。 ユーザーは、アクセス許可によって許可される操作に制限されます。 関連付けられている格納されているアクセス ポリシーで指定されている場合は、このフィールドを省略する必要があります。 |
startPk
2startRk
2 |
spk srk |
Table Storage のみ。 省略可能ですが、 startPk は startRk を伴う必要があります。 この共有アクセス署名でアクセスできる最小パーティション キーと行キー。 キー値は包含的です。 省略した場合、アクセスできるテーブル エンティティに下限はありません。 |
endPk
2endRk
2 |
epk erk |
Table Storage のみ。 省略可能ですが、 endPk は endRk を伴う必要があります。 この共有アクセス署名でアクセスできる最大パーティション キーと行キー。 キー値は包含的です。 省略した場合、アクセスできるテーブル エンティティに上限はありません。 |
1 フィールドは signedPermissions
、格納されているアクセス ポリシーの一部として指定されていない限り、URI で必須です。
2 フィールド、startRk
endPk
および endRk
フィールドはstartPk
、Table Storage リソースでのみ指定できます。
アクセス許可を指定する
SAS トークンの signedPermissions
(sp
) フィールドに指定されたアクセス許可は、クライアントがリソースに対して実行できる操作を示します。
アクセス許可を組み合わせて、クライアントが同じ SAS で複数の操作を実行できるようにすることができます。 SAS を構築するときは、次の順序でアクセス許可を含める必要があります。
racwdxltmeop
コンテナーの有効なアクセス許可設定の例にはrw
、、、rd
、rl
wd
、wl
、 などがありますrl
。 無効な設定の例には、wr
、、dr
lr
、 などがありますdw
。 アクセス許可の指定を複数回指定することはできません。
サービス SAS では、特定の操作へのアクセスを許可できません。
- コンテナー、キュー、およびテーブルを作成、削除、または一覧表示することはできません。
- コンテナーのメタデータとプロパティを読み取ったり書き込んだりすることはできません。
- キューをクリアすることはできません。また、そのメタデータを書き込むことができません。
- コンテナーをリースすることはできません。
これらの操作へのアクセスを許可する SAS を構築するには、アカウント SAS を使用します。 詳細については、「アカウント SAS を作成する」を参照してください。
重要
共有アクセス署名はストレージ リソースにアクセス許可を付与するキーであり、アカウント キーを保護するのと同じように保護する必要があります。 HTTPS 接続経由でのみ共有アクセス署名を使用する操作を実行し、HTTPS などのセキュリティで保護された接続でのみ共有アクセス署名 URI を配布します。
リソースの種類ごとにサポートされるアクセス許可については、次のセクションで説明します。
ディレクトリ、コンテナー、または BLOB のアクセス許可
リソースの種類ごとにサポートされるアクセス許可を次の表に示します。
アクセス許可 | URI の略記 | リソース | バージョンのサポート | 許可される操作 |
---|---|---|---|---|
Read | r | コンテナー ディレクトリ BLOB |
All | コンテナーまたはディレクトリ内のすべての BLOB のコンテンツ、ブロックリスト、プロパティ、メタデータを読み取ります。 コピー操作のソースとして BLOB を使用します。 |
追加 | a | コンテナー ディレクトリ BLOB |
All | 追加 BLOB にブロックを追加します。 |
作成 | c | コンテナー ディレクトリ BLOB |
All | 新しい BLOB の書き込み、BLOB のスナップショット、または新しい BLOB への BLOB のコピーを行います。 |
Write | 。 | コンテナー ディレクトリ BLOB |
All | コンテンツ、プロパティ、メタデータ、またはブロックリストをCreateまたは書き込みます。 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 のタグを読み取りまたは書き込みます。 |
[検索] | f | コンテナー | 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 の不変ポリシーまたは訴訟ホールドを設定または削除します。 |
ファイルのアクセス許可
アクセス許可 | URI の略記 | 許可される操作 |
---|---|---|
Read | r | コンテンツ、プロパティ、メタデータを読み取る。 コピー操作のソースとして ファイルを使用します。 |
作成 | c | 新しいファイルをCreateするか、新しいファイルにファイルをコピーします。 |
Write | 。 | コンテンツ、プロパティ、メタデータをCreateまたは書き込みます。 ファイルのサイズを変更します。 コピー操作のコピー先として ファイルを使用します。 |
削除 | d | ファイルを削除する。 |
共有のアクセス許可
アクセス許可 | URI の略記 | 許可される操作 |
---|---|---|
Read | r | 共有内の任意のファイルのコンテンツ、プロパティ、またはメタデータを読み取ります。 共有内の任意のファイルをコピー操作のソースとして使用します。 |
作成 | c | 共有内の新しいファイルをCreateするか、ファイルを共有内の新しいファイルにコピーします。 |
Write | 。 | 共有内の任意のファイルに対して、コンテンツ、プロパティ、またはメタデータを作成または書き込みます。 ファイルのサイズを変更します。 コピー操作のコピー先として ファイルを使用します。 注: サービス SAS を使用して共有プロパティまたはメタデータの読み取りまたは書き込みを行うアクセス許可を付与することはできません。 代わりにアカウント SAS を使用してください。 |
削除 | d | 共有内のすべてのファイルを削除します。 注: サービス SAS を使用して共有を削除するアクセス許可を付与することはできません。 代わりにアカウント SAS を使用してください。 |
List | l | 共有内のファイルとディレクトリを一覧表示します。 |
キューのアクセス許可
アクセス許可 | URI の略記 | 許可される操作 |
---|---|---|
Read | r | メタデータとプロパティの読み取り (メッセージ数など)。 メッセージのピーク。 |
追加 | a | キューへのメッセージの追加。 |
更新 | u | キュー内のメッセージの更新。 注: 更新するメッセージを最初に取得できるように、Update でプロセス アクセス許可を使用します。 |
Process | p | キューからのメッセージの取得と削除。 |
テーブルのアクセス許可
アクセス許可 | URI の略記 | 許可される操作 |
---|---|---|
クエリ | r | エンティティの取得とエンティティのクエリ。 |
追加 | a | エンティティの追加。 注: アップサート操作には、追加と更新のアクセス許可が必要です。 |
更新 | u | エンティティの更新。 注: アップサート操作には、追加と更新のアクセス許可が必要です。 |
削除 | d | エンティティの削除。 |
IP アドレスまたは IP 範囲を指定する
バージョン 2015-04-05 の時点で、省略可能な 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 プロトコルを指定する
バージョン 2015-04-05 の時点で、省略可能な signedProtocol
(spr
) フィールドは、SAS で行われた要求に対して許可されるプロトコルを指定します。 使用可能な値は、HTTPS と HTTP の両方 (https,http
) または HTTPS のみ (https
) です。 既定値は https,http
です。 「HTTP のみ」は、値として許可されていないので注意してください。
テーブルのアクセス範囲を指定する
、startRk
、endPk
、および endRk
の各フィールドはstartPk
、共有アクセス署名に関連付けられているテーブル エンティティの範囲を定義します。 テーブル クエリは範囲内の結果のみを返し、共有アクセス署名を使用して、この範囲外のエンティティを追加、更新、または削除しようとすると失敗します。
が とendPk
等しい場合startPk
、共有アクセス署名は、テーブル内の 1 つのパーティション内のエンティティへのアクセスを承認します。
が と 等しいstartRk
endPk
endRk
場合startPk
、共有アクセス署名は 1 つのパーティション内の 1 つのエンティティにのみアクセスできます。
これらのフィールドがテーブル内のエンティティへのアクセスを制限する方法を理解するには、次の表を参照してください。
存在するフィールド | 制約の範囲 |
---|---|
startPk |
partitionKey >= startPk |
endPk |
partitionKey <= endPk |
startPk , startRk |
(partitionKey >startPk )||(partitionKey == startPk && rowKey >= startRk ) |
endPk , endRk |
(partitionKey <endPk )||(partitionKey == endPk && rowKey <= endRk ) |
ディレクトリの深さを指定する
階層型名前空間が有効になっていて、フィールドで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 以降でサポートされています。
署名付き識別子を指定する
URI でフィールドを signedIdentifier
指定すると、指定した共有アクセス署名を、対応する格納されているアクセス ポリシーに関連付けます。 保存されているアクセス ポリシーでは、必要に応じて署名を失効させる機能など、1 つ以上の共有アクセス署名を制御する追加手段が提供されます。 各コンテナー、キュー、テーブル、または共有には、最大 5 つの格納されたアクセス ポリシーを含めることができます。
次の表では、URI で署名付き識別子を参照する方法について説明します。
フィールド名 | Query parameter (クエリ パラメーター) | 説明 |
---|---|---|
signedIdentifier |
si |
省略可能。 コンテナー、キュー、またはテーブルに対して指定されたアクセス ポリシーに関連付けられる最大 64 文字の一意の値。 |
格納されているアクセス ポリシーには、署名付き識別子 (リソース内で一意の最大 64 文字の値) が含まれます。 共有アクセス署名の URI のフィールドに対して signedidentifier
、この署名付き識別子の値を指定できます。 URI に署名付き識別子を指定する場合は、署名を格納されているアクセス ポリシーに関連付けます。 REST API を使用してコンテナー レベルのアクセス ポリシーを確立するには、「 共有アクセス署名を使用してアクセスを委任する」を参照してください。
暗号化スコープを指定する
URI の フィールドを signedEncryptionScope
使用すると、クライアント アプリケーションで使用できる暗号化スコープを指定できます。 SAS トークンを使用して BLOB (PUT) をアップロードするときに、指定した暗号化スコープを使用してサーバー側の暗号化を適用します。 GET とHEADは、以前と同様に制限および実行されません。
次の表では、URI で署名された暗号化スコープを参照する方法について説明します。
フィールド名 | Query parameter (クエリ パラメーター) | 説明 |
---|---|---|
signedEncryptionScope |
ses |
省略可能。 要求の内容を暗号化するために使用する暗号化スコープを示します。 |
このフィールドは、バージョン 2020-12-06 以降でサポートされています。 サポートされているバージョンの前に を追加 ses
すると、サービスはエラー応答コード 403 (禁止) を返します。
コンテナーまたはファイル システムの既定の暗号化スコープを設定した場合、クエリ パラメーターは ses
コンテナー暗号化ポリシーを考慮します。 クエリ パラメーターとx-ms-default-encryption-scope
ヘッダーの間にses
不一致があり、ヘッダーが にtrue
設定されている場合、x-ms-deny-encryption-scope-override
サービスはエラー応答コード 403 (Forbidden) を返します。
PUT 要求で x-ms-encryption-scope
ヘッダーとクエリ パラメーターを ses
指定すると、不一致がある場合、サービスはエラー応答コード 400 (Bad Request) を返します。
署名を指定する
URI の署名部分を使用して、共有アクセス署名で行われた要求を承認します。 Azure Storage では、共有キー承認スキームを使用してサービス SAS を承認します。
次の表では、URI に署名を指定する方法について説明します。
フィールド名 | Query parameter (クエリ パラメーター) | 説明 |
---|---|---|
signature |
sig |
string-to-sign は、フィールドから構築され、要求を承認するために検証する必要がある一意の文字列です。 署名はハッシュベースのメッセージ認証コード (HMAC) であり、SHA256 アルゴリズムを使用して文字列から署名とキーを使用して計算し、Base64 エンコードを使用してエンコードします。 |
署名文字列の作成
共有アクセス署名の署名文字列を作成するには、まず、要求を構成するフィールドから文字列対署名を作成し、文字列を UTF-8 としてエンコードしてから、HMAC-SHA256 アルゴリズムを使用して署名を計算します。 文字列から署名に含まれるフィールドは、URL デコードされている必要があります。
バージョン 2020-12-06 以降
バージョン 2020-12-06 では、署名された暗号化スコープ フィールドのサポートが追加されています。 Blob Storage リソースの文字列対符号を作成するには、次の形式を使用します。
StringToSign = signedPermissions + "\n" +
signedStart + "\n" +
signedExpiry + "\n" +
canonicalizedResource + "\n" +
signedIdentifier + "\n" +
signedIP + "\n" +
signedProtocol + "\n" +
signedVersion + "\n" +
signedResource + "\n" +
signedSnapshotTime + "\n" +
signedEncryptionScope + "\n" +
rscc + "\n" +
rscd + "\n" +
rsce + "\n" +
rscl + "\n" +
バージョン 2018-11-09 以降
バージョン 2018-11-09 では、署名付きリソースと署名済み BLOB スナップショット時間フィールドのサポートが追加されています。 これらのフィールドは、文字列対符号に含める必要があります。 Blob Storage リソースの文字列対符号を作成するには、次の形式を使用します。
StringToSign = signedPermissions + "\n" +
signedStart + "\n" +
signedExpiry + "\n" +
canonicalizedResource + "\n" +
signedIdentifier + "\n" +
signedIP + "\n" +
signedProtocol + "\n" +
signedVersion + "\n" +
signedResource + "\n"
signedSnapshotTime + "\n" +
rscc + "\n" +
rscd + "\n" +
rsce + "\n" +
rscl + "\n" +
rsct
バージョン 2015-04-05 以降
バージョン 2015-04-05 では、署名付き IP および署名済みプロトコル フィールドのサポートが追加されています。 これらのフィールドは、文字列対符号に含める必要があります。 Blob Storage または Azure Files リソースの文字列対符号を作成するには、次の形式を使用します。
StringToSign = signedPermissions + "\n" +
signedStart + "\n" +
signedExpiry + "\n" +
canonicalizedResource + "\n" +
signedIdentifier + "\n" +
signedIP + "\n" +
signedProtocol + "\n" +
signedVersion + "\n" +
rscc + "\n" +
rscd + "\n" +
rsce + "\n" +
rscl + "\n" +
rsct
Table Storage リソースの文字列対符号を作成するには、次の形式を使用します。
StringToSign = signedPermissions + "\n" +
signedStart + "\n" +
signedExpiry + "\n" +
canonicalizedResource + "\n" +
signedIdentifier + "\n" +
signedIP + "\n" +
signedProtocol + "\n" +
signedVersion + "\n" +
startingPartitionKey + "\n"
startingRowKey + "\n"
endingPartitionKey + "\n"
endingRowKey
Queue Storage リソースの文字列対符号を作成するには、次の形式を使用します。
StringToSign = signedPermissions + "\n" +
signedStart + "\n" +
signedExpiry + "\n" +
canonicalizedResource + "\n" +
signedIdentifier + "\n" +
signedIP + "\n" +
signedProtocol + "\n" +
signedVersion
バージョン 2013-08-15 から 2015-02-21
バージョン 2013-08-15 から 2015-02-21 を使用して Blob Storage または Azure Files リソースの文字列対符号を作成するには、次の形式を使用します。 Azure Filesの場合、SAS はバージョン 2015-02-21 以降でサポートされています。
StringToSign = signedPermissions + "\n" +
signedStart + "\n" +
signedExpiry + "\n" +
canonicalizedResource + "\n" +
signedIdentifier + "\n" +
signedVersion + "\n" +
rscc + "\n" +
rscd + "\n" +
rsce + "\n" +
rscl + "\n" +
rsct
テーブルの署名対象文字列を作成するには、次の形式を使用します。
StringToSign = signedPermissions + "\n" +
signedStart + "\n" +
signedExpiry + "\n" +
canonicalizedResource + "\n" +
signedIdentifier + "\n" +
signedVersion + "\n" +
startPk + "\n" +
startRk + "\n" +
endPk + "\n" +
endRk
キューの文字列対符号を作成するには、次の形式を使用します。
StringToSign = signedPermissions + "\n" +
signedStart + "\n" +
signedExpiry + "\n" +
canonicalizedResource + "\n" +
signedIdentifier + "\n" +
signedVersion
バージョン 2012-02-12
バージョン 2012-02-12 の Blob Storage リソースの文字列対符号を作成するには、次の形式を使用します。
StringToSign = signedPermissions + "\n" +
signedStart + "\n" +
signedExpiry + "\n" +
canonicalizedResource + "\n" +
signedIdentifier + "\n" +
signedVersion
2012-02-12 より前のバージョン
2012-02-12 より前のバージョンの Blob Storage リソースの文字列対符号を作成するには、次の形式を使用します。
StringToSign = signedPermissions + "\n" +
signedStart + "\n" +
signedExpiry + "\n" +
canonicalizedResource + "\n" +
signedIdentifier
署名する文字列を構築する場合は、次の点に注意してください。
省略可能のフィールドが要求で指定されていない場合は、そのフィールドに対して空の文字列を指定します。 空の文字列の後には必ず改行文字 (\n) を付けます。
テーブルの文字列対符号には、空の文字列であっても、追加のパラメーターを含める必要があります。
文字列の部分には
signedpermission
、各リソースの種類に固有の固定順序でアクセス許可の指定を含める必要があります。 これらのアクセス許可はどのように組み合わせても使用できますが、アクセス許可の文字の順序は、次の表に示す順序と一致している必要があります。リソースの種類 アクセス許可の順序 BLOB racwd コンテナー racwdl キュー raup ファイル rcwd 共有 rcwdl テーブル raud たとえば、コンテナーの有効なアクセス許可設定の例としては
rw
、、、rd
、rl
、wd
、wl
および などがありますrl
。 無効な設定の例には、wr
、、dr
lr
、 などがありますdw
。 アクセス許可の指定を複数回指定することはできません。要求を格納されているアクセス ポリシーに
signedIdentifier
関連付ける場合は、文字列の部分の値を指定します。2012-02-12 より前のストレージ サービス バージョンを指定する共有アクセス署名では、BLOB またはコンテナーのみを共有でき、その前に と 改行文字を省略
signedVersion
する必要があります。文字列の
canonicalizedResource
の部分は、署名対象リソースへの正規化されたパスです。 バージョン 2015-02-21 以降のサービス名 (Blob Storage、Table Storage、Queue Storage、またはAzure Files)、ストレージ アカウント名、およびリソース名を含める必要があり、URL デコードされている必要があります。 BLOB の名前には、BLOB のコンテナーを含める必要があります。 テーブル名は小文字にする必要があります。
コンテナー、キュー、テーブル、またはファイル共有の正規化されたリソース文字列では、そのオブジェクトへのアクセスを提供する SAS の末尾のスラッシュ (/) を省略する必要があります。
次の例は、リソースの種類に応じて、文字列の部分を構築 canonicalizedResource
する方法を示しています。
Containers
バージョン 2015-02-21 以降の場合:
URL = https://myaccount.blob.core.windows.net/music
canonicalizedResource = "/blob/myaccount/music"
2015-02-21 より前のバージョンの場合:
URL = https://myaccount.blob.core.windows.net/music
canonicalizedResource = "/myaccount/music"
BLOB
バージョン 2015-02-21 以降の場合:
URL = https://myaccount.blob.core.windows.net/music/intro.mp3
canonicalizedResource = "/blob/myaccount/music/intro.mp3"
2015-02-21 より前のバージョンの場合:
URL = https://myaccount.blob.core.windows.net/music/intro.mp3
canonicalizedResource = "/myaccount/music/intro.mp3"
ファイル共有
URL = https://myaccount.file.core.windows.net/music
canonicalizedResource = "/file/myaccount/music"
[ファイル]
URL = https://myaccount.file.core.windows.net/music/intro.mp3
canonicalizedResource = "/file/myaccount/music/intro.mp3"
キュー
バージョン 2015-02-21 以降の場合:
URL = https://myaccount.queue.core.windows.net/thumbnails
canonicalizedResource = "/queue/myaccount/thumbnails"
2015-02-21 より前のバージョンの場合:
URL = https://myaccount.queue.core.windows.net/thumbnails
canonicalizedResource = "/myaccount/thumbnails"
テーブル
署名されたリソースがテーブルの場合は、テーブル名が正規化された形式で小文字であることを確認します。
バージョン 2015-02-21 以降の場合:
URL = https://myaccount.table.core.windows.net/Employees(PartitionKey='Jeff',RowKey='Price')
canonicalizedResource = "/table/myaccount/employees"
2015-02-21 より前のバージョンの場合:
URL = https://myaccount.table.core.windows.net/Employees(PartitionKey='Jeff',RowKey='Price')
canonicalizedResource = "/myaccount/employees"
共有アクセス署名の有効期間と失効
共有アクセス署名は、ストレージ アカウント リソースへのアクセス権をユーザーに付与します。 SAS を使用する予定の場合は、SAS の有効期間と、特定の状況でアプリケーションでアクセス権を取り消す必要があるかどうかについて考えてください。
アドホック SAS と格納されているアクセス ポリシー
サービス SAS には、次の 2 つの形式のいずれかを使用できます。
アドホック SAS: アドホック SAS を作成すると、SAS の開始時刻、有効期限、およびアクセス許可がすべて SAS URI で指定されます (開始時刻を省略した場合は暗黙的に指定されます)。 任意の種類の SAS を、アドホック SAS にできます。
フィールドを使用して、アドホック SAS の有効期間を
signedExpiry
管理できます。 有効期限が切れた後も引き続きクライアントにリソースへのアクセス権を付与する場合は、新しい署名を発行する必要があります。 共有アクセス署名の有効期間は短くすることをお勧めします。 バージョン 2012-02-12 より前のバージョンでは、保存されているアクセス ポリシーに関連付けられていない共有アクセス署名に、1 時間を超えるアクティブな期間を設定できませんでした。格納されたアクセス ポリシーを含む SAS: 格納されたアクセス ポリシーは、BLOB コンテナー、テーブル、キュー、またはファイル共有であるリソース コンテナーで定義されます。 格納されているアクセス ポリシーを使用して、1 つ以上の共有アクセス署名の制約を管理できます。 SAS を格納されているアクセス ポリシーに関連付けると、SAS は、格納されているアクセス ポリシーに対して定義されている制約 (開始時刻、有効期限、アクセス許可) を継承します。
保存されているアクセス ポリシーは、URL の
signedIdentifier
フィールドで表されます。 保存されているアクセス ポリシーでは、必要に応じて署名を失効させる機能など、1 つ以上の共有アクセス署名を制御する追加手段が提供されます。
SAS を取り消す
SAS URI は URL であるため、SAS を取得したユーザーは、最初に作成したユーザーに関係なく、その URI を使用できます。 SAS が一般ユーザーに発行された場合は、世界中のだれでも使用できます。 SAS は、次の 4 つのいずれかが発生するまで、リソースを所有するすべてのユーザーにリソースへのアクセスを許可します。
アドホック SAS で指定された有効期限に達しました。
保存されているアクセス ポリシーが参照され、アクセス ポリシーで有効期限が指定されている場合、SAS によって参照される格納されているアクセス ポリシーで指定された有効期限に達します。
有効期限は、間隔が経過するか、保存されているアクセス ポリシーを変更して過去に有効期限を設定したために到達できます。これは、SAS を取り消す 1 つの方法です。
SAS によって参照されている格納されているアクセス ポリシーが削除され、SAS が取り消されます。 共有アクセス署名で指定された格納されているアクセス ポリシーが Azure Storage で見つからない場合、クライアントは URI で示されるリソースにアクセスできません。
削除されたポリシーとまったく同じ名前で格納されているアクセス ポリシーを再作成すると、その保存されているアクセス ポリシーに関連付けられているアクセス許可に従って、既存のすべての SAS トークンが再度有効になります。 これは、SAS の有効期限が過ぎないことを前提としています。 SAS を取り消す場合は、後で有効期限を指定してアクセス ポリシーを再作成するときに、必ず別の名前を使用してください。
SAS の作成に使用したアカウント キーが再度生成された。 アカウント キーを再生成すると、そのキーを使用するすべてのアプリケーション コンポーネントは、他の有効なアカウント キーまたは新しく再生成されたアカウント キーを使用するように更新されるまで、承認に失敗します。 アカウント キーの再生成は、アドホック SAS をすぐに取り消す唯一の方法です。
重要
共有アクセス署名 URI は、署名の作成に使用されるアカウント キーと、関連する格納されているアクセス ポリシー (該当する場合) に関連付けられます。 保存済みのアクセス ポリシーが指定されていない場合、Shared Access Signature を取り消すにはアカウント キーを変更する以外に方法はありません。
ベスト プラクティスとして、保存されているアクセス ポリシーをサービス SAS と共に使用することをお勧めします。 保存されているアクセス ポリシーを使用しない場合は、アドホック SAS が有効な期間を短くしてください。 サービス SAS と格納されているアクセス ポリシーの関連付けの詳細については、「格納 されているアクセス ポリシーを定義する」を参照してください。
サービス 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&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 時間で指定。 |
IP 範囲 | sip=168.1.5.60-168.1.5.70 |
要求が受け入れられる IP アドレスの範囲です。 |
Protocol | spr=https |
HTTPS を使用する要求のみが許可されます。 |
Azure Storage のバージョン | sv=2023-05-24 |
Azure Storage バージョン 2012-02-12 以降では、このパラメーターは使用するバージョンを示します。 |
リソース | sr=b |
リソースは BLOB です。 |
署名 | sig=<signature> |
BLOB へのアクセスを承認するために使用します。 署名は、SHA256 アルゴリズムを使用して文字列対署名とキーを使用して計算され、Base64 エンコードを使用してエンコードされる HMAC です。 |