Azure Arc-enabled servers のリモート管理機能をあえて無効化する

azure
Published: 2023-09-15

はじめに

Azure Arc-enabled servers には Azure 側からリモートでサーバを操作するための便利な機能が実装されています。これらの機能を利用して、様々な環境で動作しているサーバ群を Azure 上から統合的に運用管理できることが Azure Arc-enabled servers の一つのメリットです。

その一方で、Azure Arc-enabled servers には「ログや設定を吸い上げて Azure 側で分析・可視化するという読み取り系の処理は良いが、設定変更やリモートアクセスなどの書き込み系処理は勘弁してほしい」という人や「Arc には登録するものの Azure の機能は一切使いたくない」という人向けのオプションが存在しています。それがエージェントモードです。

エージェントのモード

インストール直後のエージェントモード - full -

インストール直後の設定は次のようになっています。私の環境はプロキシサーバと Private Endpoint を併用しているので少し余計な設定が入っています。

PS C:\Users\Administrator> azcmagent config list
Local Configuration Settings
  incomingconnections.enabled (preview)                 : true
  incomingconnections.ports (preview)                   : []
  proxy.url                                             : http://192.168.111.120:8080
  extensions.allowlist                                  : []
  extensions.blocklist                                  : []
  proxy.bypass                                          : [Arc]
  guestconfiguration.enabled                            : true
  extensions.enabled                                    : true
  config.mode                                           : full

現在のエージェントモードは full です。この状態ですと Azure 側から全ての拡張機能をインストールできますので、Update Manager を有効化したり、Windows Admin Center on Azure を有効化できてしまいます。また Arc の SSH 接続機能を有効化すれば、Azure CLI や Azure PowerShell を利用してリモートからサーバにアクセスできるようになってしまいます。当然これらの機能を使うためには意図的に有効化する必要があります。ですが、これらの機能を使わないのであれば、そもそも使えないようにした方が安心でしょう。

エージェントモード - monitor -

そんな人向けのオプションが monitor です。サーバ上でモードを変更するコマンドを実施する必要があります。

PS C:\Users\Administrator> azcmagent config set config.mode monitor
Config property config.mode set to value monitor (previously full)
INFO    Stopping and disabling service: GC Service
INFO    Enabling and starting service: Extension Service
PS C:\Users\Administrator> azcmagent config list
Local Configuration Settings
  incomingconnections.enabled (preview)                 : false
  incomingconnections.ports (preview)                   : []
  proxy.url                                             : http://192.168.111.120:8080
  extensions.allowlist                                  : [Microsoft.EnterpriseCloud.Monitoring/OmsAgentForLinux,
    Microsoft.Azure.Monitoring.DependencyAgent/DependencyAgentLinux,
    Microsoft.Azure.Monitor/AzureMonitorLinuxAgent,
    Qualys/LinuxAgent.AzureSecurityCenter,
    Microsoft.Azure.Security.Monitoring /AzureSecurityLinuxAgent,
    Microsoft.Azure.AzureDefenderForServers/MDE.Linux,
    Microsoft.Azure.Monitor.VirtualMachines.GuestHealth/GuestHealthLinuxAgent,
    Microsoft.Azure.Monitor.VirtualMachines.GuestHealth.DEV/GuestHealthLinuxAgent,
    Microsoft.EnterpriseCloud.Monitoring/MicrosoftMonitoringAgent,
    Microsoft.Azure.Monitoring.DependencyAgent/DependencyAgentWindows,
    Microsoft.Azure.Monitor/AzureMonitorWindowsAgent,
    Qualys/WindowsAgent.AzureSecurityCenter,
    Microsoft.Azure.AzureDefenderForServers/MDE.Windows,
    Microsoft.Azure.AzureDefenderForSQL/AdvancedThreatProtection.Windows,
    Microsoft.Azure.Security.Monitoring/AzureSecurityWindowsAgent,
    Microsoft.Azure.Security/IaaSAntimalware,Microsoft.Azure.Geneva/GenevaMonitoring,
    Microsoft.Azure.AzureDefenderForSQL/VulnerabilityAssessment.Windows,
    Microsoft.Azure.Monitor.VirtualMachines.GuestHealth/GuestHealthWindowsAgent,
    Microsoft.Sentinel.AzureMonitorAgentExtensions.Internal/DnsExtension,
    Microsoft.Sentinel.AzureMonitorAgentExtensions/MicrosoftDnsAgent]
  extensions.blocklist                                  : []
  proxy.bypass                                          : [Arc]
  guestconfiguration.enabled                            : false
  extensions.enabled                                    : true
  config.mode                                           : monitor
PS C:\Users\Administrator>

実施すると incomingconnections.enabled が false になりますので、Arc の SSH 接続が失敗するようになります。

> Enter-AzVM -ResourceGroupName arc-server-je -Name WIN-E3A506JQ3BR -LocalUser administrator -Rdp
OpenSSH_for_Windows_8.6p1, LibreSSL 3.4.3
{"level":"error","msg":"error connecting to wss://azgn-japaneast-public-1p-seasg3-007.servicebus.windows.net/$hc/microsoft.hybridcompute/machines/6dd7e51a76d9396ac1c0392b25f6a05a86d9548c2cfdfc0a2b9e04aae44edea0/1694773455222008576/v2%3Fsb-hc-action=connect\u0026sb-hc-id=d1dfb339-9e9e-44cd-ad84-5b431f8c3014. 403 connection not allowed. websocket: bad handshake ","proxyVersion":"1.3.022941"}
{"level":"fatal","msg":"sshproxy: error connecting to the address: 403 connection not allowed. websocket: bad handshake","proxyVersion":"1.3.022941"}
kex_exchange_identification: Connection closed by remote host
Connection closed by UNKNOWN port 65535

また、インストールできる拡張機能がホワイトリスト形式になるため、リストに載っていない Windows Admin Center on Azure の拡張機能や Update Manager の拡張機能がインストールできなくなります。結果としてこれらの機能が利用できなくなります。

Update Manager の有効化に失敗した図

WAC on Azure の有効化に失敗した図

さらにマシン構成機能も無効になるため、Azure Policy を通して OS の設定が変更されることもなくなります。

また、拡張機能のホワイトリストは自由に編集できるため、本当に必要なものだけにすることも可能です。もし拡張機能が全く不要であれば、extensions.enabled を false にすることで一切の拡張機能をインストールできなくすることも可能です。

終わりに

今回は Azure Arc-enabled servers のエージェントモードをご紹介しました。「Azure Arc-enabled servers 自体は使いたいが他の機能を使う必要はない」というシナリオや「既存環境に影響を与えるリスクの少ない読み取り系のサービスから Azure Arc-enabled servers を使っていく」といったシナリオの際に利用をご検討ください。

Note

  • 当サイトは個人のブログです。このブログに示されている見解や意見は個人的なものであり、所属組織の見解や意見を表明するものではありません。
  • 公開情報を踏まえて正確な情報を掲載するよう努めますが、その内容の完全性や正確性、有用性、安全性、最新性について一切保証しません。
  • 添付文章やリンク先などを含む本サイトの内容は作成時点でのものであり、予告なく変更される場合があります。