🍏

サービス プリンシパルで Azure REST API を操作する

2023/12/14に公開

はじめに

アプリ用アカウントであるサービス プリンシパルを使用して、Azure REST API を操作します。Azure PowerShell や Azure CLI を使用する方法がありますが今回これらは使用せず、Bearer トークンを取得してから、REST API をキックします。

サービス プリンシパルを作成

Entra ID から [アプリの登録] > [+新規登録] をクリックします。


名前を入力して [登録] をクリックします。


サービス プリンシパル作成後、[証明書とシークレット] > [+ 新しいクライアント シークレット] をクリックします。


説明と有効期限を設定し、[追加] をクリック、値をコピーしています。(ここでしか表示されません)


概要ページに戻り、アプリケーション(クライアント) ID、ディレクトリ (テナント) ID をコピーしておきます。


Azure ロールを付与

Azure サブスクリプション、リソースグループなどから、Azure ロールを付与します。


Bearer トークンを取得

以下の PowerShell でサービス プリンシパルを使用して、Bearer トークンを取得します。

# EntraID アプリケーションのクライアント ID、テナント ID、シークレットを設定
$clientId = "xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
$tenantId = "xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
$clientSecret = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

# トークン取得のための Entra ID エンドポイント
$resource = "https://management.azure.com/"
$tokenEndpoint = "https://login.microsoftonline.com/$tenantId/oauth2/token"

# トークン取得用のボディ
$body = @{
    grant_type    = "client_credentials"
    resource      = $resource
    client_id     = $clientId
    client_secret = $clientSecret
}

# トークン取得
$tokenResponse = Invoke-RestMethod -Method Post -Uri $tokenEndpoint -Body $body -ContentType "application/x-www-form-urlencoded"
$accessToken = $tokenResponse.access_token

Azure REST API を実行

取得した Bearer トークンをもとに Azure REST API を実行します。API リファレンスは下記です。
https://learn.microsoft.com/en-us/rest/api/azure/

今回は Defender for Cloud のアラート情報を取得します。

# Azure リソースの情報
$subscriptionId = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"

$headers = @{
    'Authorization' = "Bearer $accessToken"
    'Content-Type'  = 'application/json'
}

# Defender for Cloud アラートの取得
$alertApiUrl = "https://management.azure.com/subscriptions/$subscriptionId/providers/Microsoft.Security/alerts?api-version=2022-01-01"
$alerts = Invoke-RestMethod -Uri $alertApiUrl -Headers $headers -Method Get
Microsoft (有志)

Discussion