はじめに
溜まっていた下書きの棚卸しです🤦♂️
Azure BlobにSAS(Shared Access Signature)を使ってリソースにアクセスしてみたいと思います。
その中でも今回はユーザ委任SASを使ってアクセスします。
Azure Storageにアクセスする方法
Azure Storageに格納されているファイルには、クライアントがHTTP/HTTPS経由でアクセスします。
Azureでは、格納されているデータにアクセスするための各クライアントの承認要求を確認します。
BLOBストレージに使用可能なオプションは4つあるみたいです。
- パブリックアクセス
- Azure Active Directory(Azure AD)
- 共有キー
- Shared Access Signature(SAS)
Shared Access Signature(SAS)とは
読取り専用/書き込みアクセス、有効期限など、Azure Storage内のファイルへの詳細なアクセスを許可できます。
Azure Storageでは、次の3種類のShared Access Signatureがサポートされています。
- ユーザ委任SAS ★今回はこちらを使ってアクセスしたいと思います
- サービスSAS
- アカウントSAS
SAS認証の生成してアクセスする
②PowerShellを起動し、Azureに接続します
# Azure PowerShell要インストール
Connect-AzAccount
③トークン生成用のコマンドを作成します
# ストレージコンテナに格納されているファイルにSASを付与する
$RG = "<リソースグループ名>";
# ストレージアカウント名を設定
$storageAccountName = "<ストレージアカウント名>"
# ストレージアカウントのキーを取得
$storageAccountKey = (Get-AzStorageAccountKey -ResourceGroupName $RG -Name $storageAccountName).Value[0]
# ストレージアカウントのコンテキストを作成
$ctx = New-AzStorageContext -StorageAccountName $storageAccountName -StorageAccountKey $storageAccountKey
# コンテナ名を設定
$containerName = "images"
$BlobName = "BodyPart_5c618d0e-dde5-48dd-baa9-13da7d77753a.jpg";
# SASの有効期限を設定
$expiry = (Get-Date).AddMinutes(5);
# SASの権限を設定
$permissions = "r"
# SASを生成
$sas = New-AzStorageBlobSASToken `
-Container $containerName `
-Blob $BlobName `
-Permission $permissions `
-ExpiryTime $expiry `
-Context $ctx `
-FullUri
# SASを出力
Write-Output $sas
④アクセスしてみます
トークンありだとファイルがダウンロードできることが確認できます。
SASトークンなしだとエラーが出ることが確認できます。
所感
今回はBlobにSASを付与することでアクセス制限ができ、セキュリティを強化することを学びました。
外部からBlobにアクセスしたいときや、Congnitive ServiceなどのAIサービスでSASトークンを付与することでより安全にアクセスできると思います。
(いずれ実装してみたいです...)
また実装するときは、有効期限のサイクルを意識する必要があると思うので気を付けたいと思います。
また何か学んだことがあれば投稿したいと思います。