Amazon LightsailをAWS Systems Managerに登録してみた #reinvent

2017.12.13

はじめに

AWS Systems Managerでは、EC2およびオンプレミスサーバー、仮想マシンをマネージドインスタンスとして登録し、管理できます。
Lightsailインスタンスを登録し、インベントリを収集してみました。
あわせてAWS Configを有効化し、アプリケーションなどのインベントリの変更を追跡できる事を確認しました。

IAMサービスロールの作成

LightsailインスタンスがSystems Managerを通信するためにIAMロールが必要です。
IAMロールはAWSアカウントにつき、1つ作成します。

AWS CLIでサービスロールを作成

AWS CLIでサービスロールを作成します。
以下のファイルを作成し、SSMService-Trust.jsonとして保存します。

{
  "Version": "2012-10-17",
  "Statement": {
    "Effect": "Allow",
    "Principal": {"Service": "ssm.amazonaws.com"},
    "Action": "sts:AssumeRole"
  }
}

"create-role"コマンド、"attach-role-policy"を実行します。

$ aws iam create-role --role-name SSMServiceRole --assume-role-policy-document file://SSMService-Trust.json
{
    "Role": {
        "AssumeRolePolicyDocument": {
            "Version": "2012-10-17",
            "Statement": {
                "Action": "sts:AssumeRole",
                "Effect": "Allow",
                "Principal": {
                    "Service": "ssm.amazonaws.com"
                }
            }
        },
        "RoleId": "AROAJH22UX6TIYEY5OF2E",
        "CreateDate": "2017-12-13T02:14:06.306Z",
        "RoleName": "SSMServiceRole",
        "Path": "/",
        "Arn": "arn:aws:iam::123456789012:role/SSMServiceRole"
    }
}
$ aws iam attach-role-policy --role-name SSMServiceRole --policy-arn arn:aws:iam::aws:policy/service-role/AmazonEC2RoleforSSM

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

Systems Managerコンソールから、Activationsを選択し、先ほど作成したSSMServiceRoleを指定します。
アクティベーションの有効期限は、「2017-12-13T18:00+0900」といった形式で指定します。

アクティベーションの作成を選択すると、アクティベーションコードとIDが表示されます。
コードとIDは後ほど利用すので、控えておきます。

SSMエージェントのインストールとアクティベーション

LightsailにSSMエージェントをインストールし、アクティベーションします。
Ubuntuの場合、以下のコマンドを実行します。
「amazon-ssm-agent -register」コマンドの"code"にはアクティベーションコード、idはアクティベーションIDに置き換えてください。

mkdir /tmp/ssm
sudo curl https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/debian_amd64/amazon-ssm-agent.deb -o /tmp/ssm/amazon-ssm-agent.deb
sudo dpkg -i /tmp/ssm/amazon-ssm-agent.deb
sudo service amazon-ssm-agent stop
sudo amazon-ssm-agent -register -code "code" -id "id" -region "ap-northeast-1"
sudo service amazon-ssm-agent start

他のOSについては、ユーザーガイドの"Install the SSM Agent on Servers and VMs in Your Linux Hybrid Environment"をご覧ください。

コマンドに成功すると、マネージドインスタンスに登録されます。

インベントリの有効化

Lightsailの情報を収集してみます。
State Managerを選択し、関連付けを作成します。
コマンドドキュメント"AWS-GatherSoftwareInventory"を作成します。

1時間ごとにLightsailインスタンスのInventoryを収集します。

インベントリの収集に成功すると、Lightsailにインストールされたアプリケーションのバージョンを確認できます。
Lightsailにログインせずとも脆弱性のあるソフトウェアを使っていないか確認する といった用途で利用できます。

AWS Configを有効化しておけば、アプリケーションの変更を記録、追跡できます。
AWS Configコンソールから、リソース"SSM: ManagedInstanceInventory"で検索します。
変更が発生すると、タイムラインが作成されます。

変更の例をみてみましょう。
検証では、UbuntuのLightsailを利用しました。
Ubuntuでアップデートコマンドを実行すると、各種ソフトウェアのバージョンアップが行われました。
例えば、「python3.4_3.4.3-1ubuntu1~14.04.5_amd64.deb」が「python3.4_3.4.3-1ubuntu1~14.04.6_amd64.deb」にアップデートされた事がわかります。
アップデートによってアプリケーションが正しく動かなかくなった時のトラブルシューティングや、監査などに役立てられます。

さいごに

AWS Systems Managerでは、EC2およびオンプレミスサーバー、仮想マシンをマネージドインスタンスとして登録し、管理できます。
Lightsailインスタンスを登録し、インベントリを収集してみました。
インベントリを収集しておけば、OSにログインせずともアプリケーション情報などを確認できます。
更にAWS Configを有効化しておけば、OSの変更を追跡できるためトラブルシューティングや監査などに役立てる事ができます。
Lightsailを利用する際は、AWS Systems ManagerとAWS Configの有効化を検討してみてください。

検証環境

  • Lightsailインスタンス: Linux/Unix,WordPress(Ubuntu 14.04.5 LTS)

参考