次の方法で共有


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 サーバーに証明書を安全にデプロイすることができます。

セキュリティの概要

マネージド ID を使用して構成するようにサーバーを Azure Arc 対応サーバーにオンボードすると、いくつかのアクションが発生します (Azure VM の場合と同様):

  • 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 が有効になっているサーバーの環境は、Azure Arc 対応サーバーで次の変数を使用して構成されます:

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

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

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

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

前提条件

  • マネージド ID の知識。

  • Windows では、ローカルの Administrators グループまたは Hybrid Agent 拡張機能アプリケーション グループのメンバーである必要があります。

  • 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
}

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

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

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

Bash を使用してアクセス トークンを正常に取得しました。

上記の例では、リソース変数が https://management.azure.com に設定されている場合に、ARM REST API で使用するアクセス トークンを要求します。 別の Azure サービスのアクセス トークンが必要な場合は、スクリプト内のリソース変数を正しいリソース値に置き換えます。 Azure Storage で認証する方法については、Azure Storage での OAuth トークンの使用に関するページを参照してください。 Azure Key Vault に対する認証の構成を完了するには、 Windows での Key Vault へのアクセス または Linux での Key Vault へのアクセスに関するページを参照してください。

次のステップ

  • Azure Key Vault の詳細については、 Key Vault の概要に関するページを参照してください。

  • PowerShell または Azure CLI使用して、リソースにマネージド ID アクセスを割り当てる方法について説明します。