Systems Managerで他アカウントのEC2インスタンスを管理する

記事タイトルとURLをコピーする

「そのAWSアカウントの管理は私の担当では無いんですけど、そこにあるEC2インスタンス1台だけは運用保守しなくちゃいけないんです。」

AWS Systems Managerなら可能です!
ハイブリッドアクティベーションを利用しましょう。

Systems Manager は、通常はAWSアカウント内のEC2インスタンスを管理対象とします。 しかし、異なるAWSアカウントのEC2インスタンスやオンプレ仮想マシンも管理対象として登録可能です。

これは AWS Systems Manager ハイブリッドアクティベーション と呼ばれます。

ハイブリッドアクティベーションの設定

公式ドキュメントは、こちらです。

アクティベーションの作成

Systems Managerを動かすアカウントで作業します。
AWS Systems Manager > ハイブリッドアクティベーション > アクティベーションの作成

f:id:swx-watanabe:20210729091040p:plain

パラメータを設定します。

f:id:swx-watanabe:20210729093705p:plain

①アクティベーションの説明- オプション
最大 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 CodeActivation ID が表示されるのでメモしておきます。

f:id:swx-watanabe:20210729095021p:plain

なお、ここで作成したアクティベーションはブログ公開時には削除済みなので、上記画像では敢えて隠していません。

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 > アクティベーション をみると、カウントアップしています。 f:id:swx-watanabe:20210729101316p:plain

ただ、新しい設定を有効にするためにamazon-ssm-agentを再起動する必要があります。
なお、EC2インスタンスが自アカウントのSystems Managerで管理されているケースもあると思いますが、今後はそちらの接続は切れます。

$ sudo systemctl restart amazon-ssm-agent

AWS Systems Manager > フリートマネージャー をみると、mi-というついたインスタンスが見えます。 これがアクティベーションされたインスタンスです。

f:id:swx-watanabe:20210729102033p:plain

なお、アクティべーション作成時に「デフォルトのインスタンス名」設定が無いと、インスタンス名が「-」になります。設定していたとしても、共通の名前になってしまうのでどれがどのインスタンスがわからなくなるかもしれません。
フリートマネージャーの画面では「コンピュータ名」「IPアドレス」も表示可能に設定できるので、そちらを見るといいかもしれません。

Systems Managerから他アカウントのEC2インスタンスを操作する

パッチマネージャーを利用する

実際にパッチ適用を試しましたが、問題なくできました。 f:id:swx-watanabe:20210729103819p:plain

セッションマネージャーを利用する

セッションを開始 をクリックし、セッションマネージャーの利用を試みます。

f:id:swx-watanabe:20210729105548p:plain

すると、「Enable advanced-instances tier to use Session Manager with your on-premises instances」とエラーがでます。

f:id:swx-watanabe:20210729105126p:plain

アドバンスドへの変更

それでは、アドバンスドに変更しましょう。

f:id:swx-watanabe:20210729105448p:plain

f:id:swx-watanabe:20210729110141p:plain

f:id:swx-watanabe:20210729110314p:plain

アドバンスドにすると料金がかかると注意書きが表示されます。

詳細は 料金 - AWS Systems Manager | AWS を確認いただければと思いますが、本記事執筆時点では、0.00695USD/インスタンス/時間 となっています。 時間課金なので、必要な時だけアドバンスドにすれば良さそうです。

アドバンスへの変更後は、 セッションを開始 で普通にセッションマネージャーが使えるようになります。

スタンダードへの変更

料金節約のため、スタンダードに戻しましょう。

f:id:swx-watanabe:20210729110558p:plain

f:id:swx-watanabe:20210729110629p:plain

まとめ

f:id:swx-watanabe:20210729191141p:plain

AWS Systems Managerは様々な機能を持ち、全てを把握するのは難しいです。ただ、自アカウントのEC2インスタンス以外も簡単に管理対象にできるので、仮想マシン管理のプラットフォームとしてはかなり有効なのではないかと感じました。

孤立している仮想マシンは、とりあえず登録しておくと良さそうです。

渡辺 信秀(記事一覧)

2017年入社 / 地味な内容を丁寧に書きたい