これは Amazon EC2 Systems Manager Advent Calendar 2017 の -129 日目の記事です。
- Vuls を実行する IAM ユーザ "Bob" が、対象 EC2 インスタンス "i-1234567890abcdef0" の管理者ではない場合、アカウントの作成や SSH 公開鍵の登録や vuls-ssh-command.sh のインストールを依頼する必要があります
- それでは不便なので、ユーザが AWS Systems Manager – 運用のインサイトを入手して迅速に対応 を使用して、これらを自身でおこなえる方法を用意します
- Amazon EC2 Systems Manager とは、EC2 インスタンスにリモートのシェルスクリプト実行などを提供する、管理サービスです
- 対象 EC2 インスタンスにて Amazon EC2 Systems Manager (SSM) エージェントが使用可能になっていることが前提です
- AWS Systems Manager のセットアップ - AWS Systems Manager に手順が掲載されていますが、要点のみ書き出しました
- EC2 インスタンスにまだ IAM ロールがアタッチされていない場合は、作成してアタッチする
$ aws iam create-role --role-name EC2RoleSample --assume-role-policy-document '{"Version":"2012-10-17","Statement":{"Effect":"Allow","Principal":{"Service":"ec2.amazonaws.com"},"Action":"sts:AssumeRole"}}' $ aws iam create-instance-profile --instance-profile-name EC2RoleSample $ aws iam add-role-to-instance-profile --instance-profile-name EC2RoleSample --role-name EC2RoleSample $ aws ec2 associate-iam-instance-profile --instance-id i-1234567890abcdef0 --iam-instance-profile Name=EC2RoleSample
-
- EC2 インスタンスにアタッチされた IAM ロールに AmazonEC2RoleforSSM ポリシーをアタッチする
$ aws iam attach-role-policy --role-name EC2RoleSample --policy-arn arn:aws:iam::aws:policy/service-role/AmazonEC2RoleforSSM
-
- EC2 インスタンスに SSM エージェントをインストール
[ec2-user ~]$ sudo yum install amazon-ssm-agent [ec2-user ~]$ sudo start amazon-ssm-agent
-
- Amazon EC2 Systems Manager は、なにかと便利なため、EC2 インスタンスの作成時にセットアップしておくことをおすすめします
- 前提を満たしたら、やっていきます
- 管理者に、最初の一回だけ vuls-ssh-command/terraform at master · asannou/vuls-ssh-command · GitHub の実行を依頼します
- "Bob" が、すべての EC2 インスタンスに対して https://github.com/asannou/vuls-ssh-command/blob/master/terraform/CreateVulsUser.json を実行できるようになります
$ terraform apply var.vuls_roles Enter a value: [] var.vuls_users Enter a value: ["Bob"] ...
- 晴れて IAM ユーザ "Bob" は EC2 インスタンス "i-1234567890abcdef0" に Vuls のためのユーザを作成できるようになりました
$ aws sts get-caller-identity --output text --query Arn arn:aws:iam::123456789012:user/Bob $ aws ssm send-command --document-name CreateVulsUser --instance-ids i-1234567890abcdef0 --parameters publickey="$(cat $HOME/.ssh/id_rsa.pub)" --output text --query Command.CommandId 854365f0-aefb-48eb-be4a-f2a0c6c2cf9e
$ aws ssm get-command-invocation --command-id 854365f0-aefb-48eb-be4a-f2a0c6c2cf9e --instance-id i-1234567890abcdef0 --output text --query StandardOutputContent | tee -a $HOME/.ssh/known_hosts 203.0.113.1 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBJKQ5+Aauvvb5iPFfYeQhcIegsich7SJ1Ji97mh3sGx3wvXAV53wuzn4ILSEn9ENtb6bXT/puLiCUi2bza2To24= root@ip-172-31-28-103 $ ssh -t vuls@203.0.113.1 'stty cols 1000; curl --max-time 1 --retry 3 --noproxy 169.254.169.254 http://169.254.169.254/latest/meta-data/instance-id' i-1234567890abcdef0Connection to 203.0.113.1 closed.