Azure Arc 対応サーバーでの Azure リソースに対して認証を行う

Azure Arc 対応サーバーで直接実行されるアプリケーションやプロセスは、マネージド ID を使用して、Microsoft Entra ID ベースの認証をサポートしている他の Azure リソースにアクセスできます。 アプリケーションはその ID を表すアクセス トークン (Azure Arc 対応サーバーに対してシステムが割り当てる) を取得し、それをベアラー トークンとして使用して、別のサービスに対してそれ自体を認証できます。

マネージド ID の詳細な説明、およびシステム割り当ての ID とユーザー割り当ての ID の違いについては、マネージド ID の概要に関するドキュメントを参照してください。

この記事では、サーバーでシステム割り当てのマネージド ID を使用して Azure Key Vault にアクセスする方法について説明します。 ブートストラップとして機能する Key Vault により、クライアント アプリケーションは、Microsoft Entra ID で保護されていないリソースにシークレットを使用してアクセスできます。 たとえば、IIS Web サーバーで使用される TLS/SSL 証明書を Azure Key Vault に格納し、Azure 外部の Windows または Linux サーバーに証明書を安全にデプロイすることができます。

セキュリティの概要

サーバーを Azure Arc 対応サーバーにオンボードする間、Azure VM の場合と同様に、マネージド ID を使用して構成するいくつかのアクションが実行されます。

  • Azure Resource Manager は、Azure Arc 対応サーバーでシステム割り当てマネージド ID を有効にするための要求を受け取ります。

  • Azure Resource Manager は、サーバーの ID を表すサービス プリンシパルを Microsoft Entra ID に作成します。 このサブスクリプションによって信頼されている Microsoft Entra テナントに、サービス プリンシパルが作成されます。

  • Azure Resource Manager では、Windows または Linux 用の Azure Instance Metadata Service (IMDS) の ID エンドポイントをサービス プリンシパルのクライアント ID と証明書を使用して更新することによって、サーバー上に ID が構成されます。 このエンドポイントは、既知のルーティング不可の IP アドレスを使用してサーバーからのみアクセスできる、REST エンドポイントです。 このサービスは、Azure Arc 対応サーバーを管理および構成するのに役立つ、メタデータ情報のサブセットを提供します。

マネージド ID が有効になっているサーバーの環境は、Windows の Azure Arc 対応サーバーで次の変数を使用して構成されます。

  • IMDS_ENDPOINT: Azure Arc 対応サーバーの IMDS エンドポイントの IP アドレスhttp://localhost:40342

  • IDENTITY_ENDPOINT: サービスのマネージド ID に対応する localhost エンドポイントです (http://localhost:40342/metadata/identity/oauth2/token)。

サーバー上で実行されているコードは、サーバー内からのみアクセスできる Azure Instance Metadata サービス エンドポイントにトークンを要求できます。

システム環境変数 IDENTITY_ENDPOINT は、アプリケーションが ID エンドポイントを検出するのに使用されます。 アプリケーションは IDENTITY_ENDPOINTIMDS_ENDPOINT の値を取得して、それらを使用する必要があります。 あらゆるアクセス レベルのアプリケーションが、エンドポイントへの要求を行うことができます。 メタデータの応答は、通常どおりに処理され、コンピューター上の任意のプロセスに渡されます。 ただし、トークンを公開する要求が行われた場合は、上位の特権を持つユーザーのみが使用できるデータにアクセスできることを証明するためのシークレットを、クライアントが提供する必要があります。

前提条件

  • マネージド ID の知識。

  • Windows では、ローカルの Administrators グループか、またはハイブリッド エージェント拡張アプリケーション グループのメンバーである必要があります。

  • Linux では、himds グループのメンバーである必要があります。

  • Azure Arc 対応サーバーに接続され、登録されているサーバー。

  • 必要なリソース作成とロール管理の手順を実行するための、サブスクリプションまたはリソース グループの所有者グループのメンバーであること。

  • 資格情報を格納したり取得したりするための Azure Key Vault。Azure Arc ID に Key Vault へのアクセス権を割り当てます。

REST API を使用してアクセス トークンを取得する

システムによって割り当てられたマネージド ID を取得し、それを使用して Azure リソースに対する認証を行う方法は、Azure VM での実行方法と似ています。

Azure Arc 対応の Windows サーバーの場合は、PowerShell を使用し、Web 要求を呼び出して、特定のポートのローカル ホストからトークンを取得します。 IP アドレスまたは環境変数 IDENTITY_ENDPOINT を使用して要求を指定します。

$apiVersion = "2020-06-01"
$resource = "https://management.azure.com/"
$endpoint = "{0}?resource={1}&api-version={2}" -f $env:IDENTITY_ENDPOINT,$resource,$apiVersion
$secretFile = ""
try
{
    Invoke-WebRequest -Method GET -Uri $endpoint -Headers @{Metadata='True'} -UseBasicParsing
}
catch
{
    $wwwAuthHeader = $_.Exception.Response.Headers["WWW-Authenticate"]
    if ($wwwAuthHeader -match "Basic realm=.+")
    {
        $secretFile = ($wwwAuthHeader -split "Basic realm=")[1]
    }
}
Write-Host "Secret file path: " $secretFile`n
$secret = cat -Raw $secretFile
$response = Invoke-WebRequest -Method GET -Uri $endpoint -Headers @{Metadata='True'; Authorization="Basic $secret"} -UseBasicParsing
if ($response)
{
    $token = (ConvertFrom-Json -InputObject $response.Content).access_token
    Write-Host "Access token: " $token
}

次に示すのは、返される応答の例です。

A successful retrieval of the access token using PowerShell.

Azure Arc 対応の Linux サーバーの場合は、Bash を使用し、Web 要求を呼び出して、特定のポートのローカル ホストからトークンを取得します。 IP アドレスまたは環境変数 IDENTITY_ENDPOINT を使用して、次の要求を指定します。 この手順を完了するには、SSH クライアントが必要です。

CHALLENGE_TOKEN_PATH=$(curl -s -D - -H Metadata:true "http://127.0.0.1:40342/metadata/identity/oauth2/token?api-version=2019-11-01&resource=https%3A%2F%2Fmanagement.azure.com" | grep Www-Authenticate | cut -d "=" -f 2 | tr -d "[:cntrl:]")
CHALLENGE_TOKEN=$(cat $CHALLENGE_TOKEN_PATH)
if [ $? -ne 0 ]; then
    echo "Could not retrieve challenge token, double check that this command is run with root privileges."
else
    curl -s -H Metadata:true -H "Authorization: Basic $CHALLENGE_TOKEN" "http://127.0.0.1:40342/metadata/identity/oauth2/token?api-version=2019-11-01&resource=https%3A%2F%2Fmanagement.azure.com"
fi

次に示すのは、返される応答の例です。

A successful retrieval of the access token using Bash.

応答には、Azure のリソースへのアクセスに必要なアクセス トークンが含まれています。 Azure Key Vault に対して認証するための構成を完了する方法については、Windows の場合の Key Vault へのアクセスまたは Linux の場合の Key Vault へのアクセスに関する記事を参照してください。

次のステップ