保存されているアクセス ポリシーを使用して 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 つまたはすべてを指定できます。
保存されているアクセス ポリシーを作成する
保存されているアクセス ポリシーは、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 ストレージ コンテナーの順にアクセスします。 左側で、[アクセス ポリシー] を選択します。 保存されているアクセス ポリシーを新しく追加するには、[+ ポリシーの追加] を選択します。
これで、必要なすべてのパラメーターを入力できます。
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 つの保存されたアクセス ポリシーを設定できます。