.NET を使用して保存されているアクセス ポリシーを作成する

保存されているアクセス ポリシーを使用すると、サーバー側でのサービス レベルの共有アクセス署名 (SAS) をさらに制御できます。 保存されているアクセス ポリシーを定義することで、共有アクセス署名をグループ化し、ポリシーにバインドされている共有アクセス署名に対して追加の制限を設定できます。 保存されているアクセス ポリシーを使用して、SAS の開始時刻、有効期限、アクセス許可の変更や、その発行後の取り消しを実行できます。

次の Azure Storage リソースでは、保存されているアクセス ポリシーがサポートされます。

  • BLOB コンテナー
  • ファイル共有
  • キュー
  • テーブル

Note

コンテナーに関する保存されているアクセス ポリシーでは、コンテナー自体またはコンテナーに含まれている BLOB へのアクセス許可を付与している共有アクセス署名に関連付けることができます。 同様に、ファイル共有に関する保存されているアクセス ポリシーでは、共有自体または共有に含まれているファイルへのアクセス許可を付与している共有アクセス署名に関連付けることができます。

保存されているアクセス ポリシーは、サービス SAS に対してのみサポートされます。 保存されているアクセス ポリシーは、アカウント SAS またはユーザー委任 SAS ではサポートされません。

保存されているアクセス ポリシーの詳細については、「保存されているアクセス ポリシーの作成」を参照してください。

保存されているアクセス ポリシーを作成する

保存されているアクセス ポリシーを作成するための基礎 REST 操作は、Set Container ACL です。 接続文字列でアカウント アクセス キーを使用することで、保存されているアクセス ポリシーを共有キー経由で作成する権限を操作に与える必要があります。 Set Container ACL 操作に Microsoft Entra 資格情報で権限を与えることはできません。 詳細については、「データ操作呼び出しのアクセス許可」を参照してください。

次のコード例では、保存されているアクセス ポリシーをコンテナーに作成します。 アクセス ポリシーを使用して、コンテナーまたは blob のサービス SAS に制約を指定します。

Azure Storage 向け .NET クライアント ライブラリのバージョン 12 を使用してコンテナー上に保存されているアクセス ポリシーを作成するには、次のメソッドのいずれかを呼び出します。

次の例では、1 日有効となり、読み取りと書き込みの権限を与える保存されているアクセス ポリシーが作成されます。

async static Task CreateStoredAccessPolicyAsync(string containerName)
{
    string connectionString = "";

    // Use the connection string to authorize the operation to create the access policy.
    // Azure AD does not support the Set Container ACL operation that creates the policy.
    BlobContainerClient containerClient = new BlobContainerClient(connectionString, containerName);

    try
    {
        await containerClient.CreateIfNotExistsAsync();

        // Create one or more stored access policies.
        List<BlobSignedIdentifier> signedIdentifiers = new List<BlobSignedIdentifier>
        {
            new BlobSignedIdentifier
            {
                Id = "mysignedidentifier",
                AccessPolicy = new BlobAccessPolicy
                {
                    StartsOn = DateTimeOffset.UtcNow.AddHours(-1),
                    ExpiresOn = DateTimeOffset.UtcNow.AddDays(1),
                    Permissions = "rw"
                }
            }
        };
        // Set the container's access policy.
        await containerClient.SetAccessPolicyAsync(permissions: signedIdentifiers);
    }
    catch (RequestFailedException e)
    {
        Console.WriteLine(e.ErrorCode);
        Console.WriteLine(e.Message);
    }
    finally
    {
        await containerClient.DeleteAsync();
    }
}

関連項目

リソース

非推奨の .NET バージョン 11.x SDK を使用した関連コード サンプルについては、「.NET バージョン 11.x を使用したコード サンプル」を参照してください。