cloud-init とユーザーデータを使用して、EC2 インスタンスに SSH アクセスできる新しいユーザーアカウントを追加するにはどうすればよいですか?

最終更新日: 2022 年 2 月 25 日

SSH を使用して Amazon Elastic Compute Cloud (Amazon EC2) Linux インスタンスに接続できる、別のユーザーを追加する必要があります。cloud-init とユーザーデータを使用して、これを行うにはどうすればよいですか?

簡単な説明

ユーザーデータスクリプトを、以下を実行する cloud-init に渡します。

1.    新しいユーザーを作成します。

2.    SSH ディレクトリとその中のファイルに、適切な所有者とファイル権限を設定します。

3.    SSH パブリックキーを authorized_keys ファイルに追加します。

解決方法

開始する前に、以下の点に注意してください。

  • インスタンスを停止して再開すると、インスタンスストアボリュームのデータがすべて消去されます。保持したいデータが含まれているインスタンスストアボリュームは、必ずすべてバックアップしてください。詳細については、「AMI のルートデバイスタイプの判別」をご参照ください。
  • インスタンスを停止および再起動すると、インスタンスのパブリック IP アドレスが変更されます。インスタンスに外部トラフィックをルーティングするときは、パブリック IP アドレスの代わりに Elastic IP アドレスを使用することをお勧めします。

1.    SSH を使用して EC2 インスタンスに接続します

2.    次のコマンドを実行して、 cloud-init がインストールされていることを確認します。

sudo yum list installed cloud-init

cloud-init がインストールされていない場合は、次のコマンドを実行してインストールします。

sudo yum install cloud-init

3.    Amazon EC2 コンソールを開いてからインスタンスを選択します。

4.    [Actions] (アクション)、[Instance State] (インスタンスの状態 を順に選択し、最後に [Stop] (停止) を選択します。

注: [Stop] (停止) が使用不可である場合は、インスタンスが既に停止しているか、そのルートデバイスがインスタンスストアボリュームになっています。

5.    キーペアからパブリックキーを取得します

6.    [アクション]、[インスタンス設定] を順に選択し、最後に [ユーザーデータの表示/変更] を選択します。

7.    次のスクリプトをコピーして [User Data] フィールドに貼り付けます。

username には、新しいユーザーのユーザー名を入力します。ssh-rsa AB3nzExample には、パブリックキーを入力します。

#cloud-config
cloud_final_modules:
- [users-groups,always]
users:
  - name: username
    groups: [ wheel ]
    sudo: [ "ALL=(ALL) NOPASSWD:ALL" ]
    shell: /bin/bash
    ssh-authorized-keys: 
    - ssh-rsa AB3nzExample

注: デフォルトでは、cloud-init ディレクティブはインスタンスの起動時にのみ実行します。ただし、このユーザーデータスクリプトを使用すると、cloud-init はインスタンスがリブートまたは再起動するたびにパブリックキーをインスタンスに追加します。ユーザーデータスクリプトを削除すると、デフォルトの機能が復元されます。

8.    [保存] を選択します。

9.    [アクション][インスタンスの状態] を順に選択し、最後に [開始] を選択します。

10.    インスタンスのステータスが [running] (実行中) になったら、新しいユーザーとしてログインします。新しいユーザーは ec2 ユーザーと同じデフォルトの動作をします。

注: インスタンスのユーザーデータを変更するには、ModifyInstanceAttribute API アクションを使用します。このアクションを制限するために、AWS Identity and Access Management (IAM) ポリシーを作成できます。