Posted at

ec2の作成と同時に任意のOSユーザを作成する


やりたいこと

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も、よりシンプルになりました~