EC2 の Amazon Linux を launch するとき authorized_keys に公開鍵が注入されるユーザを変更したい

変更したくないですか? 私はしたかった。いい加減 recipe 作り込んだし、 ec2-user じゃねえだろって思ってた。例えば oogatta とかにしたかった。でもわからなかった。

今日、 @ainame と話してたら「それは CloudInit です」と教わった。 CloudInit …!

その通りだった。 /etc/cloud/cloud.cfg.d/00_defaults.cfg を開くと

# A set of users which may be applied and/or used by various modules
# when a 'default' entry is found it will reference the 'default_user'
# from the distro configuration specified below
users:
  - default

と書いてあり、その通り system_info の中を見ると default_user がいた。

# System and/or distro specific settings
# (not accessible to handlers/transforms)
system_info:
  # This will affect which distro class gets used
  distro: amazon
  distro_short: amzn
  # Default user name + that default users groups (if added/used)
  default_user:
    name: ec2-user
    lock_passwd: true
    gecos: EC2 Default User
    groups: [ wheel ]
    sudo: [ "ALL=(ALL) NOPASSWD:ALL" ]
    shell: /bin/bash

めっちゃ ec2-user って書いてある……。

さっそくこの一歩前の recipe で

if platform?('amazon')
  bash 'switch default user' do
    code <<-EOH
  sed -i -e '{s/name: ec2-user/name: oogatta/;}' /etc/cloud/cloud.cfg.d/00_defaults.cfg
    EOH
  end
end

ぶち込んでやりましたら、望んでいたとおりになった……。 lock_passwd とか passwordless sudo とかそのままでいいのかってのはあとで調整として、これで packer とか test-kitchen とか ssh 接続をラップするツールを横断している時に(今はどのユーザとどの鍵で入れるんだっけ……?)といちいち認知負荷を強いられることがなくなり、今夜は健やかな夜を過ごせそうです。 @ainame サンタさん、ありがとう。

これでミッチェル先生が packer の ssh 鍵交換周りで本気出してない理由わかったす。