Azure Linux VM でパスワード認証が許可されている

SSH キーで接続できることを確認してから、不要なパスワードログインを無効にしてください。

説明

Linux VM のパスワード認証では、推測、使い回し、漏えいへの対策が必要です。パスワードを許可しても SSH キーは併用でき、この設定だけで VM がインターネットに公開されるわけではありません。運用アクセスでは、保護された SSH キーを優先してください。

想定される影響

  • 弱いパスワードや使い回したパスワードが、管理者アカウントの侵害に悪用される場合があります。
  • SSH の許可範囲が広いと、自動化されたログイン試行が増える場合があります。

対処方法

  • 承認された admin_ssh_key を登録し、キーによる接続をテストしてから disable_password_authentication = true を設定してください。Terraform 計画で VM の置換も確認してください。
  • 秘密キーを保護し、不要なキーを失効させてください。管理接続の接続元も必要な範囲に限定してください。

例

認証方式だけを比較する抜粋です。現在の Linux VM の size 引数と同じ NIC を使い、OS ディスクとイメージの設定は省略しています。承認されたパスワード入力と実際の公開キーファイルを用意してください。

変更前

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

変更後

hcl
resource "azurerm_linux_virtual_machine" "example" {
  name                  = "${var.prefix}-vm"
  location              = azurerm_resource_group.main.location
  resource_group_name   = azurerm_resource_group.main.name
  network_interface_ids = [azurerm_network_interface.main.id]
  size               = "Standard_DS1_v2"

  admin_username                  = "adminuser"
  disable_password_authentication = true

  admin_ssh_key {
    username   = "adminuser"
    public_key = file("~/.ssh/id_rsa.pub")
  }
}

補足:

  • 変更前: パスワード認証を許可します。
  • 変更後: 管理者の公開キーを登録し、パスワード認証を無効にします。

参考資料