保存されているアクセス ポリシーを使用して Azure Storage へのアクセスを委任する

完了

Shared Access Signature (SAS) は、自分の Azure の資格情報を共有することなく、クライアントにアクセスを許可する安全な方法です。 この使いやすさには欠点があります。 正しい SAS を持つ人ならだれでも有効なファイルにアクセスできます。 ストレージへのアクセスを取り消す唯一の方法は、アクセス キーを再生成することです。 再生成するには、古い共有キーを使用しているすべてのアプリを更新して、新しいキーを使用する必要があります。 保存されているアクセス ポリシーに SAS を関連付ける方法もあります。

SAS 機能をアプリに追加すると、画像ごとに独自の有効期限とアクセス制御をもつ SAS を作成することになり、柔軟性のなさが明らかになります。 ストレージ コンテナーで "保存されているアクセス ポリシー" を使用するようにアプリを更新したくなります。 ポリシーが準備できたら、有効期限を更新して、作成されたすべての SAS トークンに影響するかどうかをテストします。

このモユニットでは、以下の方法を学習します。

  • 保存されているアクセス ポリシーを使用する。
  • C# Storage API を使用して、新しいアクセス ポリシーに関連付けられている SAS トークンを作成する。
  • Azure portal で保存されているアクセス ポリシーを更新することで、すべての SAS トークンを変更できることをテストする。

保存されているアクセス ポリシーとは

保存されているアクセス ポリシーは、次の 4 種類のストレージ リソースで作成できます。

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

保存されているアクセス ポリシーを、BLOB コンテナーに作成することで、コンテナーのすべての BLOB とコンテナー自体に使用できます。 保存されているアクセス ポリシーは、次のプロパティを使用して作成されます。

  • 識別子: 保存されているアクセス ポリシーを参照するために使用する名前。
  • 開始時刻: ポリシーの使用が開始される日時を示す DateTimeOffset 値。 この値は null の場合もあります。
  • 有効期限: ポリシーの期限が切れる日時を示す DateTimeOffset 値。 この時間を過ぎると、ストレージへの要求は失敗し、403 エラーコード メッセージが表示されます。
  • アクセス許可: 文字列としてのアクセス許可のリスト。acdlrw のいずれか 1 つまたはすべてを指定できます。

Screenshot of the Azure portal showing a stored access policy.

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

保存されているアクセス ポリシーは、C# コード、Azure portal、または Azure CLI コマンドを使用して作成できます。

C# .NET コードを利用

BlobSignedIdentifier identifier = new BlobSignedIdentifier
{
    Id = "stored access policy identifier",
    AccessPolicy = new BlobAccessPolicy
    {
        ExpiresOn = DateTimeOffset.UtcNow.AddHours(1),
        Permissions = "rw"
    }
};

blobContainer.SetAccessPolicy(permissions: new BlobSignedIdentifier[] { identifier });

ポータルを利用

ポータルで、ストレージ アカウント、BLOB ストレージ コンテナーの順にアクセスします。 左側で、[アクセス ポリシー] を選択します。 保存されているアクセス ポリシーを新しく追加するには、[+ ポリシーの追加] を選択します。

これで、必要なすべてのパラメーターを入力できます。

Screenshot of the options for adding an access policy.

Azure CLI コマンドを利用

az storage container policy create \
    --name <stored access policy identifier> \
    --container-name <container name> \
    --start <start time UTC datetime> \
    --expiry <expiry time UTC datetime> \
    --permissions <(a)dd, (c)reate, (d)elete, (l)ist, (r)ead, or (w)rite> \
    --account-key <storage account key> \
    --account-name <storage account name> \

SAS トークンを作成し、保存されているアクセス ポリシーに関連付ける

作成した保存されているアクセス ポリシーを、必要な新しい SAS トークンに関連付けましょう。 会社の患者の画像診断 Web アプリに対して、既存のコードを更新して前のコードを追加します。 次に、SAS トークンを作成するメソッドで、新しい保存されているアクセス ポリシーを参照します。

SAS トークンを作成するために必要なすべての既存のコードは次のとおりです。

BlobSasBuilder sas = new BlobSasBuilder
{
    BlobContainerName = blob.BlobContainerName,
    BlobName = blob.Name,
    Resource = "b",
    ExpiresOn = DateTimeOffset.UtcNow.AddMinutes(1)
};
// Allow read access
sas.SetPermissions(BlobSasPermissions.Read);

これは、新しいアクセス ポリシーを参照することによって置き換えることができます。

// Create a user SAS that only allows reading for a minute
BlobSasBuilder sas = new BlobSasBuilder
{
    Identifier = "stored access policy identifier"
};

1 つの BLOB コンテナーに対して、最大 5 つの保存されたアクセス ポリシーを設定できます。