はじめに
AzureのSAS (Shared Access Signature) に入門したので学んだ内容をまとめます。 SAS入門者の視点から、
- SASを使う場面
- SAS URL
- SASの種類
をまとめています。
SASはどんな場面で使うのか?
主に、ブラウザなどのクライアントから直接Azure Storageへアクセスしたい場合に使います。例えば、大規模ファイルをAzure Blob Storageへアップロードする場面を考えます。
まずは、
ブラウザ → バックエンド → Blob Storage
といった流れでのアップロードを考えますが、ファイルが大きくなると、
- バックエンドの負荷が大きくなる
- HTTPタイムアウトが起きる
といった問題があります。そこで次のような、ブラウザから直接Blob Storageへアップロードする構成が使われます。
ブラウザ → Blob Storage
この構成ではバックエンドを経由しないため、ブラウザからBlob Storageへアクセスするための認証が必要です。しかし、Azure Storage全体を操作できるAzure Storageアカウントキーをブラウザへ渡すわけにはいきません。そこで登場するのがSASです。
SASを用いて、ブラウザから直接アクセス
SASは、限定的な権限だけを持つ、一時的なアクセスチケットのようなもので、
- このファイルだけにアクセス
- アップロードだけできる
- 10分間だけ使える
というようにアクセスできる範囲を制限できます。
主な処理の流れとしては、バックエンドがSASトークンを生成し、そのトークンをもとに組み立てたSASトークン付きURL(以下、SAS URL)をブラウザへ返します。ブラウザは、SAS URLを使ってBlob Storageへアクセスします。
1. ブラウザ → バックエンド
ブラウザはSAS URLをリクエスト
バックエンドはSASトークンを生成し、SAS URLをレスポンス
2. ブラウザ → Blob Storage
ブラウザはSAS URLを用いてBlob Storageに直接アップロード
バックエンドはSAS URLを発行するのみとなり、ファイル本体の受け取りは行っていません。
SAS URLはどんなものか?
SAS URLは例えば次のような形式です。
https://storagesample.blob.core.windows.net/sample-container/sampleBlob.txt?sv=2023-11-03&se=2026-06-07T10:10:00Z&sp=w&sig=xxxxxxxxxxxxxxxxxxxxxx
URLは、
リソースURL + "?" + SASトークン
という構成になっています。SASトークンには、
- Storage APIのバージョン
- 許可する操作
- 有効期限
- 署名(改ざん防止用)
などが含まれており、このトークンをリソースURLの後ろに付与したものがSAS URLです。
SAS URLを用いることでクライアントは直接Azure Storageへファイルをアップロードすることができます。
SASの種類
Microsoft公式ドキュメントは、SASを3種類に分類しています。SASを作るときは、「このSASは正しく発行されたものです」と証明するための署名が必要になります。この署名に使うキーや、アクセスできる範囲によってSASの種類が分類されています。
| 種類 | 署名に使うもの | 特徴 |
|---|---|---|
| ユーザー委任SAS | Microsoft Entra IDの認証情報から取得したユーザー委任キー | Storageアカウントキーを使わずに発行できる。 |
| サービスSAS | Storageアカウントキー | Azure Storageサービスの1つのリソースに対してアクセス権を付与する。 |
| アカウントSAS | Storageアカウントキー | 複数のAzure Storageサービスのリソースへのアクセス権を付与でき、サービスレベルの操作も対象にできる。 |
ユーザー委任SAS
ユーザー委任SASはMicrosoft Entra IDで認証し、取得したユーザー委任キーを使って署名します。サービスSASやアカウントSASとの大きな違いは、Storageアカウントキーを直接使わないことです。
流れとしては、
Microsoft Entra IDで認証する
↓
ユーザー委任キーを取得する
↓
ユーザー委任キーを使ってSASを発行する
になります。Storageアカウントキーをアプリケーション側で扱わなくてよいため、サービスSASやアカウントSASよりも安全性が高いとされています。Microsoft公式ドキュメントも、可能な場合はユーザー委任SASを利用することを推奨しています。
サービスSAS
サービスSASは、Blobなど特定のStorageサービス内のリソースに対して発行するSASです。
サービスSASはStorageアカウントキーを使って署名しており、SASを発行するバックエンド側では、Storageアカウントキーを安全に管理する必要があります。
アカウントSAS
アカウントSASも、Storageアカウントキーで署名します。Blob、Queue、Tableなど複数のStorageサービスを対象にすることができ、サービスSASよりも広い操作を許可できます。
まとめ
クライアントから直接Azure Storageへアクセスしたい場面にSASを使うことで、
- 必要な操作だけ
- 必要な時間だけ
- 必要なリソースだけ
を許可した一時的なアクセス権限をクライアントに渡すことができます。
SASを利用する際のご参考になれば幸いです。
参考文献
- 共有access署名 (SAS) を使用してAzure Storageリソースに制限付きaccessを付与する | Microsoft公式ドキュメント
- Storage サービス SAS の作成手順 (Azure Portal, Azure Storage Explorer, PowerShell, Azure CLI) | Japan PaaS Support Team Blog
- Azure Storage 内のデータへのアクセスを承認する | Microsoft公式ドキュメント
- Azure Storage の SAS URI を読めるようになる:URLに含まれる権限・期限・署名の見方 | Zenn