0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AzureのSAS (Shared Access Signature) に入門したので、学んだ内容をまとめました。

0
Posted at

はじめに

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を利用する際のご参考になれば幸いです。

参考文献

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?