Shared Access Signatures (SAS) の使用Using shared access signatures (SAS)

Shared Access Signature (SAS) は、アカウント キーを知らせずに、自分のストレージ アカウントのオブジェクトへの制限付きアクセスを他のクライアントに許可する方法を提供します。A shared access signature (SAS) provides you with a way to grant limited access to objects in your storage account to other clients, without exposing your account key. この記事では、SAS モデルの概要を説明し、SAS のベスト プラクティスを確認して、いくつかの例を紹介します。In this article, we provide an overview of the SAS model, review SAS best practices, and look at some examples.

ここで紹介する以外の SAS を使用したコード例については、.NET を使用して Azure Blob Storage を使用するAzure のコード サンプル ライブラリにある他のサンプルをご覧ください。For additional code examples using SAS beyond those presented here, see Getting Started with Azure Blob Storage in .NET and other samples available in the Azure Code Samples library. サンプル アプリケーションをダウンロードして実行することも、GitHub でコードを参照することもできます。You can download the sample applications and run them, or browse the code on GitHub.

Shared Access Signature とはWhat is a shared access signature?

Shared Access Signature を使用すると、ストレージ アカウント内のリソースへの委任アクセスが可能になります。A shared access signature provides delegated access to resources in your storage account. SAS を使用すると、アカウント キーを共有することなく、ストレージ アカウントのリソースへのアクセス権をクライアントに付与できます。With a SAS, you can grant clients access to resources in your storage account, without sharing your account keys. これは、アプリケーションで Shared Access Signature を使用する際の重要な点になります。SAS は、アカウント キーを損なうことなく、ストレージ リソースを共有する安全な方法です。This is the key point of using shared access signatures in your applications--a SAS is a secure way to share your storage resources without compromising your account keys.

重要

ストレージ アカウント キーは、ストレージ アカウントの root パスワードに似ています。Your storage account key is similar to the root password for your storage account. アカウント キーは常に慎重に保護してください。Always be careful to protect your account key. このキーを他のユーザーに配布したり、ハードコーディングしたり、他のユーザーがアクセスできるプレーン テキストで保存したりしないでください。Avoid distributing it to other users, hard-coding it, or saving it anywhere in plaintext that is accessible to others. アカウント キーが侵害されたと思われる場合は、Azure Portal を使用してキーを再生成してください。Regenerate your account key using the Azure portal if you believe it may have been compromised. アカウント キーを再生成する方法については、Azure Portal でストレージ アカウントを作成、管理、削除する方法に関するページを参照してください。To learn how to regenerate your account key, see How to create, manage, or delete a storage account in the Azure portal.

SAS では、SAS を使用しているクライアントに付与する次のようなアクセスの種類をきめ細かく制御できます。A SAS gives you granular control over the type of access you grant to clients who have the SAS, including:

  • SAS が有効な間隔 (開始時刻と有効期限など)。The interval over which the SAS is valid, including the start time and the expiry time.
  • SAS によって付与されるアクセス許可。The permissions granted by the SAS. たとえば、BLOB の SAS では BLOB への読み取りと書き込み許可が付与されますが、アクセス許可は削除されません。For example, a SAS for a blob might grant read and write permissions to that blob, but not delete permissions.
  • SAS を受け入れる Azure Storage の省略可能な IP アドレスまたは範囲の IP アドレス。An optional IP address or range of IP addresses from which Azure Storage will accept the SAS. たとえば、組織に属する IP アドレスの範囲を指定できます。For example, you might specify a range of IP addresses belonging to your organization.
  • SAS を受け入れる Azure Storage のプロトコル。The protocol over which Azure Storage will accept the SAS. この省略可能なパラメーターを使用すると、HTTPS を使用したクライアントのアクセスを制限できます。You can use this optional parameter to restrict access to clients using HTTPS.

Shared Access Signature を使用するタイミングWhen should you use a shared access signature?

SAS は、自分のストレージ アカウントのアクセス キーを持たないクライアントに、自分のストレージ アカウント内のリソースへのアクセスを許可する場合に使用できます。You can use a SAS when you want to provide access to resources in your storage account to any client not possessing your storage account's access keys. ストレージ アカウントには、プライマリ アクセス キーとセカンダリ アクセス キーの両方が含まれており、これらによって、アカウントとその中のすべてのリソースへの管理アクセスが付与されます。Your storage account includes both a primary and secondary access key, both of which grant administrative access to your account, and all resources within it. これらのキーのいずれかを知らせると、悪意で、または誤ってアカウントが使用される可能性が生じます。Exposing either of these keys opens your account to the possibility of malicious or negligent use. Shared Access Signature は、アカウント キーが不要で安全な代替方法です。この方法で、クライアントは、明示的に付与されたアクセス許可に従ってストレージ アカウント内のデータの読み取り、書き込み、削除を実行できます。Shared access signatures provide a safe alternative that allows clients to read, write, and delete data in your storage account according to the permissions you've explicitly granted, and without need for an account key.

SAS が役立つ一般的なシナリオは、ストレージ アカウント内でユーザーが自分のデータの読み取りや書き込みを行うサービスです。A common scenario where a SAS is useful is a service where users read and write their own data to your storage account. ストレージ アカウントにユーザー データが格納されるシナリオには、2 種類の典型的な設計パターンがあります。In a scenario where a storage account stores user data, there are two typical design patterns:

  1. 認証を実行するフロントエンド プロキシ サービス経由で、クライアントがデータのアップロードとダウンロードを行います。Clients upload and download data via a front-end proxy service, which performs authentication. このフロントエンド プロキシ サービスには、ビジネス ルールの検証が可能であるという利点がありますが、データやトランザクションが大量である場合は、需要に応じて拡張可能なサービスの作成にコストがかかったり、困難が生じたりする可能性があります。This front-end proxy service has the advantage of allowing validation of business rules, but for large amounts of data or high-volume transactions, creating a service that can scale to match demand may be expensive or difficult.

    シナリオ図: フロントエンド プロキシ サービス

  2. 軽量サービスが、必要に応じてクライアントを認証してから、SAS を生成します。A lightweight service authenticates the client as needed and then generates a SAS. クライアントは、SAS を受信すると、SAS で定義されたアクセス許可と SAS で許可された期間で、ストレージ アカウントのリソースに直接アクセスできるようになります。Once the client receives the SAS, they can access storage account resources directly with the permissions defined by the SAS and for the interval allowed by the SAS. SAS によって、すべてのデータをフロントエンド プロキシ サービス経由でルーティングする必要性が減少します。The SAS mitigates the need for routing all data through the front-end proxy service.

    シナリオ図: SAS プロバイダー サービス

多くの実際のサービスでは、これら 2 つのアプローチを組み合わせて使用している場合があります。Many real-world services may use a hybrid of these two approaches. たとえば、一部のデータはフロントエンド プロキシで処理して検証し、その他のデータは SAS を使用して直接保存または読み取ります。For example, some data might be processed and validated via the front-end proxy, while other data is saved and/or read directly using SAS.

また、特定のシナリオにおけるコピー操作でソース オブジェクトへのアクセスを承認するには、SAS を使用する必要があります。Additionally, you will need to use a SAS to authorize access to the source object in a copy operation in certain scenarios:

  • BLOB を別のストレージ アカウント内にある他の BLOB にコピーする場合、コピー元 BLOB へのアクセスの承認には SAS を使用する必要があります。When you copy a blob to another blob that resides in a different storage account, you must use a SAS to authorize access to the source blob. コピー先 BLOB へのアクセスの承認にも、任意で SAS を使用できます。You can optionally use a SAS to authorize access to the destination blob as well.
  • ファイルを別のストレージ アカウント内にある他のファイルにコピーする場合、コピー元ファイルへのアクセスの承認には SAS を使用する必要があります。When you copy a file to another file that resides in a different storage account, you must use a SAS to authorize access to the source file. コピー先 BLOB へのアクセスの承認にも、任意で SAS を使用できます。コピー先ファイルへのアクセスの承認にも、任意で SAS を使用できます。You can optionally use a SAS to authorize access to the destination file as well.
  • BLOB をファイルにコピーしたり、ファイルを BLOB にコピーしたりする場合、同じストレージ アカウント内にコピー先とコピー元のオブジェクトがある場合でも、SAS を使用してソース オブジェクトへのアクセスを承認する必要があります。When you copy a blob to a file, or a file to a blob, you must use a SAS to authorize access to the source object, even if the source and destination objects reside within the same storage account.

共有アクセス署名の種類Types of shared access signatures

次の 2 種類の共有アクセス署名を作成できます。You can create two types of shared access signatures:

  • サービス SAS。Service SAS. サービス SAS は、1 つのストレージ サービス (BLOB、Queue、Table、または File サービスのいずれか) のリソースへのアクセスを委任します。The service SAS delegates access to a resource in just one of the storage services: the Blob, Queue, Table, or File service. サービス SAS トークンの作成の詳細については、サービス SAS の作成 に関するページおよび サービス SAS の例 に関するページを参照してください。See Constructing a Service SAS and Service SAS Examples for in-depth information about constructing the service SAS token.
  • アカウント SAS。Account SAS. アカウント SAS では、1 つ以上のストレージ サービスのリソースへのアクセスを委任できます。The account SAS delegates access to resources in one or more of the storage services. サービス SAS を使用して実行できるすべての操作は、アカウント SAS でも実行できます。All of the operations available via a service SAS are also available via an account SAS. アカウント SAS では、Get/Set Service PropertiesGet Service Statsなど、特定のサービスに適用される操作へのアクセスも委任できます。サービス SAS で許可されていない BLOB コンテナー、テーブル、キューおよびファイル共有の読み取り、書き込みおよび削除操作へのアクセスも委任できます。Additionally, with the account SAS, you can delegate access to operations that apply to a given service, such as Get/Set Service Properties and Get Service Stats. You can also delegate access to read, write, and delete operations on blob containers, tables, queues, and file shares that are not permitted with a service SAS. アカウント SAS トークンの作成の詳細については、「アカウント SAS の作成」をご覧ください。See Constructing an Account SAS for in-depth information about constructing the account SAS token.

Shared Access Signature の機能How a shared access signature works

Shared Access Signature とは、特殊なクエリ パラメーターのセットを含むトークンを含む、1 つ以上のストレージ リソースをポイントする署名済み URI です。A shared access signature is a signed URI that points to one or more storage resources and includes a token that contains a special set of query parameters. このトークンは、リソースへのクライアントのアクセス方法を示します。The token indicates how the resources may be accessed by the client. このクエリ パラメーターの 1 つである署名は、SAS パラメーターで作成されており、アカウント キーで署名されています。One of the query parameters, the signature, is constructed from the SAS parameters and signed with the account key. この署名は、ストレージ リソースへのアクセスを承認するために、Azure Storage によって使用されます。This signature is used by Azure Storage to authorize access to the storage resource.

たとえば、リソース URI と そのSAS トークンを示す SAS URI の例は以下のようになります。Here's an example of a SAS URI, showing the resource URI and the SAS token:

SAS URI のコンポーネント

SAS トークンは、クライアント側で生成される文字列です (コードの例については SAS の例のセクションをご覧ください)。The SAS token is a string you generate on the client side (see the SAS examples section for code examples). たとえば、ストレージ クライアント ライブラリによって生成された SAS トークンは、Azure Storage によって追跡されません。A SAS token you generate with the storage client library, for example, is not tracked by Azure Storage in any way. クライアント側では、数に制限なく SAS トークンを作成できます。You can create an unlimited number of SAS tokens on the client side.

クライアントが要求の一部として Azure Storage に SAS URI を提供するときに、サービスでは、SAS パラメーターと、要求の認証に対して有効であることを確認する署名が確認されます。When a client provides a SAS URI to Azure Storage as part of a request, the service checks the SAS parameters and signature to verify that it is valid for authenticating the request. サービスによって署名が有効であることが確認されると、要求が承認されます。If the service verifies that the signature is valid, then the request is authorized. それ以外の場合、要求はエラー コード 403 (Forbidden) で拒否されます。Otherwise, the request is declined with error code 403 (Forbidden).

Shared Access Signature パラメーターShared access signature parameters

アカウント SAS とサービス SAS のトークンには共通のパラメーターがいくつかあります。また別のパラメーターをいくつか取ります。The account SAS and service SAS tokens include some common parameters, and also take a few parameters that are different.

アカウント SAS とサービス SAS のトークンに共通するパラメーターParameters common to account SAS and service SAS tokens

  • API のバージョン。 要求の実行に使用するストレージ サービスのバージョンを指定する省略可能なパラメーターです。Api version An optional parameter that specifies the storage service version to use to execute the request.
  • サービスのバージョン。 要求の承認に使用するストレージ サービスのバージョンを指定する必須パラメーターです。Service version A required parameter that specifies the storage service version to use to authorize the request.
  • 開始時刻。Start time. この時刻に SAS が有効になります。This is the time at which the SAS becomes valid. Shared Access Signature の開始時刻は省略できます。The start time for a shared access signature is optional. 開始時刻を省略した場合に、SAS はすぐに有効になります。If a start time is omitted, the SAS is effective immediately. 開始時刻は、1994-11-05T13:15:30Z など、特別な UTC 指定子 ("Z") を使用して、UTC (世界協定時刻) で表す必要があります。The start time must be expressed in UTC (Coordinated Universal Time), with a special UTC designator ("Z"), for example 1994-11-05T13:15:30Z.
  • 有効期限。Expiry time. この時刻の後、SAS が有効ではなくなります。This is the time after which the SAS is no longer valid. ベスト プラクティスでは、SAS の有効期限を指定するか、保存されているアクセス ポリシーに SAS を関連付けることを推奨しています。Best practices recommend that you either specify an expiry time for a SAS, or associate it with a stored access policy. 終了時刻は、1994-11-05T13:15:30Z など、特別な UTC 指定子 ("Z") を使用して、UTC (世界協定時刻) で表す必要があります (下記を参照)。The expiry time must be expressed in UTC (Coordinated Universal Time), with a special UTC designator ("Z"), for example 1994-11-05T13:15:30Z (see more below).
  • アクセス許可。Permissions. SAS に指定されたアクセス許可は、クライアントが SAS を使用して、ストレージ リソースに対して実行できる操作を示します。The permissions specified on the SAS indicate what operations the client can perform against the storage resource using the SAS. 使用可能なアクセス許可は、アカウント SAS とサービス SAS で異なります。Available permissions differ for an account SAS and a service SAS.
  • IP。IP. 要求の送信元である Azure 外部の IP アドレスまたは IP アドレスの範囲を指定する省略可能なパラメーター (Express Route については、「 ルーティング セッション構成の状態 」を参照してください)。An optional parameter that specifies an IP address or a range of IP addresses outside of Azure (see the section Routing session configuration state for Express Route) from which to accept requests.
  • プロトコル。Protocol. 要求に許可されているプロトコルを指定する省略可能なパラメーターです。An optional parameter that specifies the protocol permitted for a request. 指定できる値は、既定値の HTTPS と HTTP (https,http) か、HTTPS のみ (https) です。Possible values are both HTTPS and HTTP (https,http), which is the default value, or HTTPS only (https). HTTP のみの値は許可されていないことに注意してください。Note that HTTP only is not a permitted value.
  • 署名。Signature. 署名は、トークンの一部として指定されたその他のパラメーターから構成され、その後に暗号化されます。The signature is constructed from the other parameters specified as part token and then encrypted. 署名は、指定されたストレージ リソースへのアクセスを承認するために使用されます。The signature is used to authorize access to the specified storage resources.

サービス SAS トークンのパラメーターParameters for a service SAS token

  • ストレージ リソース。Storage resource. サービス SAS を使用してアクセスを委任できるストレージ リソースには次があります。Storage resources for which you can delegate access with a service SAS include:
    • コンテナーと BLOBContainers and blobs
    • ファイル共有とファイルFile shares and files
    • キューQueues
    • テーブルとテーブル エンティティの範囲Tables and ranges of table entities.

アカウント SAS トークンのパラメーターParameters for an account SAS token

  • 単一または複数のサービス。Service or services. アカウント SAS では、1 つ以上のストレージ サービスにアクセスを委任できます。An account SAS can delegate access to one or more of the storage services. たとえば、BLOB およびファイル サービスにアクセスを委任するアカウント SAS を作成できます。For example, you can create an account SAS that delegates access to the Blob and File service. または、(BLOB、キュー、テーブル、およびファイルの) 4 つのすべてのサービスにアクセスを委任する SAS を作成できます。Or you can create a SAS that delegates access to all four services (Blob, Queue, Table, and File).
  • ストレージ リソースの種類。Storage resource types. アカウント SAS は、特定のリソースではなく、ストレージ リソースの 1 つ以上のクラスに適用されます。An account SAS applies to one or more classes of storage resources, rather than a specific resource. アカウント SAS を作成して、次へのアクセスを委任できます。You can create an account SAS to delegate access to:
    • ストレージ アカウントのリソースを呼び出すサービスレベル API。Service-level APIs, which are called against the storage account resource. たとえば、Get/Set Service PropertiesGet Service StatsList Containers/Queues/Tables/Shares です。Examples include Get/Set Service Properties, Get Service Stats, and List Containers/Queues/Tables/Shares.
    • BLOB コンテナー、キュー、テーブル、およびファイル共有の各サービスのコンテナー オブジェクトを呼び出すコンテナーレベルの API。Container-level APIs, which are called against the container objects for each service: blob containers, queues, tables, and file shares. たとえば、Create/Delete ContainerCreate/Delete QueueCreate/Delete TableCreate/Delete ShareList Blobs/Files and Directories です。Examples include Create/Delete Container, Create/Delete Queue, Create/Delete Table, Create/Delete Share, and List Blobs/Files and Directories.
    • BLOB、キュー メッセージ、テーブル エンティティ、およびファイルを呼び出すオブジェクトレベルの API。Object-level APIs, which are called against blobs, queue messages, table entities, and files. たとえば、Put BlobQuery EntityGet MessagesCreate File です。For example, Put Blob, Query Entity, Get Messages, and Create File.

SAS の URI の例Examples of SAS URIs

サービス SAS URI の例Service SAS URI example

BLOB に読み書きアクセス許可を付与するサービス SAS URI の例を、次に示します。Here is an example of a service SAS URI that provides read and write permissions to a blob. 表では、SAS での機能がわかりやすいように、URI の部分ごとに説明しています。The table breaks down each part of the URI to understand how it contributes to the SAS:

https://myaccount.blob.core.windows.net/sascontainer/sasblob.txt?sv=2015-04-05&st=2015-04-29T22%3A18%3A26Z&se=2015-04-30T02%3A23%3A26Z&sr=b&sp=rw&sip=168.1.5.60-168.1.5.70&spr=https&sig=Z%2FRHIX5Xcg0Mq2rqI3OlWTjEg2tYkboXr1P9ZUXDtkk%3D
NameName SAS の部分SAS portion 説明Description
Blob URIBlob URI https://myaccount.blob.core.windows.net/sascontainer/sasblob.txt BLOB のアドレス。The address of the blob. HTTPS の使用を強くお勧めします。Note that using HTTPS is highly recommended.
ストレージ サービスのバージョンStorage services version sv=2015-04-05 ストレージ サービス バージョン 2012-02-12 以降では、このパラメーターは、使用するバージョンを示します。For storage services version 2012-02-12 and later, this parameter indicates the version to use.
開始時刻Start time st=2015-04-29T22%3A18%3A26Z UTC 時間で指定。Specified in UTC time. SAS をすぐに有効にする場合は、開始時刻を省略します。If you want the SAS to be valid immediately, omit the start time.
有効期限Expiry time se=2015-04-30T02%3A23%3A26Z UTC 時間で指定。Specified in UTC time.
リソースResource sr=b リソースは BLOB です。The resource is a blob.
アクセス許可Permissions sp=rw SAS で付与されるアクセス許可には、読み取り (r) および書き込み (w) が含まれます。The permissions granted by the SAS include Read (r) and Write (w).
IP 範囲IP range sip=168.1.5.60-168.1.5.70 要求が受け入れられる IP アドレスの範囲です。The range of IP addresses from which a request will be accepted.
プロトコルProtocol spr=https HTTPS を使用する要求のみが許可されます。Only requests using HTTPS are permitted.
署名Signature sig=Z%2FRHIX5Xcg0Mq2rqI3OlWTjEg2tYkboXr1P9ZUXDtkk%3D BLOB へのアクセスを承認するために使用します。Used to authorize access to the blob. 署名は、SHA256 アルゴリズムを使用して署名対象文字列とキーを計算した後に、Base 64 エンコードを使用してエンコードした HMAC 値です。The signature is an HMAC computed over a string-to-sign and key using the SHA256 algorithm, and then encoded using Base64 encoding.

アカウント SAS URI の例Account SAS URI example

トークンで同じ共通のパラメーターを使用するアカウント SAS の例を次に示します。Here is an example of an account SAS that uses the same common parameters on the token. これらのパラメーターは上で説明済みのため、ここでは説明はしません。Since these parameters are described above, they are not described here. アカウント SAS に固有のパラメーターのみを次の表に示します。Only the parameters that are specific to account SAS are described in the table below.

https://myaccount.blob.core.windows.net/?restype=service&comp=properties&sv=2015-04-05&ss=bf&srt=s&st=2015-04-29T22%3A18%3A26Z&se=2015-04-30T02%3A23%3A26Z&sr=b&sp=rw&sip=168.1.5.60-168.1.5.70&spr=https&sig=F%6GRVAZ5Cdj2Pw4tgU7IlSTkWgn7bUkkAg8P6HESXwmf%4B
NameName SAS の部分SAS portion 説明Description
リソース URIResource URI https://myaccount.blob.core.windows.net/?restype=service&comp=properties Blob service エンドポイントと、(GET を使用して呼び出された場合は) サービスのプロパティを取得するパラメーターまたは (SET を使用して呼び出された場合は) サービスのプロパティを設定するパラメーターです。The Blob service endpoint, with parameters for getting service properties (when called with GET) or setting service properties (when called with SET).
サービスServices ss=bf SAS は BLOB およびファイル サービスに適用されます。The SAS applies to the Blob and File services
リソースの種類Resource types srt=s SAS は、サービスレベルの操作に適用されます。The SAS applies to service-level operations.
アクセス許可Permissions sp=rw この許可は、読み書きの操作へのアクセスを付与します。The permissions grant access to read and write operations.

許可はサービス レベルに制限されているため、この SAS を使用してアクセスできる操作は、Get Blob Service Properties (読み取り) および Set Blob Service Properties (書き込み) になります。Given that permissions are restricted to the service level, accessible operations with this SAS are Get Blob Service Properties (read) and Set Blob Service Properties (write). ただし、別のリソース URI に同じ SAS トークンを使用し、 Get BLOB Service Stats (読み取り) へのアクセスを委任することもできます。However, with a different resource URI, the same SAS token could also be used to delegate access to Get Blob Service Stats (read).

保存されているアクセス ポリシーを使用した SAS の制御Controlling a SAS with a stored access policy

Shared Access Signature の形式は、次の 2 つのいずれかです。A shared access signature can take one of two forms:

  • アドホック SAS: アドホック SAS を作成すると、開始時刻、有効期限、および SAS へのアクセス許可がすべて、SAS URI で指定されます (または、開始時刻を省略した場合は、暗黙で指定されます)。Ad hoc SAS: When you create an ad hoc SAS, the start time, expiry time, and permissions for the SAS are all specified in the SAS URI (or implied, in the case where start time is omitted). この種類の SAS はアカウント SAS またはサービス SAS として作成できます。This type of SAS can be created as an account SAS or a service SAS.
  • 保存されているアクセス ポリシーのある SAS: 保存されているアクセス ポリシーは、リソース コンテナー (BLOB コンテナー、テーブル、キュー、ファイル共有) で定義されており、これを使用して、1 つ以上の Shared Access Signature のコンテナーを管理できます。SAS with stored access policy: A stored access policy is defined on a resource container--a blob container, table, queue, or file share--and can be used to manage constraints for one or more shared access signatures. 保存されているアクセス ポリシーに SAS を関連付けると、SAS は、保存されているアクセス ポリシーに定義されている制約 (開始時刻、有効期限、およびアクセス許可) を継承します。When you associate a SAS with a stored access policy, the SAS inherits the constraints--the start time, expiry time, and permissions--defined for the stored access policy.

注意

現時点では、アカウント SAS はアドホック SAS である必要があります。Currently, an account SAS must be an ad hoc SAS. 保存されているアクセス ポリシーは、まだアカウント SAS では使用できません。Stored access policies are not yet supported for account SAS.

1 つの重要なシナリオ、失効では、この 2 つの形式の相違点が重要です。The difference between the two forms is important for one key scenario: revocation. SAS URI は URL であるため、最初に作成したユーザーに関係なく、SAS を取得した誰でもそれを使用できます。Because a SAS URI is a URL, anyone that obtains the SAS can use it, regardless of who originally created it. SAS が一般ユーザーに発行された場合は、世界中のだれでも使用できます。If a SAS is published publicly, it can be used by anyone in the world. SAS では、次の 4 つのいずれかが発生するまで、SAS を所有するすべてのユーザーにリソースへのアクセス権が付与されます。A SAS grants access to resources to anyone possessing it until one of four things happens:

  1. SAS に指定された有効期限に達した。The expiry time specified on the SAS is reached.
  2. 保存されているアクセス ポリシーに指定された、SAS が参照する有効期限に達した (保存されているアクセス ポリシーが参照される場合、かつ有効期限が指定されている場合)。The expiry time specified on the stored access policy referenced by the SAS is reached (if a stored access policy is referenced, and if it specifies an expiry time). これは、期間が経過したため、または保存されているアクセス ポリシーの有効期限を過去の日時に変更したために発生します。このような有効期限の変更は、SAS を失効させる方法の 1 つです。This can occur either because the interval elapses, or because you've modified the stored access policy with an expiry time in the past, which is one way to revoke the SAS.
  3. SAS の参照先である保存されているアクセス ポリシーが削除されている。これは、SAS を失効させる、もう 1 つの方法です。The stored access policy referenced by the SAS is deleted, which is another way to revoke the SAS. 保存されているアクセス ポリシーを、完全に同じ名前で再作成すると、そのアクセス ポリシーに関連付けられたアクセス許可に従って、すべての既存の SAS トークンが再び有効になります (SAS の有効期限が過ぎていないことが前提です)。Note that if you recreate the stored access policy with exactly the same name, all existing SAS tokens will again be valid according to the permissions associated with that stored access policy (assuming that the expiry time on the SAS has not passed). SAS を失効させるつもりで、将来の時間を有効期限に指定してアクセス ポリシーを再作成する場合は必ず、異なる名前を使用してください。If you are intending to revoke the SAS, be sure to use a different name if you recreate the access policy with an expiry time in the future.
  4. SAS の作成に使用したアカウント キーが再度生成された。The account key that was used to create the SAS is regenerated. アカウント キーを再生成すると、そのキーを使用するすべてのアプリケーション コンポーネントが、別の有効なアカウント キー、または新しく再生成されたアカウント キーを使用するよう更新されるまで、承認に失敗します。Regenerating an account key will cause all application components using that key to fail to authorize until they're updated to use either the other valid account key or the newly regenerated account key.

重要

Shared Access Signature URI は、署名の作成に使用されたアカウント キーと、保存済みのアクセス ポリシー (存在する場合) に関連付けられます。A shared access signature URI is associated with the account key used to create the signature, and the associated stored access policy (if any). 保存済みのアクセス ポリシーが指定されていない場合、Shared Access Signature を取り消すにはアカウント キーを変更する以外に方法はありません。If no stored access policy is specified, the only way to revoke a shared access signature is to change the account key.

SAS を使用するクライアント アプリケーションからの認証Authenticating from a client application with a SAS

SAS を所有しているクライアントは、アカウント キーのないストレージ アカウントに対する要求の承認に SAS を使用できます。A client who is in possession of a SAS can use the SAS to authorize a request against a storage account for which they do not possess the account keys. SAS は、接続文字列に含めるか、適切なコンストラクターまたはメソッドから直接使用できます。A SAS can be included in a connection string, or used directly from the appropriate constructor or method.

接続文字列で SAS を使用するUsing a SAS in a connection string

ストレージ アカウント内のリソースへのアクセスを許可する Shared Access Signature (SAS) の URL を所有している場合は、その SAS を接続文字列の中で使用できます。If you possess a shared access signature (SAS) URL that grants you access to resources in a storage account, you can use the SAS in a connection string. 要求を認証するために必要な情報は SAS に保持されているため、リソースにアクセスするために必要な資格情報、サービス エンドポイント、プロトコルが、SAS を含んだ接続文字列によって得られます。Because the SAS contains the information required to authenticate the request, a connection string with a SAS provides the protocol, the service endpoint, and the necessary credentials to access the resource.

共有アクセス署名を含む接続文字列を作成するには、文字列を次の形式で指定します。To create a connection string that includes a shared access signature, specify the string in the following format:

BlobEndpoint=myBlobEndpoint;
QueueEndpoint=myQueueEndpoint;
TableEndpoint=myTableEndpoint;
FileEndpoint=myFileEndpoint;
SharedAccessSignature=sasToken

サービス エンドポイントはいずれも省略可能ですが、少なくとも 1 つは、接続文字列に存在する必要があります。Each service endpoint is optional, although the connection string must contain at least one.

注意

ベスト プラクティスとして、SAS は HTTPS と組み合わせて使用することをお勧めします。Using HTTPS with a SAS is recommended as a best practice.

構成ファイル内で接続文字列に SAS を指定する場合、URL に含まれる特殊文字のエンコードが必要になる場合があります。If you are specifying a SAS in a connection string in a configuration file, you may need to encode special characters in the URL.

サービス SAS の例Service SAS example

Blob Storage のサービス SAS を含んだ接続文字列の例を次に示します。Here's an example of a connection string that includes a service SAS for Blob storage:

BlobEndpoint=https://storagesample.blob.core.windows.net;
SharedAccessSignature=sv=2015-04-05&sr=b&si=tutorial-policy-635959936145100803&sig=9aCzs76n0E7y5BpEi2GvsSv433BZa22leDOZXX%2BXXIU%3D

そしてこちらが、同じ接続文字列に特殊文字のエンコードを適用した例です。And here's an example of the same connection string with encoding of special characters:

BlobEndpoint=https://storagesample.blob.core.windows.net;
SharedAccessSignature=sv=2015-04-05&sr=b&si=tutorial-policy-635959936145100803&sig=9aCzs76n0E7y5BpEi2GvsSv433BZa22leDOZXX%2BXXIU%3D

アカウント SAS の例Account SAS example

Blob Storage と File Storage に使用されるアカウントの SAS を含んだ接続文字列の例を次に示します。Here's an example of a connection string that includes an account SAS for Blob and File storage. 両方のサービスのエンドポイントが指定されていることに注意してください。Note that endpoints for both services are specified:

BlobEndpoint=https://storagesample.blob.core.windows.net;
FileEndpoint=https://storagesample.file.core.windows.net;
SharedAccessSignature=sv=2015-07-08&sig=iCvQmdZngZNW%2F4vw43j6%2BVz6fndHF5LI639QJba4r8o%3D&spr=https&st=2016-04-12T03%3A24%3A31Z&se=2016-04-13T03%3A29%3A31Z&srt=s&ss=bf&sp=rwl

そしてこちらが、同じ接続文字列に URL エンコードを適用した例です。And here's an example of the same connection string with URL encoding:

BlobEndpoint=https://storagesample.blob.core.windows.net;
FileEndpoint=https://storagesample.file.core.windows.net;
SharedAccessSignature=sv=2015-07-08&sig=iCvQmdZngZNW%2F4vw43j6%2BVz6fndHF5LI639QJba4r8o%3D&spr=https&st=2016-04-12T03%3A24%3A31Z&se=2016-04-13T03%3A29%3A31Z&srt=s&ss=bf&sp=rwl

コンストラクターまたはメソッドで SAS を使用するUsing a SAS in a constructor or method

複数の Azure Storage クライアント ライブラリ コンストラクターとメソッドのオーバー ロードでは SAS パラメーターが提供されるため、SAS でサービスへの要求を承認できるようになります。Several Azure Storage client library constructors and method overloads offer a SAS parameter, so that you can authorize a request to the service with a SAS.

たとえば、ここでは SAS URI を使用して、ブロック BLOB への参照を作成します。For example, here a SAS URI is used to create a reference to a block blob. SAS は、要求に必要な資格情報のみを提供します。The SAS provides the only credentials needed for the request. 書き込み操作では、ブロック BLOB の参照が使用されます。The block blob reference is then used for a write operation:

string sasUri = "https://storagesample.blob.core.windows.net/sample-container/" +
    "sampleBlob.txt?sv=2015-07-08&sr=b&sig=39Up9JzHkxhUIhFEjEH9594DJxe7w6cIRCg0V6lCGSo%3D" +
    "&se=2016-10-18T21%3A51%3A37Z&sp=rcw";

CloudBlockBlob blob = new CloudBlockBlob(new Uri(sasUri));

// Create operation: Upload a blob with the specified name to the container.
// If the blob does not exist, it will be created. If it does exist, it will be overwritten.
try
{
    MemoryStream msWrite = new MemoryStream(Encoding.UTF8.GetBytes(blobContent));
    msWrite.Position = 0;
    using (msWrite)
    {
        await blob.UploadFromStreamAsync(msWrite);
    }

    Console.WriteLine("Create operation succeeded for SAS {0}", sasUri);
    Console.WriteLine();
}
catch (StorageException e)
{
    if (e.RequestInformation.HttpStatusCode == 403)
    {
        Console.WriteLine("Create operation failed for SAS {0}", sasUri);
        Console.WriteLine("Additional error information: " + e.Message);
        Console.WriteLine();
    }
    else
    {
        Console.WriteLine(e.Message);
        Console.ReadLine();
        throw;
    }
}

SAS を使用する際のベスト プラクティスBest practices when using SAS

アプリケーションで Shared Access Signature を使用する場合は、次の 2 つの潜在的なリスクに注意する必要があります。When you use shared access signatures in your applications, you need to be aware of two potential risks:

  • SAS が漏えいすると、取得した人はだれでも使用できるため、ストレージ アカウントの安全性が損なわれるおそれがあります。If a SAS is leaked, it can be used by anyone who obtains it, which can potentially compromise your storage account.
  • クライアント アプリケーションに提供された SAS が期限切れになり、アプリケーションがサービスから新しい SAS を取得できない場合は、アプリケーションの機能が損なわれる可能性があります。If a SAS provided to a client application expires and the application is unable to retrieve a new SAS from your service, then the application's functionality may be hindered.

Shared Access Signature の使用に関する次の推奨事項に従うと、これらのリスクの軽減に役立ちます。The following recommendations for using shared access signatures can help mitigate these risks:

  1. 常に HTTPS を使用して SAS を作成または配布します。Always use HTTPS to create or distribute a SAS. SAS が HTTP で渡され、傍受された場合、中間者攻撃を実行している攻撃者は、SAS を読み取って、宛先のユーザーと同様に使用することができます。このため、機密データの安全性が損なわれたり、悪意のあるユーザーによるデータ破損が発生したりする可能性があります。If a SAS is passed over HTTP and intercepted, an attacker performing a man-in-the-middle attack is able to read the SAS and then use it just as the intended user could have, potentially compromising sensitive data or allowing for data corruption by the malicious user.
  2. 可能な場合は、保存されているアクセス ポリシーを参照します。Reference stored access policies where possible. 保存されているアクセス ポリシーを使用すると、ストレージ アカウント キーを再生成せずに、アクセス許可を失効させることが可能になります。Stored access policies give you the option to revoke permissions without having to regenerate the storage account keys. これらの有効期限をきわめて遠い将来 (または無期限) に設定し、それがさらに将来へ移動するように、定期的に更新されるようにします。Set the expiration on these very far in the future (or infinite) and make sure it's regularly updated to move it farther into the future.
  3. アドホック SAS には、短期間の有効期限を使用します。Use near-term expiration times on an ad hoc SAS. こうすると、SAS が侵害された場合でも、有効である期間はほんの短い期間になります。In this way, even if a SAS is compromised, it's valid only for a short time. この方法は、保存されているアクセス ポリシーを参照できない場合に特に重要です。This practice is especially important if you cannot reference a stored access policy. また、短期間の有効期限は、BLOB にアップロード可能な時間が制限されるので、BLOB に書き込むことのできるデータの量も制限します。Near-term expiration times also limit the amount of data that can be written to a blob by limiting the time available to upload to it.
  4. 必要に応じて、クライアントに SAS を自動更新させます。Have clients automatically renew the SAS if necessary. クライアントは、SAS を提供するサービスが利用不可である場合に再試行する時間を考慮して、有効期限までに余裕を持って SAS を更新する必要があります。Clients should renew the SAS well before the expiration, in order to allow time for retries if the service providing the SAS is unavailable. 使用する SAS が、すぐに実行する短期間の少数の操作用であり、操作が、指定された有効期限の前に完了する予定である場合は、SAS が更新されないため、この方法は必要ありません。If your SAS is meant to be used for a small number of immediate, short-lived operations that are expected to be completed within the expiration period, then this may be unnecessary as the SAS is not expected to be renewed. ただし、クライアントが SAS 経由で日常的に要求を実行する場合は、有効期限に注意が必要になる可能性があります。However, if you have client that is routinely making requests via SAS, then the possibility of expiration comes into play. 重要な考慮事項は、SAS の有効期限を短くする必要性 (前述のように) と、更新の完了前に SAS の期限が切れることによる中断を避けるためにクライアントが早めに更新を要求する必要性とのバランスです。The key consideration is to balance the need for the SAS to be short-lived (as previously stated) with the need to ensure that the client is requesting renewal early enough (to avoid disruption due to the SAS expiring prior to successful renewal).
  5. SAS の開始時刻に注意します。Be careful with SAS start time. SAS の開始時刻を [現在] に設定すると、クロック スキュー (さまざまなコンピューター間での現在時刻の差) により、最初の数分間にエラーが断続的に表示される場合があります。If you set the start time for a SAS to now, then due to clock skew (differences in current time according to different machines), failures may be observed intermittently for the first few minutes. 一般に、開始時刻は 15 分以上前になるように設定します。In general, set the start time to be at least 15 minutes in the past. または、まったく設定せず、すべての場合ですぐに有効になるようにします。Or, don't set it at all, which will make it valid immediately in all cases. 同じことが、一般的には有効期限にも適用されます。どの要求でも、前後 15 分以内のクロック スキューが発生する可能性があることを憶えておいてください。The same generally applies to expiry time as well--remember that you may observe up to 15 minutes of clock skew in either direction on any request. 2012-02-12 より前の REST バージョンを使用するクライアントの場合、保存されているアクセス ポリシーを参照しない SAS の最長期間は 1 時間であり、それより長い期間を指定するポリシーはすべて失敗します。For clients using a REST version prior to 2012-02-12, the maximum duration for a SAS that does not reference a stored access policy is 1 hour, and any policies specifying longer term than that will fail.
  6. アクセス先のリソースを具体的に指定します。Be specific with the resource to be accessed. セキュリティのベスト プラクティスは、必要最小限の権限をユーザーに付与することです。A security best practice is to provide a user with the minimum required privileges. ユーザーに必要なのは、1 つのエンティティへの読み取りアクセスだけの場合は、すべてのエンティティへの読み取り/書き込み/削除アクセスではなく、その 1 つのエンティティへの読み取りアクセスだけをユーザーに許可します。If a user only needs read access to a single entity, then grant them read access to that single entity, and not read/write/delete access to all entities. これは、攻撃者の管理下での SAS の機能を低下させるため、SAS が侵害された場合に損害を抑えるためにも役立ちます。This also helps lessen the damage if a SAS is compromised because the SAS has less power in the hands of an attacker.
  7. アカウントは、SAS によるものも含め、すべての使用について課金されます。Understand that your account will be billed for any usage, including that done with SAS. BLOB への書き込みアクセスを許可した場合は、ユーザーが 200 GB の BLOB をアップロードする可能性があります。If you provide write access to a blob, a user may choose to upload a 200GB blob. ユーザーに読み取りアクセスも許可すると、この BLOB を 10 回ダウンロードする可能性があり、2 TB (テラバイト) の送信料金が発生します。If you've given them read access as well, they may choose to download it 10 times, incurring 2 TB in egress costs for you. したがって、悪意のあるユーザーによるリスクが軽減されるように、制限付きアクセス許可を付与してください。Again, provide limited permissions to help mitigate the potential actions of malicious users. このような脅威が軽減されるように、短期間の SAS を使用してください (ただし、終了時刻のクロック スキューには注意してください)。Use short-lived SAS to reduce this threat (but be mindful of clock skew on the end time).
  8. SAS を使用して書き込まれたデータを検証します。Validate data written using SAS. クライアント アプリケーションがストレージ アカウントにデータを書き込む場合は、そのデータに問題がある可能性に注意してください。When a client application writes data to your storage account, keep in mind that there can be problems with that data. データが検証後または認証後に使用可能になることをアプリケーションが要求する場合は、書き込まれたデータをアプリケーションが使用する前に、この検証を実行する必要があります。If your application requires that data be validated or authorized before it is ready to use, you should perform this validation after the data is written and before it is used by your application. これを実行すると、ユーザーが SAS を正当に入手している場合でも、漏えいした SAS を利用している場合でも、破損データまたは悪意によるデータの書き込みからアカウントが保護されます。This practice also protects against corrupt or malicious data being written to your account, either by a user who properly acquired the SAS, or by a user exploiting a leaked SAS.
  9. 場合によっては SAS を使用しないようにします。Don't always use SAS. ストレージ アカウントに対する特定の操作に関連するリスクが、SAS の利点より重大である場合もあります。Sometimes the risks associated with a particular operation against your storage account outweigh the benefits of SAS. このような操作については、ビジネス ルールの検証、認証、および監査を実行した後にストレージ アカウントに書き込む中間層サービスを作成します。For such operations, create a middle-tier service that writes to your storage account after performing business rule validation, authentication, and auditing. また、別の方法でアクセスを管理した方が容易である場合もあります。Also, sometimes it's simpler to manage access in other ways. たとえば、コンテナー内のすべての BLOB が一般ユーザーに読み取り可能である場合は、すべてのクライアントにアクセス用の SAS を提供するのではなく、コンテナーをパブリックにします。For example, if you want to make all blobs in a container publically readable, you can make the container Public, rather than providing a SAS to every client for access.
  10. Storage Analytics を使用してアプリケーションを管理します。Use Storage Analytics to monitor your application. SAS プロバイダー サービスが中断したり、保存されているアクセス ポリシーを不注意で削除したりしたために発生する認証失敗の急増を、ログやメトリックを使用して監視できます。You can use logging and metrics to observe any spike in authentication failures due to an outage in your SAS provider service or to the inadvertent removal of a stored access policy. 詳細については、 Microsoft Azure Storage チームのブログ を参照してください。See the Azure Storage Team Blog for additional information.

SAS の例SAS examples

次に、アカウント SAS とサービス SAS の 2 種類の Shared Access Signature の例をいくつか示します。Below are some examples of both types of shared access signatures, account SAS and service SAS.

これらの C# の例を実行するには、プロジェクト内の次の NuGet パッケージを参照する必要があります。To run these C# examples, you need to reference the following NuGet packages in your project:

SAS の作成とテストの例については、Azure のコード サンプルを参照してください。For additional examples that show how to create and test a SAS, see Azure Code Samples for Storage.

例: アカウント SAS を作成して使用するExample: Create and use an account SAS

次のコード例では、BLOB およびファイル サービスに有効なアカウント SAS を作成します。これでは、クライアントに、サービスレベルの API にアクセスするための、読み取り、書き込み、および一覧表示のアクセス許可を付与します。The following code example creates an account SAS that is valid for the Blob and File services, and gives the client permissions read, write, and list permissions to access service-level APIs. アカウント SAS では、プロトコルを HTTPS に制限しているため、要求は HTTPS で行う必要があります。The account SAS restricts the protocol to HTTPS, so the request must be made with HTTPS.

static string GetAccountSASToken()
{
    // To create the account SAS, you need to use your shared key credentials. Modify for your account.
    const string ConnectionString = "DefaultEndpointsProtocol=https;AccountName=account-name;AccountKey=account-key";
    CloudStorageAccount storageAccount = CloudStorageAccount.Parse(ConnectionString);

    // Create a new access policy for the account.
    SharedAccessAccountPolicy policy = new SharedAccessAccountPolicy()
        {
            Permissions = SharedAccessAccountPermissions.Read | SharedAccessAccountPermissions.Write | SharedAccessAccountPermissions.List,
            Services = SharedAccessAccountServices.Blob | SharedAccessAccountServices.File,
            ResourceTypes = SharedAccessAccountResourceTypes.Service,
            SharedAccessExpiryTime = DateTime.UtcNow.AddHours(24),
            Protocols = SharedAccessProtocol.HttpsOnly
        };

    // Return the SAS token.
    return storageAccount.GetSharedAccessSignature(policy);
}

Blob service 用にサービスレベルの API にアクセスするためにアカウント SAS を使用するには、SAS を使用して BLOB クライアントを構築し、ストレージ アカウント用に BLOB ストレージ エンドポイントを構築します。To use the account SAS to access service-level APIs for the Blob service, construct a Blob client object using the SAS and the Blob storage endpoint for your storage account.

static void UseAccountSAS(string sasToken)
{
    // Create new storage credentials using the SAS token.
    StorageCredentials accountSAS = new StorageCredentials(sasToken);
    // Use these credentials and the account name to create a Blob service client.
    CloudStorageAccount accountWithSAS = new CloudStorageAccount(accountSAS, "account-name", endpointSuffix: null, useHttps: true);
    CloudBlobClient blobClientWithSAS = accountWithSAS.CreateCloudBlobClient();

    // Now set the service properties for the Blob client created with the SAS.
    blobClientWithSAS.SetServiceProperties(new ServiceProperties()
    {
        HourMetrics = new MetricsProperties()
        {
            MetricsLevel = MetricsLevel.ServiceAndApi,
            RetentionDays = 7,
            Version = "1.0"
        },
        MinuteMetrics = new MetricsProperties()
        {
            MetricsLevel = MetricsLevel.ServiceAndApi,
            RetentionDays = 7,
            Version = "1.0"
        },
        Logging = new LoggingProperties()
        {
            LoggingOperations = LoggingOperations.All,
            RetentionDays = 14,
            Version = "1.0"
        }
    });

    // The permissions granted by the account SAS also permit you to retrieve service properties.
    ServiceProperties serviceProperties = blobClientWithSAS.GetServiceProperties();
    Console.WriteLine(serviceProperties.HourMetrics.MetricsLevel);
    Console.WriteLine(serviceProperties.HourMetrics.RetentionDays);
    Console.WriteLine(serviceProperties.HourMetrics.Version);
}

例: 保存されているアクセス ポリシーを作成するExample: Create a stored access policy

次のコードでは、保存されているアクセス ポリシーをコンテナーに作成します。The following code creates a stored access policy on a container. アクセス ポリシーを使用して、コンテナーまたは blob のサービス SAS に制約を指定します。You can use the access policy to specify constraints for a service SAS on the container or its blobs.

private static async Task CreateSharedAccessPolicyAsync(CloudBlobContainer container, string policyName)
{
    // Create a new shared access policy and define its constraints.
    // The access policy provides create, write, read, list, and delete permissions.
    SharedAccessBlobPolicy sharedPolicy = new SharedAccessBlobPolicy()
    {
        // When the start time for the SAS is omitted, the start time is assumed to be the time when the storage service receives the request.
        // Omitting the start time for a SAS that is effective immediately helps to avoid clock skew.
        SharedAccessExpiryTime = DateTime.UtcNow.AddHours(24),
        Permissions = SharedAccessBlobPermissions.Read | SharedAccessBlobPermissions.List |
            SharedAccessBlobPermissions.Write | SharedAccessBlobPermissions.Create | SharedAccessBlobPermissions.Delete
    };

    // Get the container's existing permissions.
    BlobContainerPermissions permissions = await container.GetPermissionsAsync();

    // Add the new policy to the container's permissions, and set the container's permissions.
    permissions.SharedAccessPolicies.Add(policyName, sharedPolicy);
    await container.SetPermissionsAsync(permissions);
}

例: サービス SAS をコンテナーに作成するExample: Create a service SAS on a container

次のコードでは、SAS をコンテナーに作成します。The following code creates a SAS on a container. 既存の保存されているアクセス ポリシーの名前が指定されている場合、そのポリシーは、SAS に関連付けられます。If the name of an existing stored access policy is provided, that policy is associated with the SAS. 保存されているアクセス ポリシーがない場合、コードは、アドホック SAS をコンテナーに作成します。If no stored access policy is provided, then the code creates an ad-hoc SAS on the container.

private static string GetContainerSasUri(CloudBlobContainer container, string storedPolicyName = null)
{
    string sasContainerToken;

    // If no stored policy is specified, create a new access policy and define its constraints.
    if (storedPolicyName == null)
    {
        // Note that the SharedAccessBlobPolicy class is used both to define the parameters of an ad-hoc SAS, and
        // to construct a shared access policy that is saved to the container's shared access policies.
        SharedAccessBlobPolicy adHocPolicy = new SharedAccessBlobPolicy()
        {
            // When the start time for the SAS is omitted, the start time is assumed to be the time when the storage service receives the request.
            // Omitting the start time for a SAS that is effective immediately helps to avoid clock skew.
            SharedAccessExpiryTime = DateTime.UtcNow.AddHours(24),
            Permissions = SharedAccessBlobPermissions.Write | SharedAccessBlobPermissions.List
        };

        // Generate the shared access signature on the container, setting the constraints directly on the signature.
        sasContainerToken = container.GetSharedAccessSignature(adHocPolicy, null);

        Console.WriteLine("SAS for blob container (ad hoc): {0}", sasContainerToken);
        Console.WriteLine();
    }
    else
    {
        // Generate the shared access signature on the container. In this case, all of the constraints for the
        // shared access signature are specified on the stored access policy, which is provided by name.
        // It is also possible to specify some constraints on an ad-hoc SAS and others on the stored access policy.
        sasContainerToken = container.GetSharedAccessSignature(null, storedPolicyName);

        Console.WriteLine("SAS for blob container (stored access policy): {0}", sasContainerToken);
        Console.WriteLine();
    }

    // Return the URI string for the container, including the SAS token.
    return container.Uri + sasContainerToken;
}

例: サービス SAS を Blob に作成するExample: Create a service SAS on a blob

次のコードでは、 SAS を Blob に作成します。The following code creates a SAS on a blob. 既存の保存されているアクセス ポリシーの名前が指定されている場合、そのポリシーは、SAS に関連付けられます。If the name of an existing stored access policy is provided, that policy is associated with the SAS. 保存されているアクセス ポリシーがない場合、コードは、アドホック SAS を Blob に作成します。If no stored access policy is provided, then the code creates an ad-hoc SAS on the blob.

private static string GetBlobSasUri(CloudBlobContainer container, string blobName, string policyName = null)
{
    string sasBlobToken;

    // Get a reference to a blob within the container.
    // Note that the blob may not exist yet, but a SAS can still be created for it.
    CloudBlockBlob blob = container.GetBlockBlobReference(blobName);

    if (policyName == null)
    {
        // Create a new access policy and define its constraints.
        // Note that the SharedAccessBlobPolicy class is used both to define the parameters of an ad-hoc SAS, and
        // to construct a shared access policy that is saved to the container's shared access policies.
        SharedAccessBlobPolicy adHocSAS = new SharedAccessBlobPolicy()
        {
            // When the start time for the SAS is omitted, the start time is assumed to be the time when the storage service receives the request.
            // Omitting the start time for a SAS that is effective immediately helps to avoid clock skew.
            SharedAccessExpiryTime = DateTime.UtcNow.AddHours(24),
            Permissions = SharedAccessBlobPermissions.Read | SharedAccessBlobPermissions.Write | SharedAccessBlobPermissions.Create
        };

        // Generate the shared access signature on the blob, setting the constraints directly on the signature.
        sasBlobToken = blob.GetSharedAccessSignature(adHocSAS);

        Console.WriteLine("SAS for blob (ad hoc): {0}", sasBlobToken);
        Console.WriteLine();
    }
    else
    {
        // Generate the shared access signature on the blob. In this case, all of the constraints for the
        // shared access signature are specified on the container's stored access policy.
        sasBlobToken = blob.GetSharedAccessSignature(null, policyName);

        Console.WriteLine("SAS for blob (stored access policy): {0}", sasBlobToken);
        Console.WriteLine();
    }

    // Return the URI string for the container, including the SAS token.
    return blob.Uri + sasBlobToken;
}

まとめConclusion

Shared Access Signature は、アカウント キーを知らせずに、ストレージ アカウントへの制限付きアクセス許可をクライアントに付与する場合に便利です。Shared access signatures are useful for providing limited permissions to your storage account to clients that should not have the account key. したがって、Azure Storage を使用するあらゆるアプリケーションのセキュリティ モデルの重要な部分となります。As such, they are a vital part of the security model for any application using Azure Storage. ここに示すベスト プラクティスに従うと、アプリケーションのセキュリティを損なうことなく、SAS を使用して、ストレージ アカウントのリソースへのアクセスの柔軟性を高めることができます。If you follow the best practices listed here, you can use SAS to provide greater flexibility of access to resources in your storage account, without compromising the security of your application.

次の手順Next Steps