🏢

Azure Arc へのオンプレサーバーの登録 (Arc-enabled servers)

2024/02/14に公開

はじめに

Azure Arc を利用することで複数環境のリソース群(オンプレミスや Azure 外のパブリッククラウドなどに分散しているリソース)を Azure Portal で一元管理することが可能となります。
現在、Azure Arc で管理できるものは サーバー、Kubernetesクラスター、 データサービス(SQL Managed Instance と PostgreSQL(プレビュー) )、SQL Server となりますが、本記事ではサーバー(Azure Arc 対応サーバー)の登録手順を纏めています

詳細については公式サイトをご参照ください
https://learn.microsoft.com/ja-jp/azure/azure-arc/overview

検証環境の構成図

作成の流れ

  1. 事前準備 (Azure VMでの作業)
  2. Azure Connected Machine エージェントのインストール

1. 事前準備 (Azure VMでの作業)

※ Windows 以外のOSで試す場合は 公式Docs をご参照ください

1-1. 拡張機能のアンインストール

  • Azure Portal にて実施

1-2. ゲストエージェントの無効化

  • 対象の Azure VM にて、以下コマンドを実行する (PowerShell)
Set-Service WindowsAzureGuestAgent -StartupType Disabled -Verbose
Stop-Service WindowsAzureGuestAgent -Force -Verbose

1-3. Azure IMDS エンドポイントへのアクセスをブロック

  • 対象の Azure VM にて、以下コマンドを実行する (PowerShell)
New-NetFirewallRule -Name BlockAzureIMDS -DisplayName "Block access to Azure IMDS" -Enabled True -Profile Any -Direction Outbound -Action Block -RemoteAddress 169.254.169.254

コマンド実行後、ファイアウォールのルールが作成されていることを確認する

2. Azure Connected Machine エージェントのインストール

2-1. Azure リソースプロバイダーの登録

  • Azure Portal にて実施

2-2. リソースグループのロールの確認

  • Azure Portal にて実施

2-3. サービスプリンシパルの作成

  • Azure Portal にて実施

  • 作成後に以下のような画面が表示されるので、ダウンロードを行う(サービスプリンシパルID と シークレットが記載された txt ファイル)

  • サービスプリンシパルが作成されたことを確認する

  • サービスプリンシパルのロールを確認する

2-4. インストールスクリプトの生成

  • Azure Portal にて実施



2-5. インストールスクリプトの修正

  • ダウンロードしたインストールスクリプトの更新を行う(手順 2-3 でダウンロードしたサービスプリンシパル情報を入力する)
修正箇所
$ServicePrincipalId
$ServicePrincipalClientSecret
OnboardingScript.ps1
try {
    # サービス プリンシパル アプリケーション ID とシークレットをこちらで追加してください
    $ServicePrincipalId="<サービスプリンシパルID>";
    $ServicePrincipalClientSecret="<サービスプリンシパルシークレット>";

    $env:SUBSCRIPTION_ID = "xxxxxxxxxxxxxxxxxxxx";
    $env:RESOURCE_GROUP = "env25";
    $env:TENANT_ID = "xxxxxxxxxxxxxxxxxxxx";
    $env:LOCATION = "japaneast";
    $env:AUTH_TYPE = "principal";
    $env:CORRELATION_ID = "xxxxxxxxxxxxxxxxxxxx";
    $env:CLOUD = "AzureCloud";
    

    [Net.ServicePointManager]::SecurityProtocol = [Net.ServicePointManager]::SecurityProtocol -bor 3072;

    # インストール パッケージをダウンロードします
    Invoke-WebRequest -UseBasicParsing -Uri "https://aka.ms/azcmagent-windows" -TimeoutSec 30 -OutFile "$env:TEMP\install_windows_azcmagent.ps1";

    # ハイブリッド エージェントをインストールします
    & "$env:TEMP\install_windows_azcmagent.ps1";
    if ($LASTEXITCODE -ne 0) { exit 1; }

    # 接続コマンドを実行します
    & "$env:ProgramW6432\AzureConnectedMachineAgent\azcmagent.exe" connect --service-principal-id "$ServicePrincipalId" --service-principal-secret "$ServicePrincipalClientSecret" --resource-group "$env:RESOURCE_GROUP" --tenant-id "$env:TENANT_ID" --location "$env:LOCATION" --subscription-id "$env:SUBSCRIPTION_ID" --cloud "$env:CLOUD" --tags "Datacenter=onpre,City=shinagawa-ku,StateOrDistrict=tokyo,CountryOrRegion=japan" --correlation-id "$env:CORRELATION_ID";
}
catch {
    $logBody = @{subscriptionId="$env:SUBSCRIPTION_ID";resourceGroup="$env:RESOURCE_GROUP";tenantId="$env:TENANT_ID";location="$env:LOCATION";correlationId="$env:CORRELATION_ID";authType="$env:AUTH_TYPE";operation="onboarding";messageType=$_.FullyQualifiedErrorId;message="$_";};
    Invoke-WebRequest -UseBasicParsing -Uri "https://gbl.his.arc.azure.com/log" -Method "PUT" -Body ($logBody | ConvertTo-Json) | out-null;
    Write-Host  -ForegroundColor red $_.Exception;
}

2-6. インストールスクリプトの実行

  • 対象の Azure VM にてインストールスクリプトを実行する

2-7. サーバーが接続されたことを確認

  • Azure Portal にて実施

まとめ

今回はサーバーを Azure Arc で管理するための登録手順について検証を行いました。オンプレ機器を準備することが出来なくても、Azure VM を利用することで動作確認を行うことは可能なので検証する際の敷居が少しは低くなるのでは?と思います。登録したサーバーは Azure 管理サービスを使用して監視、保護、更新を行うことが出来るようになりますが、その内容については時間があるときにでも触れたいと思います

Appendix

https://learn.microsoft.com/ja-jp/azure/azure-arc/servers/deployment-options

https://learn.microsoft.com/ja-jp/azure/azure-arc/servers/plan-evaluate-on-azure-virtual-machine

https://learn.microsoft.com/ja-jp/azure/azure-arc/servers/onboard-service-principal

Microsoft (有志)

Discussion