【AWS】SSMを用いたシステム管理とデータ分析


はじめに

この記事は、AWS Innovateの[H-2] システム管理で使えるデータ分析ハンズオン:システム構成情報の収集と可視化についての記事です。
SSMやQuickSightを利用してサーバレスなシステム管理・分析できる仕組みについてハンズオンを行います。
EC2等を新規で立ち上げる必要があるので、ハンズオン用のアカウントを取得する方がいいかもしれません。

SSMとは

AWS Systems Managerの略です。

AWS Systems Manager は、AWS でインフラストラクチャを表示および制御するために使用できる AWS のサービスです。Systems Manager コンソールを使用すると、複数の AWS のサービスのオペレーションデータを表示して、AWS リソース間でオペレーションタスクを自動化することができます。Systems Manager は、マネージドインスタンスをスキャンして、ポリシーの違反が検出された場合にはレポート (または是正策の措置) を行うことで、セキュリティを維持するのに役立ちます。

ハンズオン開始

IAMロールを作成する

EC2上でSSMのサービスを利用するためのロールを作成します。

AWSマネジメントコンソールから、IAMのページを開きます。
IAMロールを新規作成するので、ロールの作成をクリックします。
「ロールの作成」ページが表示されたら、EC2を選択し、右下の次のステップ:アクセス権限をクリックします。

ポリシーをアタッチする画面が表示されたら、フィルタの部分で「ssm」と検索します。
検索結果の中から、AmazonSSMManagedInstanceCoreにチェックをつけます。

チェックをつけたら、右下の次のステップ:タグをクリックします。

タグの追加は、任意の項目なので、追加する必要はありませんので、右下の次のステップ:確認をクリックします。

ロール名には、任意の名前を指定してください。
例)IAMRole-SSMRole-innovate2020spring

名前の入力が完了したら、右下のロールの作成をクリックします。

EC2のSSMについて

Amazonが配布しているイメージにはSSMのエージェントが含まれているため、IAMロールを付与してパブリックネットワークで起動すれば、SSMの管理下になります。
プライベートリンクを利用する事で、完全にプライベートなインスタンスもSSMで管理する事が可能です。

今回のハンズオンではSSHやRDPでの接続は行わないため、セキュリティーグループやキーペアを利用しないインスタンスを作成します。

EC2インスタンスの立ち上げ(Linux)

AWSマネジメントコンソールでサービスメニューからEC2を開きます。
左のメニューから、インスタンスを選択します。
インスタンスのページが表示されたら、インスタンスの作成をクリックして、インスタンスの作成を行います。

ステップ 1: Amazon マシンイメージ (AMI)

左のメニューでクイックスタートを選択し、一番上のAmazon Linux 2 AMI (HVM), SSD Volume Typeを選択します。

ステップ 2: インスタンスタイプの選択

「t2.micro」を選択して、次のステップ:インスタンスの詳細設定を選択します。

ステップ 3: インスタンスの詳細の設定

ネットワーク設定はSSMエージェントへアクセスできる必要があるため、パブリックサブネットもしくは、プライベートサブネットにプライベートリンクを設定したネットワークを指定してください。

今回は、デフォルトのネットワークを利用します。 

IAMロールの設定には、先ほど作成したIAMロールを選択します。

そのほかの設定は触りませんので、次のステップ:ストレージの追加をクリックします。

ステップ 4: ストレージの追加

ここでは、何も変更しませんので、次のステップ:タグの追加をクリックします。

ステップ 5: タグの追加

インスタンスの名前を指定します。
タグの追加を選択し、キーにName、値に任意の名前を選択してください。
名前例)innovate2020spring-linux01

名前が指定できたら、次のステップ:セキュリティグループの設定をクリックします。

ステップ 6: セキュリティグループの設定

既存のセキュリティグループを選択するをクリックします。
「default」というセキュリティグループが存在すると思いますので、そちらを選択します。
確認と作成をクリックします。

ステップ 7: インスタンス作成の確認

IAMが正しく正しく設定されているかを確認して、起動ボタンをクリックします。

既存のキーペアを選択するか、新しいキーペアを作成します。

今回は、SSHやRDPする必要がないので、キーペアなしで続行を選択し、インスタンスの作成をクリックします。

EC2インスタンスの立ち上げ(Windows)

AWSマネジメントコンソールでサービスメニューからEC2を開きます。
左のメニューから、インスタンスを選択します。
インスタンスのページが表示されたら、インスタンスの作成をクリックして、インスタンスの作成を行います。

ステップ 1: Amazon マシンイメージ (AMI)

「クイックスタート」から、少し下のMicrosoft Windows Server 2019 Base with Containersを選択します。

以降の手順は上記のLinuxと同様に設定します。

起動の確認

EC2インスタンスの確認画面で、2つのインスタンスが存在していることを確認できると思います。
インスタンスが立ち上がり次第、SSMエージェントが起動します。(ステータスチェックも完了している必要があります。)

SSMインベントリの設定

サービスの検索で、SSMと入力して、System Managerを選択します。
左のメニューからマネージドインスタンスを選択します。

ページが開くと、先ほど起動したインスタンスが表示されている事が確認できると思います。
ここに2つ表示されていない場合は、上記の手順で起動した際に設定が上手くできていないか、インスタンスが起動していない可能性があります。

左のメニューからインベントリを選択します。
ページが開いたら、セットアップインベントリをクリックします。

セットアップインベントリ

名前
任意の名前を指定できます。
例)Inventory-innovate2020-spring

ターゲット
「このアカウントのすべてのマネージドインスタンスの選択」を選択します。

スケジュール
30分に指定します。

パラメータ
デフォルトのままにします。

詳細設定
今回はS3に書き込まないので、チェックは外しておきます。

さいごに
右下のセットアップインベントリボタンをクリックします。

SSMインベントリの確認

SSMの左のメニューからインベントリを選択します。
インベントリのダッシュボードの下に「対応するマネージドインスタンス」内のインスタンスIDを選択します。

インベントリタブを選択する事で、様々なタイプのインベントリを抽出する事が可能です。

リソースデータの同期

SSM Resource Data Syncを利用して、Inventoryの情報をS3に適宜出力します。
その後、Glue Crawlerを利用して、S3を12時間ごとにクロールして情報を集めます。

S3バケットの作成

今回のハンズオン用に新たなバケットを作成することをおすすめします!

サービスの選択から、S3を選択します。
表示された画面でバケットの作成を選択します。

バケット名
一意のバケット名を指定してください。
他者が既に使用しているバケット名は使用できません。
例)ssm-inventory-innovate2020-spring-1234567

リージョン
今回は、インスタンスの作成などで作業をしてきたリージョンを選択します。

上記の設定が完了したら、作成を選択します。

バケットポリシーの変更

作成したバケット名をクリックし、バケットの詳細画面を開きます。
その後、上部のアクセス権限ボタンを押し、バケットポリシーボタンを押します。

こちらのページのバケットポリシー例をJSONをエディタ内に記述していきます。
下記のjson内の
"Resource":"arn:aws:s3:::bucket-name"

"arn:aws:s3:::bucket-name/bucket-prefix/*/accountid=account-id-1/*"
はbacket-nameやアカウントIDを変更する必要があります。

記述する内容.json
{
   "Version":"2012-10-17",
   "Statement":[
      {
         "Sid":"SSMBucketPermissionsCheck",
         "Effect":"Allow",
         "Principal":{
            "Service":"ssm.amazonaws.com"
         },
         "Action":"s3:GetBucketAcl",
★★★★★    "Resource":"arn:aws:s3:::bucket-name"★★★★★
      },
      {
         "Sid":" SSMBucketDelivery",
         "Effect":"Allow",
         "Principal":{
            "Service":"ssm.amazonaws.com"
         },
         "Action":"s3:PutObject",
         "Resource":[
★★★★★       "arn:aws:s3:::bucket-name/*/accountid=account-id-1/*" ★★★★★★★★★
         ],
         "Condition":{
            "StringEquals":{
               "s3:x-amz-acl":"bucket-owner-full-control"
            }
         }
      }
   ]
}

Jsonの内容を修正できたら、右上の保存ボタンを選択します。

以上でインベントリのバケットの作成は完了です。

SSMのリソースデータの同期設定

サービスの選択でSSMを選択し、SSMの画面を開きます。
画面が開いたら、左のメニュー画面から、インベントリを選択します。
インベントリの画面が開いたら、右上のリソースデータの同期ボタンをおします。

リソースデータの同期の一覧画面が開いたら、右上のリソースデータの同期の作成をクリックします。

同期名
好きな名前をつける事ができます。
例)InventoryResourceDataStnc-innovate2020spring

バケット名
先ほど作成したS3のバケット名を設定します。

バケットプレフィックス
今回は作成していないので、指定する必要はありません。 

バケットのリージョン
デフォルトの設定で問題ありません。

SSMリソースデータの同期設定の完了

リソースデータの同期一覧画面で作成が成功していることを確認してください。
データの同期を待ちます。この間に、GlueがアクセスするためのIAMロールやクローリングが実行されます。
数分経過後に完了しているかを確認します。

同期情報の確認

左のメニューのインベントを選択します。
詳細ビューのタブを選択し、リソースデータの同期のプルダウンから先ほど作成したリソースデータを選択します。

同期ができているかを確認するために、「インベントリタイプ」のプルダウンから、AWS:Applicationを選択してみましょう。
10秒程度でデータが表示されれば、正常に同期できています。

QuickSightのアカウント作成

サービスの一覧からQuickSightを選択します。
初めて利用する場合は、サインアップが求められるので、Sign up for QuickSightをクリックします。

その後、アカウントのエディションを選択する画面が出てくるので、Standardを選択し、Confirmをクリックします。
必要な情報を入力していきます。

QuickSight region
今まで作業を進めてきたリージョンを選択します。
リージョンの選択で、Tokyoを選択すると言語の設定が日本語に切り替わります。

QuickSight アカウント名
AWSのアカウントと紐付く全世界で一意な名前を指定する必要があります。
例)aws-innovate2020spring-123456

通知の E メールアドレス
自分のメールアドレスを設定してください。

その他の項目について

  • Enable autodiscovery of data and users in your Amazon Redshift, Amazon RDS, and AWS IAM services.
    チェックを入れます。
    和訳→「Amazon Redshift、Amazon RDS、およびAWS IAMサービスでデータとユーザーの自動検出を有効にします。」
  • Amazon Athena
    有効にします。
  • Amazon S3
    チェックを入れて、先ほど作成したS3バケットを選択します。
  • Amazon S3 ストレージ分析
    チェックなし
  • AWS IoT Analytics
    チェックなし

以上で設定は完了ですので、完了ボタンをクリックしてください。
アカウントが作成されるまで少々おまちください。

Amazon QuickSightのデータベース設定

QuickSightのページに移動したら、左上の新しい分析ボタンをクリックします。
そして、新しいデータセットをクリックします。

データソースの選択でAthenaを選択します。
「新規Athenaデータソース」という画面が出てくるので、データソース名に任意の名前を入力して、データソースを作成をクリックします。
例)ssm-inventory

データベースの選択画面が表示されますので、先ほど作成した、データベースを選択します。
その後、テーブルの選択画面が表示されますので、aws_applicationを選択します。
そして、選択をクリックします。

「データセットの作成を終了する」の画面では、データクエリを直接実行にチェックを入れてVisualizeボタンをクリックします。
ここで表示されているSPICEとは、QuickSight上で利用できるオンメモリであり、この機能を利用する事で、画面の表示などを高速に実行する事ができます。
今回はS3のデータをその都度取得するため、必要ありません。

QuickSightを用いた可視化

円グラフを用いた可視化

今回は、Applicationのデータを円グラフで可視化してみましょう。
左下のビジュアルタイプから円グラフを選択しましょう。

「グループ/色」の部分にarchitectureをドラッグ&ドロップします。

この円グラフは全てのインスタンス(今回は2台)のアーキテクチャの比率を表しています。

表を用いた可視化

特定パッケージのどのバージョンがインストールされているのかの表を作成します。

QuickSightの左上の追加ボタンから、ビジュアルを追加を選択します。

そして、左下のビジュアルタイプからテーブルを選択します。
「グループ化の条件」にnameversionをドラッグ&ドロップします。
「値」にnameをドラッグ&ドロップします。(ドラッグ&ドロップすると、name(カウント)となり、個数を表示する事ができます。

今回は、WindowsとLinuxが1台づつなので、全ての個数が1になりますが、台数が多くなった際に、どのバージョンがいくつ導入されているのかを把握する事が可能です。
これに、フィルタを追加する事で、特定のアプリケーションのみの個数を表示する事が可能です。

まとめ

簡単にシステムログの収集管理のダッシュボードを構築する事ができました。
QuickSightの使い心地がとても良さそうなので、システムログ管理以外の情報分析に利用してみたいなと思いました(^_^)