サービス SAS を作成する

サービス共有アクセス署名 (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=dsv) がサポートされます。 ディレクトリ スコープ (sr=d) のセマンティクスは、コンテナー スコープ (sr=c) のセマンティクスと似ていますが、アクセスはディレクトリとその中のファイルとサブディレクトリに制限される点が除きます。 が指定されている場合 sr=d は、 sdd クエリ パラメーターも必要です。

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

サービス SAS を構築する

次の図は、Shared Access Signature URI の部分を表しています。 必要な部分はオレンジ色で表示されます。 SAS トークンを構成するフィールドについては、以降のセクションで説明します。

共有アクセス署名 URL のパラメーター要素の図。

次のセクションでは、サービス SAS トークンを構成するパラメーターを指定する方法について説明します。

フィールドを指定するsignedVersion

signedVersion (sv) フィールドには、共有アクセス署名のサービス バージョンが含まれています。 この値は、この共有アクセス署名 (フィールド内) で使用される共有キー承認のバージョンを signature 指定します。 この値は、この共有アクセス署名で行われる要求のサービス バージョンも指定します。

共有アクセス署名を使用して要求を実行するときに使用されるバージョンについては、「 Azure Storage サービスのバージョン管理」を参照してください。

このパラメーターが、共有アクセス署名を使用して行われた要求の承認にどのように影響するかについては、「共有アクセス署名を 使用してアクセスを委任する」を参照してください。

フィールド名 Query parameter (クエリ パラメーター) 説明
signedVersion sv 必須。 バージョン 2012-02-12 以降でサポートされています。 この共有アクセス署名を使用して行った要求の承認と処理に使用するストレージ サービスのバージョン。 詳細については、「 Azure Storage サービスのバージョン管理」を参照してください。

レガシ SAS 要求のバージョンを確認する

が使用されていないレガシ シナリオでは、Blob Storage によってルールが signedVersion 適用され、バージョンが決定されます。 これらの規則の詳細については、「 Azure Storage サービスのバージョン管理」を参照してください。

重要

クライアント ソフトウェアよりも新しいストレージ サービス バージョンを使用する Shared Access Signature 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-15Azure 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 形式の詳細については、「 日付/時刻値の書式設定」を参照してください。
signedPermissions1 sp 必須。 共有アクセス署名に関連付けられているアクセス許可。 ユーザーは、アクセス許可によって許可される操作に制限されます。 関連付けられている保存されているアクセス ポリシーで指定されている場合は、このフィールドを省略する必要があります。
startPk2

startRk2
spk

srk
Table Storage のみ。

省略可能ですが、startPkstartRk を伴う必要があります。 この共有アクセス署名でアクセスできる最小パーティション キーと行キー。 キー値は包含的です。 省略した場合、アクセスできるテーブル エンティティに下限はありません。
endPk2

endRk2
epk

erk
Table Storage のみ。

省略可能ですが、endPkendRk を伴う必要があります。 この共有アクセス署名でアクセスできる最大パーティション キーと行キー。 キー値は包含的です。 省略した場合、アクセスできるテーブル エンティティに上限はありません。

1 フィールドは signedPermissions 、格納されているアクセス ポリシーの一部として指定されていない限り、URI で必要です。
2 、、startRkendPkおよび endRk の各フィールドはstartPk、Table Storage リソースでのみ指定できます。

アクセス許可を指定する

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

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

racwdxltmeop

コンテナーの有効なアクセス許可設定の例にはrw、、、rdrlwdwl、 などがありますrl。 無効な設定の例としては、wr、、drlr、 などがあります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 コンテンツ、プロパティ、メタデータ、またはブロックリストを作成または書き込みます。 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 新しいファイルを作成するか、ファイルを新しいファイルにコピーします。
Write コンテンツ、プロパティ、メタデータを作成または書き込みます。 ファイルのサイズを変更します。 コピー操作のコピー先として ファイルを使用します。
削除 d ファイルを削除する。

共有のアクセス許可

アクセス許可 URI の略記 許可される操作
Read r 共有内の任意のファイルのコンテンツ、プロパティ、またはメタデータを読み取ります。 共有内の任意のファイルをコピー操作のソースとして使用します。
作成 c 共有に新しいファイルを作成するか、共有内の新しいファイルにファイルをコピーします。
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 のみ」は、値として許可されていないので注意してください。

テーブルのアクセス範囲を指定する

、、startRkendPk、および endRk の各フィールドはstartPk、共有アクセス署名に関連付けられているテーブル エンティティの範囲を定義します。 テーブル クエリは範囲内の結果のみを返します。共有アクセス署名を使用して、この範囲外のエンティティを追加、更新、または削除しようとすると失敗します。

endPkの場合startPk、共有アクセス署名は、テーブル内の 1 つのパーティション内のエンティティへのアクセスを承認します。

が と等しいstartRkendPkendRk場合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=dsdd) フィールドも指定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 文字の値) が含まれます。 この署名付き識別子の値は、共有アクセス署名の signedidentifier URI のフィールドに指定できます。 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 要求で ヘッダーとクエリ パラメーターをses指定x-ms-encryption-scopeすると、不一致がある場合、サービスはエラー応答コード 400 (無効な要求) を返します。

署名を指定する

URI の署名部分を使用して、共有アクセス署名で行われた要求を承認します。 Azure Storage では、共有キー承認スキームを使用してサービス SAS を承認します。

次の表では、URI に署名を指定する方法について説明します。

フィールド名 Query parameter (クエリ パラメーター) 説明
signature sig string-to-sign は、フィールドから構築され、要求を承認するために検証する必要がある一意の文字列です。 署名はハッシュベースのメッセージ認証コード (HMAC) であり、SHA256 アルゴリズムを使用して文字列から署名とキーを使用して計算し、Base64 エンコードを使用してエンコードします。

署名文字列の作成

共有アクセス署名の署名文字列を作成するには、まず、要求を構成するフィールドから文字列 to 署名を作成し、その文字列を 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、、 rdrlwdwl、 などがあります rl。 無効な設定の例としては、wr、、drlr、 などがあります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 です。

関連項目