LinuxにSSHでログインする際、パスワードではなく公開鍵で認証するのが一般的だ。では、AzureでLinuxの仮想マシンをデプロイする場合、最初からSSHの公開鍵認証を有効化しつつパスワード認証を禁止する具体的な方法は?
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
対象:Azure Virtual Machine(仮想マシン)、Linux、Bicep
LinuxにSSHでリモートからログインする際、認証にパスワードではなく公開鍵を利用するのが一般的になっている。特にインターネットから接続可能なサーバなどでは、パスワード認証は禁止して、より安全に運用できる公開鍵認証を有効化したいところだ。
本Tech TIPSでは、AzureでLinuxベースの仮想マシン(Virtual Machine、VM)をデプロイする際、最初から公開鍵認証を有効化しつつ、パスワード認証を禁止する方法を紹介する。デプロイにはBicepを用いる。また、すでに秘密鍵/公開鍵のペアが存在することを前提としている。
AzureではLinuxの仮想マシンをデプロイする際、SSHでログインするためのユーザー名とともに、その公開鍵を指定できる。具体的には、仮想マシンのリソースを生成するところで、[properties]−[osProfile]−[linuxConfiguration]−[ssh]−[publicKeys]に、公開鍵とその保存先のパスを記載すればよい。
またパスワード認証を無効化するなら、[linuxConfiguration]に「disablePasswordAuthentication: true」を加える。
param location string = resourceGroup().location
param vmName string // 仮想マシンの名前
param adminUsername string // 管理アカウントのユーザー名
param adminPublicKey string = loadTextContent('id_rsa.pub') // RSA署名の公開鍵
// デフォルトでは、このBicepファイルと同じ場所にある「id_rsa.pub」に保存されている公開鍵が用いられる
// loadTextContent()では変数でファイル名を指定できないので注意
// リソース生成: 仮想マシン
resource vm 'Microsoft.Compute/virtualMachines@2022-11-01' = {
name: vmName
location: location
properties: {
osProfile: {
computerName: vmName
adminUsername: adminUsername
linuxConfiguration: { // Linux特有の設定
disablePasswordAuthentication: true // SSHでのパスワード認証を禁止
ssh: {
publicKeys: [
{
path: '/home/${adminUsername}/.ssh/authorized_keys' // 仮想マシン内での公開鍵の保存先
keyData: adminPublicKey // 公開鍵そのもの
}
]
}
}
}
}
}
// デプロイ後、確認のためにパラメータやプロパティを出力
output resouceType string = vm.type
output computerName string = vm.properties.osProfile.computerName
output adminUsername string = vm.properties.osProfile.adminUsername
output adminSSHPublicKey string = vm.properties.osProfile.linuxConfiguration.ssh.publicKeys[0].keyData
ネットワークセキュリティグループについては、最低限、SSHの受信を許可するためのセキュリティルール(受信ポートの規則)を追加する必要がある(もっとも、これは公開鍵認証に限らず、パスワード認証でも必要だ)。
Copyright© Digital Advantage Corp. All Rights Reserved.