やりたいこと
ec2を新規作成すると、
- AmazonLinuxの場合
ec2-user
- CentOSの場合
centos
こんな感じでデフォルトのOSユーザが作成されると思います。
ですが、セキュリティ上、デフォルトのユーザや共通の鍵ペアを使いたくないので、
こちらで任意に決めた管理用ユーザを、ec2作成時に自動作成するようにしたいと思います。
手順
ec2を作成する際に、
インスタンスの作成 > 3.インスタンスの設定 > 高度な詳細 > ユーザーデータ
と進み、ユーザーデーター項目のラジオボタンを テキストで
にチェックします。
そして以下の内容をユーザーデータとして入力します。
#cloud-config
cloud_final_modules:
- [users-groups,always]
users:
- name: ${作成したいOSユーザ名}
groups: [ wheel ]
sudo: [ "ALL=(ALL) NOPASSWD:ALL" ]
shell: /bin/bash
ssh-authorized-keys:
- ${設置したい公開鍵1}
- ${設置したい公開鍵2}
あとはいつも通りにec2を作成します。
すると、ここで指定したOSユーザが、デフォルトユーザのかわりにUID:1000
として作成されます。
デフォルトユーザは作成されません。
簡単な解説
今回の内容はcloud-init
の仕組みを利用しています。
AWSの公式ドキュメント(ユーザーデータやcloud-initについて記載されています)
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/user-data.html
groups: [ wheel ]
指定したOSユーザが、サブグループwheel付きで作成されます。
sudo: [ "ALL=(ALL) NOPASSWD:ALL" ]
wheelグループが、パスワード無しでsudoできるようになります。
ssh-authorized-keys:
ここに記載した内容が、/home/${作成したいOSユーザ名}/.ssh/authorized_keys
にそのまま書き込まれます。
そのため、ここにno-agent-forwarding
のようなオプションを含めて記載することもできます。
おわりに
この方法を知るまでは、一旦デフォルトユーザでログインして管理ユーザを作成。管理ユーザで入りなおしてデフォルトユーザを削除。
みたいな面倒なことをしていましたが、これでその煩わしさから開放されました。
手順やansibleも、よりシンプルになりました~