🗃️
Azure AD 認可の Azure Blob を REST API で取得する
はじめに
Azure Blob などのストレージサービスでは、アクセス制御に Azure AD での RBAC や ABAC が可能になっています。こちらを検証したいのですが、Azure ポータルだと不十分と思い、 REST API で取得する方法を調べました。
Azure AD 認可の Azure Blob を準備
ストレージアカウントやコンテナーの設定はこちらをご確認ください。
Azure AD からトークンを取得
Azure AD 認可の Blob を取得する場合、ヘッダーに Bearer トークンを付与する必要があります。トークン取得方法はいくつかありますが、今回は Azure PowerShell で取得します。
- Azure PowerShell に接続します。
Connect-AzAccount
- Storage アクセス用のトークンを取得します。
$accesstoken = Get-AzAccessToken -ResourceTypeName Storage
ストレージアカウント個別の URI で指定する場合は以下になります。
$accesstoken = Get-AzAccessToken -ResourceUrl "https://<storageAccountName>.blob.core.windows.net/"
トークンの中身を見ると Audiance (aud) の項目がストレージになっています。
ちなみに「-ResourceTypeName Storage」をつけないとこちらです。
<?xml version="1.0" encoding="utf-8"?>
<Error>
<Code>InvalidAuthenticationInfo</Code>
<Message>Server failed to authenticate the request. Please refer to the information in the www-authenticate header.
RequestId:XXXXXX
Time:XXXXXXX</Message>
<AuthenticationErrorDetail>Audience validation failed. Audience did not match.</AuthenticationErrorDetail>
</Error>
REST API リクエスト
今回はシンプルに GET Blob を行います。
- リクエストに必要な要素を作成します。
$token = "Bearer " + $accesstoken.Token
$header = @{
"Authorization" = $token;
"x-ms-version" = "2020-04-08"
}
$uri = "https://<storageAccountName>.blob.core.windows.net/<containerName>/<blobName>"
"x-ms-version" についてはこちらをご確認ください。
- リクエストを作成します。
$getRequest = @{
Uri = $uri
Headers = $header
Method = 'GET'
}
- REST API を実行します。
$response = Invoke-WebRequest @getRequest
- レスポンスを出力します。
Write-Output $response.content
アクセス権限があれば、以上で取得できるかと思います。
Discussion