Log Analytics API などの Azure REST API にアクセスしたり、カスタム メトリックを送信したりするには、クライアント ID とシークレットに基づいて承認トークンを生成できます。 その後、トークンは REST API 要求で渡されます。 この記事では、トークンを生成できるように、クライアント アプリを登録し、クライアント シークレットを作成する方法について説明します。
アプリを登録します
Azure portal、Azure CLI、または PowerShell を使用して、サービス プリンシパルを作成し、アプリを登録します。
アプリを登録するには、Azure portal で [Active Directory の概要] ページを開きます。
サイド バーから [アプリの登録] を選択します。
[新しい登録] を選択します
[アプリケーションの登録] ページで、アプリケーションの名前を入力します。
[登録] を選択します
アプリの概要ページで、[証明書とシークレット] を選択します
[アプリケーション (クライアント) ID] をメモしておきます。 これはトークンの HTTP 要求で使用されます。
[クライアント シークレット] タブで、[新しいクライアント シークレット] を選択します
[説明] に入力し、[追加]を選択します
クライアント シークレットの [値] をコピーして保存します。
注
クライアント シークレットの値を表示できるのは、作成直後のみです。 ページを離れる前にシークレットを保存してください。
次のスクリプトを実行して、サービス プリンシパルとアプリを作成します。
az ad sp create-for-rbac -n <Service principal display name>
応答は次のようになります。
{
"appId": "00001111-aaaa-2222-bbbb-3333cccc4444",
"displayName": "AzMonAPIApp",
"password": "123456.ABCDE.~XYZ876123ABcEdB7169",
"tenant": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e"
}
重要
出力には、保護する必要がある資格情報が含まれます。 これらの資格情報をコードに含めないようにするか、資格情報をソース管理にチェックインしてください。
API を使用してアクセスするリソースのロールとスコープを追加する
az role assignment create --assignee <`appId`> --role <Role> --scope <resource URI>
次の CLI の例では、Reader
リソース グループ内のすべてのリソースのサービス プリンシパルに rg-001
ロールを 割り当てます。
az role assignment create --assignee 00001111-aaaa-2222-bbbb-3333cccc4444 --role Reader --scope '\/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/rg-001'
Azure CLI を使用してサービス プリンシパルを作成する方法の詳細については、「Azure CLI で Azure サービス プリンシパルを作成する」を参照してください。
次のサンプル スクリプトは、PowerShell を使用して Microsoft Entra サービス プリンシパルを作成する方法を示しています。 さらに詳細なチュートリアルについては、「リソースにアクセスするためのサービス プリンシパルを Azure PowerShell で作成する」を参照してください。
$subscriptionId = "{azure-subscription-id}"
$resourceGroupName = "{resource-group-name}"
# Authenticate to a specific Azure subscription.
Connect-AzAccount -SubscriptionId $subscriptionId
# Password for the service principal
$pwd = "{service-principal-password}"
$secureStringPassword = ConvertTo-SecureString -String $pwd -AsPlainText -Force
# Create a new Azure Active Directory application
$azureAdApplication = New-AzADApplication `
-DisplayName "My Azure Monitor" `
-HomePage "https://localhost/azure-monitor" `
-IdentifierUris "https://localhost/azure-monitor" `
-Password $secureStringPassword
# Create a new service principal associated with the designated application
New-AzADServicePrincipal -ApplicationId $azureAdApplication.ApplicationId
# Assign Reader role to the newly created service principal
New-AzRoleAssignment -RoleDefinitionName Reader `
-ServicePrincipalName $azureAdApplication.ApplicationId.Guid
次のステップ
アプリ、クライアント ID、シークレットを使用してトークンを生成する前に、アクセスするリソースのアクセス制御 (IAM) を使用してアプリをロールに割り当てます。 ロールは、使用するリソースの種類と API によって異なります。
たとえば、次のように入力します。
Log Analytics ワークスペースからの読み取りをアプリに許可するには、Log Analytics ワークスペースのアクセス制御 (IAM) を使用して、アプリをメンバーとして閲覧者ロールに追加します。 詳細については、API へのアクセスに関するページを参照してください
リソースのカスタム メトリックを送信するためのアクセス権を付与するには、リソースのアクセス制御 (IAM) を使用して、アプリをメンバーとして監視メトリック パブリッシャー ロールに追加します。 詳細については、「REST API を使用して Azure Monitor メトリック データベースにメトリックを送信する」を参照してください。
詳細については、「Azure portal を使用して Azure ロールを割り当てる」を参照してください。
ロールを割り当てると、アプリ、クライアント ID、クライアント シークレットを使用して、REST API にアクセスするためのベアラー トークンを生成できます。
注
Microsoft Entra 認証を使用する場合、Azure Application Insights REST API で新しいロールベースのアクセス制御 (RBAC) のアクセス許可が認識されるまでに最大 60 分かかることがあります。 アクセス許可が反映されている間、REST API の呼び出しがエラーコード 403 で失敗することがあります。