Azure VM の管理者 SSH 公開キー設定の確認

承認された管理者認証を構成し、キーで接続できることを確認してからパスワード認証を制限してください。

説明

Linux VM の管理には、保護された SSH キーを優先してください。admin_ssh_key がなくても別の仕組みでキーや認証が設定される場合があるため、実際の接続方法を確認する必要があります。パスワードに依存する場合は、推測、使い回し、漏えいのリスクを管理してください。

想定される影響

  • 弱い管理者パスワードや使い回したパスワードが、アカウント侵害に悪用される場合があります。
  • キーの配布を確認せずにパスワードを無効化すると、管理者が接続できなくなる場合があります。

対処方法

  • SSH キーを使う場合は、承認された admin_ssh_key とユーザー名を設定してください。現在の AzureRM が対応する Ed25519 または 2048 ビット以上の RSA 公開キーを使い、秘密キーを保護してください。
  • 実際のキー接続をテストしてから、不要なパスワード認証を無効化してください。ユーザーごとのキーを管理・失効させ、キー変更時は Terraform の VM 置換計画も確認してください。

例

管理者認証だけを比較する抜粋で、OS ディスクとイメージは省略しています。公開キーファイルのパスは、実際に承認されたキーに置き換えてください。

変更前

hcl
resource "azurerm_linux_virtual_machine" "example" {
  name                            = "example-vm"
  resource_group_name             = azurerm_resource_group.example.name
  location                        = azurerm_resource_group.example.location
  size                            = "Standard_F2"
  admin_username                  = "adminuser"
  admin_password                  = var.admin_password
  disable_password_authentication = false
  network_interface_ids           = [azurerm_network_interface.example.id]
}

変更後

hcl
resource "azurerm_linux_virtual_machine" "example" {
  name                            = "example-vm"
  resource_group_name             = azurerm_resource_group.example.name
  location                        = azurerm_resource_group.example.location
  size                            = "Standard_F2"
  admin_username                  = "adminuser"
  disable_password_authentication = true
  network_interface_ids           = [azurerm_network_interface.example.id]

  admin_ssh_key {
    username   = "adminuser"
    public_key = file("/secure/path/id_ed25519.pub")
  }
}

補足:

  • 変更前: パスワード認証を許可し、パスワード入力を使います。
  • 変更後: 管理者の公開キーを指定し、パスワード認証を無効にします。

参考資料