こんにちは。今日は、Microsoft Azureに登場するSASという概念について、理解を深めるために調べたことをメモしておきます。
Contents
SAS(共有アクセス署名)の概要
Shared Access Signatures (SAS) を使用して Azure Storage リソースへの制限付きアクセスを許可する
https://docs.microsoft.com/ja-jp/azure/storage/common/storage-sas-overview
上の公式ページに詳細な説明がありますが、まとめると以下がポイントかと思います。
- Shared Access Signatureキーの略で、日本語にすると「共有アクセス署名」。
- Azure Storageリソースへの制限付き(一定期間、特定リソースのみ、など)アクセス権を付与する署名付きURI。
- 具体的には、リソース本来のURL+SASトークンの形式(SASトークンは後述)で表現される
- SASトークンは、リソースへのアクセス方法を定義したもの。これを「共有キー」というもので署名している
- 「共有キー」にはユーザ委任、サービス、アカウントの3種類がサポートされている。(後述)
- また、”アドホックSAS”、”保存されているアクセスポリシーによるサービスSAS”の2つの形式がある。(後述)
以下、実際に発行されるSAS URLのサンプルです。コンテンツのURLの後ろ、?に続いて有効期限情報や署名を含んだSASトークンがくっついていることが分かります。
https://<ストレージアカウント名>.blob.core.windows.net/<コンテナ名>/<ファイル名>?sp=r&st=2022-04-23T05:37:27Z&se=2022-04-23T13:37:27Z&spr=https&sv=2020-08-04&sr=b&sig=%2BEqBFTtF%2FPdBfG0LVTGD9DFaTvjfSzE%2BvS8kZFdFL3k%3D
なんでSASが必要なの?
- そもそもBlob Storageのコンテンツには、コンテンツのURLを介してアクセスします。が、この単純なURLの状態だと、URLが漏洩しただけで不正なアクセスを許してしまいます。なので、確実にコンテンツを閲覧できるべきユーザだけがアクセスできるような仕組みが必要。
- そのための1つの方法として、Front End Proxyを経由させる方法がある。これは、Storageの前段に配置したプロキシサーバ等でユーザの認証を行って、無事認証されたユーザだけがストレージにアクセスできるようにする、という仕組み。
- ただ、この方式の場合、リクエスト数の増大に対してFront End Proxyのスケーラビリティにも配慮する必要がある。
- ここで登場するのがSAS。SASを利用すると、あらかじめ認証されたユーザは、決められたポリシーに基づいてリソースに自由にアクセスできるようになる。
- なお、多くの実際のサービスでは、この2つの方式を組み合わせて運用することも多いとのこと。一部データはプロキシ認証、その他データはSAS URLを使って直接ストレージとやりとり、といった具合。
参考:
3種類のSASを理解する
上にも書きましたが、SASは3種類存在します。ここでは、これらの違いについてまとめます。
ユーザ委任のSAS
概要をまとめると、以下の通りです。
- Azure ADの資格情報で保護されたSAS
- SAS署名時に、Azure AD資格情報に依存した、ユーザ委任キーを利用して署名される
- 3つのSASの中でも最もセキュリティが高いとされている
- Azure Blob storage と Azure Data Lake Storage Gen2 でサポートされている
- 許可されるアクセスは、Azure ADのRBACアクセス許可と、SASに明示的に指定されたアクセス許可の積集合で決定される。(RBACでは許可されているが、SASでは許可されていない場合は、そのリソース・サービスへのアクセスは許可されない。逆もしかり。)
- セキュリティのベスト プラクティスとして、より侵害されやすいアカウント キーを使用するのではなく、可能な限り Azure AD 資格情報を使用することが推奨される
- 現在、”保存されているアクセスポリシー”では、ユーザー委任の SAS ではサポートされていない
https://docs.microsoft.com/ja-jp/azure/storage/common/storage-sas-overview#user-delegation-sas
作成方法などの詳細は、こちらのMicrosoft公式ドキュメントから確認可能です。
アカウントSAS
概要は以下の通りです。
- ストレージアカウントキーを使用して保護されたSAS。
- ストレージアカウント単位でのSASを作成可能
- 一度に1つのストレージアカウント内の複数のサービスへのアクセスを委任可能
- 現在、”保存されているアクセスポリシー”では、アカウント SAS ではサポートされていない
https://docs.microsoft.com/ja-jp/azure/storage/common/storage-sas-overview#account-sas
サービスSAS
概要は以下の通りです。
- アカウントSASと同様、ストレージアカウントキーを使用して保護されたSAS
- アカウントSASと異なり、サービス SAS では、Blob、Queue、Table、または File サービスのいずれか1つのみのストレージサービスへのアクセスを委任
- 他のSASとは異なり、”保存されているアクセスポリシー”(*)を継承したSASを作成可能。
https://docs.microsoft.com/ja-jp/azure/storage/common/storage-sas-overview#service-sas
SASの2つの形式を理解する
参考:https://docs.microsoft.com/ja-jp/azure/storage/common/storage-sas-overview#account-sas
アドホックSAS
- 一時的に利用可能なSAS。作成時に、開始時刻・有効期限を指定する必要がある。(有効期限を設けることでより安全になる。)
保存されたアクセスポリシーによるサービスSAS
- 「アクセスポリシー」が紐づけられていて、アクセスポリシーによる制限を継承しているSAS
- 「アクセスポリシー」とは、ストレージアカウントのリソースコンテナ(File、Blob、Queue、Tableなど)レベルで定義できる本来SASとは独立した機能
- こんな感じでコンテナ毎にアクセス制御ができる
SASのベストプラクティスは?
ここまでで、SASとはどんなものかがざっくり分かったと思いますが、実際どう使い分け&運用すればよいのでしょうか。安心してください、Microsoft公式ドキュメントにちゃんとまとめられています。
以下抜粋です。
- 可能な限り最もセキュリティが高いユーザ委任SASを利用
- セキュリティのため最小限のリソースに絞ってアクセス許可する
- 常にHTTPSを利用する
- SAS侵害時のSAS失効計画をたてておく
- 必要に応じてクライアントにSASの自動更新をさせる
- SASの開始時刻の、マシン時刻とのタイムラグを考慮しておく
- Azure MonitorやStorage Log Analyticsで動作をモニタリングできるようにしておく
SAS URLの発行手順
最後に、SAS URLの発行手順を確認しておきます。
以下はAzureポータル上からアカウントSASを発行する方法のサンプルですが、REST API経由でも発行可能です。ドキュメントリンクだけ載せておきます。
REST APIでユーザ委任SASを発行する方法
https://docs.microsoft.com/ja-JP/rest/api/storageservices/create-user-delegation-sas
REST APIでサービスSASを発行する方法
https://docs.microsoft.com/ja-JP/rest/api/storageservices/create-service-sas
REST APIでアカウントSASを発行する方法
https://docs.microsoft.com/ja-JP/rest/api/storageservices/create-account-sas
アカウントSASの発行
アカウントSASは、ストレージアカウントの”Shared Access Signature”ブレードから設定可能です。(こちらは、アドホックなSAS発行形式の手順になります)
設定画面を見ると、以下のような情報を細かく設定可能なことが分かります。
- 利用できるサービス
- 利用できるリソースの種類
- 利用できる操作
- アクセス可能な期間
- アクセス可能なIPアドレス
利用できるリソースの種類を選択すると、「SASと接続文字列を作成する」ボタンが押せるようになります。
ボタンを押すと、以下のように設定でチェックしたサービスの分だけ、SAS URLが生成されています。アカウントキー情報を持たないクライアントが各サービスに接続する場合は、ここに表示されているURLを介することで、指定期間直接アクセスできるようになります。
以上、Microsoft AzureのSASについて調べて分かったことのまとめでした。
本日も最後までご覧いただきありがとうございました!なお、この記事が少しでもお役に立ちましたら、下のいいねをポチって頂けると励みになります!また、ご指摘や内容追加希望等ありましたら、お気軽にコメントいただければ幸いです!
おしまい
(おまけ)Azureをもっと知りたい方には
Azureの認定資格を取得する
Azureは、資格試験が充実していますのでご興味のあるところから勉強してみてはいかがでしょうか。こちらに一覧と勉強方法などをまとめましたので、参考になりましたら幸いです。
書籍で勉強する
Azure関連書籍、ひと昔はとても少なかったのですが、少しづつ増えてきている印象です。以下がおすすめです。
オンラインコンテンツを活用する
個人的には最近はUdemyなどのオンライン学習コンテンツもおすすめです。Udemyの場合は、30日間の無料返金期間もあるので、購入してちょっと違ったなと思ったら返金できるところも安心で、私も活用しています。
Azureについては、日本語コンテンツも増えてきているので、以下に特に評価が高いものをのせておきます。
作りながら覚えるMicrosoft Azure入門講座(PaaS編)
作りながら覚えるMicrosoft Azure入門講座(IaaS編)
勉強になりました。ありがとうございます。
細かいですが、以下のところは「積集合」かなと思います。
> 許可されるアクセスは、Azure ADのRBACアクセス許可と、
> SASに明示的に指定されたアクセス許可の和集合で決定される