コンテナーと BLOB への匿名読み取りアクセスを管理するManage anonymous read access to containers and blobs

Azure Blob Storage のコンテナーとその BLOB に対する匿名のパブリック読み取りアクセスを有効にすることができます。You can enable anonymous, public read access to a container and its blobs in Azure Blob storage. そうすることで、アカウント キーを共有せず、Shared Access Signature (SAS) も必要とせずに、これらのリソースに対する読み取り専用のアクセスを付与できます。By doing so, you can grant read-only access to these resources without sharing your account key, and without requiring a shared access signature (SAS).

パブリック読み取りアクセスは、特定の BLOB を匿名読み取りアクセスで常に使用できるようにするシナリオに最適です。Public read access is best for scenarios where you want certain blobs to always be available for anonymous read access. より細かく制御するには、Shared Access Signature を作成できます。For more fine-grained control, you can create a shared access signature. Shared Access Signature を使用すると、特定の期間、異なるアクセス許可を使用して制限付きのアクセスを提供できます。Shared access signatures enable you to provide restricted access using different permissions, for a specific time period. Shared Access Signature の作成方法の詳細については、Azure Storage での Shared Access Signature (SAS) の使用に関するページを参照してください。For more information about creating shared access signatures, see Using shared access signatures (SAS) in Azure Storage.

コンテナーと BLOB への匿名ユーザーのアクセス許可を付与します。Grant anonymous users permissions to containers and blobs

既定では、コンテナーとコンテナー内の BLOB には、上位のストレージ アカウントの所有者のみがアクセスできます。By default, a container and any blobs within it may be accessed only by the owner of the storage account. コンテナーとその BLOB に対する読み取りアクセス許可を匿名ユーザーに付与する場合は、コンテナーのアクセス許可を設定し、パブリック アクセスを許可できます。To give anonymous users read permissions to a container and its blobs, you can set the container permissions to allow public access. パブリック アクセスが許可されたコンテナー内の BLOB は、匿名ユーザーが読み取ることができ、その際に要求の認証は不要です。Anonymous users can read blobs within a publicly accessible container without authenticating the request.

以下のアクセス許可を備えたコンテナーを構成できます。You can configure a container with the following permissions:

  • パブリック読み取りアクセスなし: コンテナーとその BLOB には、ストレージ アカウント所有者だけがアクセスできます。No public read access: The container and its blobs can be accessed only by the storage account owner. これは、すべての新しいコンテナーの既定値です。This is the default for all new containers.
  • BLOB に限定したパブリック読み取りアクセス: コンテナー内の BLOB は匿名要求で読み取り可能ですが、コンテナー データは使用できません。Public read access for blobs only: Blobs within the container can be read by anonymous request, but container data is not available. 匿名クライアントはコンテナー内の BLOB を列挙することはできません。Anonymous clients cannot enumerate the blobs within the container.
  • 完全なパブリック読み取りアクセス: すべてのコンテナーと BLOB のデータを匿名要求で読み取ることができます。Full public read access: All container and blob data can be read by anonymous request. クライアントは匿名要求でコンテナー内の BLOB を列挙できますが、ストレージ アカウント内のコンテナーを列挙することはできません。Clients can enumerate blobs within the container by anonymous request, but cannot enumerate containers within the storage account.

コンテナーのアクセス許可は、次の方法で設定することができます。You can use the following to set container permissions:

Azure Portal でコンテナーのアクセス許可を設定するSet container permissions in the Azure portal

Azure Portal でコンテナーのアクセス許可を設定するには、次の手順に従います。To set container permissions in the Azure portal, follow these steps:

  1. ポータルで [ストレージ アカウント] ブレードを開きます。Open your Storage account blade in the portal. ストレージ アカウントを検索するには、メイン ポータル メニュー ブレードで [ストレージ アカウント] を選択します。You can find your storage account by selecting Storage accounts in the main portal menu blade.

  2. メニュー ブレードの [BLOB サービス] で、[BLOB] を選択します。Under BLOB SERVICE on the menu blade, select Blobs.

  3. コンテナーの行を右クリックするか、省略記号を選択して、コンテナーのコンテキスト メニューを開きます。Right-click on the container row or select the ellipsis to open the container's Context menu.

  4. コンテキスト メニューの [アクセス ポリシー] を選択します。Select Access policy in the context menu.

  5. ドロップダウン メニューの [アクセスの種類] を選択します。Select an Access type from the drop down menu.

    Edit Container Metadata dialog

.NET でコンテナーのアクセス許可を設定するSet container permissions with .NET

C# と .NET 用ストレージ クライアント ライブラリを使用してコンテナーのアクセス許可を設定するには、まず、GetPermissions メソッドを呼び出して、コンテナーの既存のアクセス許可を取得します。To set permissions for a container using C# and the Storage Client Library for .NET, first retrieve the container's existing permissions by calling the GetPermissions method. 次に、GetPermissions メソッドによって返される BlobContainerPermissions オブジェクトに対して PublicAccess プロパティを設定します。Then set the PublicAccess property for the BlobContainerPermissions object that is returned by the GetPermissions method. 最後に、更新されたアクセス許可を使用して SetPermissions メソッドを呼び出します。Finally, call the SetPermissions method with the updated permissions.

次の例では、コンテナーのアクセス許可を完全なパブリック読み取りアクセスに設定します。The following example sets the container's permissions to full public read access. アクセス許可を BLOB 限定のパブリック読み取りアクセスに設定するには、PublicAccess プロパティを BlobContainerPublicAccessType.Blob に設定します。To set permissions to public read access for blobs only, set the PublicAccess property to BlobContainerPublicAccessType.Blob. 匿名ユーザーのすべてのアクセス許可を削除するには、このプロパティを BlobContainerPublicAccessType.Offに設定します。To remove all permissions for anonymous users, set the property to BlobContainerPublicAccessType.Off.

public static void SetPublicContainerPermissions(CloudBlobContainer container)
{
    BlobContainerPermissions permissions = container.GetPermissions();
    permissions.PublicAccess = BlobContainerPublicAccessType.Container;
    container.SetPermissions(permissions);
}

コンテナーと BLOB に匿名でアクセスするAccess containers and blobs anonymously

コンテナーと BLOB に匿名でアクセスするクライアントは、資格情報を必要としないコンストラクターを使用できます。A client that accesses containers and blobs anonymously can use constructors that do not require credentials. 次の例では、Blob service リソースを匿名で参照するいくつかの方法を示します。The following examples show a few different ways to reference Blob service resources anonymously.

匿名クライアント オブジェクトを作成するCreate an anonymous client object

アカウントに Blob service エンドポイントを指定することで、匿名アクセスの対象となる新しいサービス クライアント オブジェクトを作成できます。You can create a new service client object for anonymous access by providing the Blob service endpoint for the account. ただし、匿名アクセスを使用できる、そのアカウントのコンテナーの名前も知っておく必要があります。However, you must also know the name of a container in that account that's available for anonymous access.

public static void CreateAnonymousBlobClient()
{
    // Create the client object using the Blob service endpoint.
    CloudBlobClient blobClient = new CloudBlobClient(new Uri(@"https://storagesample.blob.core.windows.net"));

    // Get a reference to a container that's available for anonymous access.
    CloudBlobContainer container = blobClient.GetContainerReference("sample-container");

    // Read the container's properties. Note this is only possible when the container supports full public read access.
    container.FetchAttributes();
    Console.WriteLine(container.Properties.LastModified);
    Console.WriteLine(container.Properties.ETag);
}

コンテナーを匿名で参照するReference a container anonymously

匿名で使用できるコンテナーの URL がある場合は、この URL を使用してコンテナーを直接参照することができます。If you have the URL to a container that is anonymously available, you can use it to reference the container directly.

public static void ListBlobsAnonymously()
{
    // Get a reference to a container that's available for anonymous access.
    CloudBlobContainer container = new CloudBlobContainer(new Uri(@"https://storagesample.blob.core.windows.net/sample-container"));

    // List blobs in the container.
    foreach (IListBlobItem blobItem in container.ListBlobs())
    {
        Console.WriteLine(blobItem.Uri);
    }
}

BLOB を匿名で参照するReference a blob anonymously

匿名アクセスを使用できる BLOB の URL がある場合は、この URL を使用して BLOB を直接参照することができます。If you have the URL to a blob that is available for anonymous access, you can reference the blob directly using that URL:

public static void DownloadBlobAnonymously()
{
    CloudBlockBlob blob = new CloudBlockBlob(new Uri(@"https://storagesample.blob.core.windows.net/sample-container/logfile.txt"));
    blob.DownloadToFile(@"C:\Temp\logfile.txt", System.IO.FileMode.Create);
}

匿名ユーザーが利用できる機能Features available to anonymous users

コンテナーの ACL でパブリック アクセスが許可されている場合に、匿名ユーザーが呼び出すことのできる操作を次の表に示します。The following table shows which operations may be called by anonymous users when a container's ACL is set to allow public access.

REST 操作REST Operation 完全パブリック読み取りアクセス許可Permission with full public read access BLOB に限定したパブリック読み取りアクセス許可Permission with public read access for blobs only
List ContainersList Containers 所有者のみOwner only 所有者のみOwner only
コンテナーの作成Create Container 所有者のみOwner only 所有者のみOwner only
コンテナーのプロパティの取得Get Container Properties AllAll 所有者のみOwner only
Get Container MetadataGet Container Metadata AllAll 所有者のみOwner only
Set Container MetadataSet Container Metadata 所有者のみOwner only 所有者のみOwner only
コンテナー ACL の取得Get Container ACL 所有者のみOwner only 所有者のみOwner only
Set Container ACLSet Container ACL 所有者のみOwner only 所有者のみOwner only
Delete ContainerDelete Container 所有者のみOwner only 所有者のみOwner only
BLOBs の一覧List Blobs AllAll 所有者のみOwner only
Put BlobPut Blob 所有者のみOwner only 所有者のみOwner only
Get BlobGet Blob AllAll AllAll
BLOB のプロパティの取得Get Blob Properties AllAll AllAll
Set Blob PropertiesSet Blob Properties 所有者のみOwner only 所有者のみOwner only
BLOB のメタデータの取得Get Blob Metadata AllAll AllAll
Set Blob MetadataSet Blob Metadata 所有者のみOwner only 所有者のみOwner only
Put BlockPut Block 所有者のみOwner only 所有者のみOwner only
Get Block List (REST API) (コミット後のブロックのみ)Get Block List (committed blocks only) AllAll AllAll
Get Block List (REST API) (コミット前のブロックのみまたは全ブロック)Get Block List (uncommitted blocks only or all blocks) 所有者のみOwner only 所有者のみOwner only
Put Block ListPut Block List 所有者のみOwner only 所有者のみOwner only
Delete BlobDelete Blob 所有者のみOwner only 所有者のみOwner only
BLOB のコピーCopy Blob 所有者のみOwner only 所有者のみOwner only
Snapshot BlobSnapshot Blob 所有者のみOwner only 所有者のみOwner only
Lease BlobLease Blob 所有者のみOwner only 所有者のみOwner only
Put PagePut Page 所有者のみOwner only 所有者のみOwner only
ページ範囲の取得Get Page Ranges AllAll AllAll
Append BlobAppend Blob 所有者のみOwner only 所有者のみOwner only

次の手順Next steps