🍏
サービス プリンシパルで Azure REST API を操作する
はじめに
アプリ用アカウントであるサービス プリンシパルを使用して、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 リファレンスは下記です。
今回は 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
Discussion