「そのAWSアカウントの管理は私の担当では無いんですけど、そこにあるEC2インスタンス1台だけは運用保守しなくちゃいけないんです。」
AWS Systems Managerなら可能です!
ハイブリッドアクティベーションを利用しましょう。
Systems Manager は、通常はAWSアカウント内のEC2インスタンスを管理対象とします。 しかし、異なるAWSアカウントのEC2インスタンスやオンプレ仮想マシンも管理対象として登録可能です。
これは AWS Systems Manager ハイブリッドアクティベーション と呼ばれます。
ハイブリッドアクティベーションの設定
公式ドキュメントは、こちらです。
アクティベーションの作成
Systems Managerを動かすアカウントで作業します。
AWS Systems Manager > ハイブリッドアクティベーション > アクティベーションの作成
パラメータを設定します。
①アクティベーションの説明- オプション
最大 256 文字です。なくても構いません。
②インスタンス制限
AWS に登録するサーバーと VM の合計数を指定します。 最大数は 1000 です。
③IAM ロール
デフォルトでAmazonEC2RunCommandRoleForManagedInstancesが選択されます。ひとまずデフォルトのままでもいいですが、S3に実行ログを保存するには追加のポリシーが必要でした。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:PutObjectAcl" ], "Resource": [ "arn:aws:s3:::バケット名", "arn:aws:s3:::バケット名/*" ] } ] }
④アクティベーションの有効期限
この日付はアクティベーションが期限切れになる日付を指定します。有効期限日後にマネージドインスタンスを追加登録するには、新しいアクティベーションを作成する必要があります。有効期限日は、既に登録されて実行中のインスタンスには影響しません。
失効期限日は、今日から 30 日以内に設定してください
yyyy-mm-ddThh:mm+09:00というフォーマットで記述します。
(例:2021-08-15T00:00+09:00)
⑤デフォルトのインスタンス名- オプション
コンソールで表示されたとき、または List API を呼び出すときに、このマネージドインスタンスの識別に役立つ名前を指定します。
以上を入力できたら、 アクティベーションの作成 をクリックします。 すると、Activation Code と Activation ID が表示されるのでメモしておきます。
なお、ここで作成したアクティベーションはブログ公開時には削除済みなので、上記画像では敢えて隠していません。
EC2インスタンスを登録
上記で作成したActivation CodeとActivation IDで、EC2インスタンスをSystems Managerに登録しましょう。 他アカウントのEC2インスタンスにssh等でログインして作業します。
以下コマンド一発でアクティベーションできます。
$ sudo -E amazon-ssm-agent -register -code "activation-code" -id "activation-id" -region ap-northeast-1 Error occurred fetching the seelog config file path: open /etc/amazon/ssm/seelog.xml: no such file or directory Initializing new seelog logger New Seelog Logger Creation Complete 2021-07-29 09:15:18 WARN Could not read InstanceFingerprint file: InstanceFingerprint does not exist. 2021-07-29 09:15:18 INFO No initial fingerprint detected, generating fingerprint file... 2021-07-29 09:15:19 INFO Successfully registered the instance with AWS SSM using Managed instance-id: mi-xxxxxxxxxxxxxxxxx
AWS Systems Manager > アクティベーション をみると、カウントアップしています。
ただ、新しい設定を有効にするためにamazon-ssm-agentを再起動する必要があります。
なお、EC2インスタンスが自アカウントのSystems Managerで管理されているケースもあると思いますが、今後はそちらの接続は切れます。
$ sudo systemctl restart amazon-ssm-agent
AWS Systems Manager > フリートマネージャー をみると、mi-というついたインスタンスが見えます。 これがアクティベーションされたインスタンスです。
なお、アクティべーション作成時に「デフォルトのインスタンス名」設定が無いと、インスタンス名が「-」になります。設定していたとしても、共通の名前になってしまうのでどれがどのインスタンスがわからなくなるかもしれません。
フリートマネージャーの画面では「コンピュータ名」「IPアドレス」も表示可能に設定できるので、そちらを見るといいかもしれません。
Systems Managerから他アカウントのEC2インスタンスを操作する
パッチマネージャーを利用する
実際にパッチ適用を試しましたが、問題なくできました。
セッションマネージャーを利用する
セッションを開始 をクリックし、セッションマネージャーの利用を試みます。
すると、「Enable advanced-instances tier to use Session Manager with your on-premises instances」とエラーがでます。
アドバンスドへの変更
それでは、アドバンスドに変更しましょう。
アドバンスドにすると料金がかかると注意書きが表示されます。
詳細は 料金 - AWS Systems Manager | AWS を確認いただければと思いますが、本記事執筆時点では、0.00695USD/インスタンス/時間 となっています。 時間課金なので、必要な時だけアドバンスドにすれば良さそうです。
アドバンスへの変更後は、 セッションを開始 で普通にセッションマネージャーが使えるようになります。
スタンダードへの変更
料金節約のため、スタンダードに戻しましょう。
まとめ
AWS Systems Managerは様々な機能を持ち、全てを把握するのは難しいです。ただ、自アカウントのEC2インスタンス以外も簡単に管理対象にできるので、仮想マシン管理のプラットフォームとしてはかなり有効なのではないかと感じました。
孤立している仮想マシンは、とりあえず登録しておくと良さそうです。
渡辺 信秀(記事一覧)
2017年入社 / 地味な内容を丁寧に書きたい