クラウド操作ログ管理の方法(AWS CloudTrail編)

作成日 2014/12/25
更新日 2016/6/30

 

概要

この技術情報では、Amazon Web Services(以下、AWS)のアカウントのAWS API呼出しの記録(以下、AWS操作ログ)を取得し、蓄積とログ監視する方法を説明します。これは、AWS操作ログをローカルサーバに取得し加工し、Hinemosによって監視することで実現します。AWS操作ログをローカルサーバに取得し加工するスクリプト(クラウド操作ログ取得スクリプト)は、本技術情報からダウンロードできます。

この技術情報は、AWS上でシステムを構築しようとしている、または既に構築済みのユーザを対象としています。

 

課題

オンプレミス環境や仮想化環境でのシステム構築においては、物理的に隔離された環境(社内設備、データセンタ等)を利用していました。しかし、パブリッククラウドへのシステムの導入により、インフラ(仮想サーバやネットワーク)の操作など様々なことがWebブラウザ・API経由で操作できるようになり、これが適切な運用にて行われているかを確認する必要があります(セキュリティの観点)。例えば、運用開始後のシステムにおいて、次のようなケースでアラートを上げたいという要望があります。

 

ユースケース① 未承認のEC2作成
ユースケース② セキュリティグループの変更
ユースケース③ 権限のないアクセス

 

またリソースの変更が簡易に出来ることで、運用しているシステムへの影響が出た場合の障害切り分けが困難になります。そのため、リソースの変更とシステムの状態を紐づけて管理する必要性が出てきています(障害解析の観点)。

Hinemosにより予期せぬクラウドの環境変更に対してユーザにアラートを上げたり、AWS操作ログを蓄積管理することが出来ます。

 

メリット

この技術情報を用いることでユーザが得られるメリットについて説明します。

簡単なセットアップ

簡単なセットアップで、パブリッククラウドの操作ログの管理が可能になります。

Hinemosの統合管理のための機能を利用可能

ログ管理というとログ管理製品での実現という選択肢もありますが、統合運用管理製品であるHinemosを利用することで、様々な手段でのユーザへの通知、異常検知時のジョブ起動による運用自動化、業務カレンダによるアラートの抑制まで、様々な機能と連携することができます

前提条件

この技術情報を用いる上で前提条件を説明します。

・AWSアカウント
 読者のAWSアカウントを利用します。
 このアカウントでは、AWS CloudTrailの機能の有効化が必要です。
 クラウド操作ログ取得スクリプトは、AWS CLIにてAWS CloudTrailにアクセスするため、アクセスキー、シークレットキーが必要になります。

対象環境

この技術情報を適用する環境について説明します。本技術情報では、CentOS 6.5、Hinemos v4.1の環境を想定します。

クラウド操作ログ取得スクリプトの動作環境

 

・インターネットに接続可能なLinuxサーバ
 AWSのエンドポイントに接続可能なインターネット接続環境が必要です。
 オンプレミス環境、仮想化環境、パブリッククラウド環境上の何れも問いません。

 

・AWS CLI、pythonのインストール
 AWS CLI、pythonを使用します。
 セットアップ方法はクラウド操作ログ取得スクリプトのREADMEを参照してください。

 

・Hinemosのインストール不要
 クラウド操作ログ取得スクリプトを動作させるだけの場合には、Hinemosのインストールは不要です。

 

本技術情報の動作環境

Hinemosを使ってAWS操作ログの監視や蓄積をするため、クラウド操作ログ取得スクリプトの動作するサーバにHinemosエージェントのインストールが必要になります。スモールセットの環境は以下の通りです。

実現方法/解決策

技術情報を実現する方法について説明します。

 

1.クラウド操作ログ取得スクリプトのセットアップ
2.Hinemosログファイル監視設定

 

1.クラウド操作ログ取得スクリプトのセットアップ

[AWS CloudTrailとは]
AWS CloudTrailはAWSアカウントで利用されたAPI Callを記録しログに保存するサービスです。クラウド操作ログ取得スクリプトは、AWS CloudTrailを利用します。

 

記録される情報には、以下のようなものが含まれます。

 

- APIを呼び出した身元(Who)
- APIを呼び出した時間(When)
- APIを呼び出し元のSource IP(Where)
- 呼び出されたAPI(What)
- APIの対象となるAWSリソース(What)

 

通常、15分以内に呼び出されたAPI Callのイベントをログファイル(AWS操作ログ)としてS3に出力します。ログファイルはおおよそ5分毎に保管されます

 

AWS CloudTrail から出力されるAWS操作ログは、JSON形式になります。ログのバージョン、API操作の対象サービスによって、出力されるログの項目は変わる柔軟なフォーマットです。AWS CloudTrailにて出力されるイベントの詳細は、以下のリンクを参照して下さい。

 

CloudTrail Event Reference
(http://docs.aws.amazon.com/awscloudtrail/latest/userguide/event_reference_top_level.html)

 

[クラウド操作ログ取得スクリプトとは]
クラウド操作ログ取得スクリプトは、JSON形式のAWS CloudTrailのAWS操作ログに対して、ヘッダ項目を抽出し、Hinemos及び他のプログラムから操作が簡易にできるように1イベント1行に変換してローカルのファイルへ出力するプログラムです。

 

- JSON形式のAWS操作ログのラインコンバーター
 複数行で表示されるJSON形式のAWS操作ログを1イベント1行に変換します。

- ヘッダ項目を抽出
 1イベント1行に変換する際に、AWS操作ログとして重要なイベント出力時刻(eventTime)、対象リージョン(awsRegion)、操作対象のAPI名(eventName)等を抽出して、毎回既定の順で行の左側から表示されるようにします。

 

本スクリプトはLinuxのタスクスケジューラのcronで定期的に実行します。本スクリプトは次のファイルを出力します。<profile>は、AWS CLIにて指定するプロファイル名、<region>はAWSのリージョンのIDになります。

 

- Hinemosから監視する対象のログファイル
 /var/log/aws/cloudtrail/<profile>/cloudtrail_<region>.log

 

- AWS CloudTrailのログ
 /var/log/aws/cloudtrail_export/<profile>/<region>/YY/MM/DD/<cloudtrail log>

 

クラウド操作ログ取得スクリプトは以下のリンクからダウンロードしてください。

クラウド操作ログ取得スクリプト for AWS のダウンロード

V1.0.0(2014/12/25)

V1.0.1(2016/6/30)

セットアップ方法は、ダウンロードファイルの中に含まれるREADME.txtを参照してください。

 

2.Hinemosログファイル監視設定

Hinemosログファイル監視機能を使用して、cloudtrail_<region>.logを監視します。ログファイル監視の「チェック設定」の項目では、以下の内容を指定します。<profile>はユーザの環境によって異なるので適宜変更してください。

 

[ログファイル監視のチェック設定]

ディレクトリ:/var/log/aws/cloudtrail/<profile>
ファイル名(正規表現):cloudtrail_.*.log

ログファイル監視で設定するパターンマッチの例は次の「利用例/ユースケース」で紹介します。

 

利用例/ユースケース

技術情報を利用するシーンの例、ユースケースを説明します。

ユースケース① 未承認のEC2作成

                "eventVersion": "1.01",
                    "userIdentity": {
                      "type": "IAMUser",
                      "principalId": " ZZZZZZZZZZZZZZZZZZZZ”
                      "arn": "arn:aws:iam::000000000000:user/cltruser",
                      "accountId": "879268495141",
                      "accessKeyId": "ZZZZZZZZZZZZZZZZZZZZ",
                      "userName": "cltruser",
                      "sessionContext": {
                        "attributes": {
                          "mfaAuthenticated": "false",
                          "creationDate": "2014-08-05T02:41:31Z"
                        }
                      },
                      "invokedBy": "signin.amazonaws.com"
                    },
                    "eventTime": "2014-08-05T02:42:28Z",
                    "eventSource": "ec2.amazonaws.com",
                    "eventName": "RunInstances",
                

 

クラウドリソースの生成と削除は請求料金に大きく関わります。次のようなパターンマッチの設定が考えられます。

 

・eventNameの利用
・Run*|Create*|Launch*による検索
・Delete*|Terminate*による検索

 

ユースケース② セキュリティグループの変更

                   "eventVersion": "1.01",
                    "userIdentity": {
                      ….
                      },
                   "eventName": "AuthorizeSecurityGroupIngress",
                    ….
                      "groupId": "sg-32f60457",
                      "ipPermissions": {
                        "items": [
                          {
                            "ipProtocol": "tcp",
                            "fromPort": 0,
                            "toPort": 65535,
                            "groups": {},
                            "ipRanges": {
                              "items": [
                                {
                                  "cidrIp": "0.0.0.0/0"
                
                

アクセスコントロールの変更は運用後のシステムでは非常に大きな事項です。次のようなパターンマッチの設定が考えられます。

 

・AuthorizeSecurity*による検索
・CreateNetworkAclEntroy*による検索

 

また、特に注意すべき事項を監視するという手段があります。

・0.0.0.0/0 のようなParameter
・ "fromPort": 0 "toPort": 65535

 

ユースケース③ 権限のないアクセス

                    {
                    "eventVersion": "1.01",
                    "userIdentity": {
                     …..
                      "userName": "cltruser",
                      "sessionContext": {
                        "attributes": {
                          "mfaAuthenticated": "false",
                          "creationDate": "2014-08-05T02:41:31Z"
                        }
                      },
                      "invokedBy": "signin.amazonaws.com"
                    },
                    ….
                    "errorCode": "AccessDenied",
                    "errorMessage": "User: arn:aws:iam:: 000000000000:user/cltruser is not authorized to perform: iam:ListInstanceProfiles on resource: arn:aws:iam:: 000000000000:instance-profile/",
                
                

認証の失敗によるエラーの抽出もセキュリティの観点で重要です。次のようなパターンマッチの設定が考えられます。

 

・errorCodeの利用
・Unauthorized*による検索
・AccessDenied*による検索

 

 

アラートを上げたいものを正規表現で指定し、それ以外は「.*」で指定する事で全てのログをHinemosのイベントとして蓄積することもできます。
それ以外にも、クラウド操作ログ取得スクリプトはローカルのディレクトリにCloudTrailの最新のAWS操作ログをダウンロードしてくれるので、このファイルをS3とは別に長期保管ということも可能です。

免責事項

本ソフトウェアの使用・本ドキュメントに従った操作により生じたいかなる損害に対しても、 弊社は一切の責任を負いません。

 

注意事項

本ドキュメントの内容を実施すると、AWSにおいて料金が発生する場合があります。AWSの料金体系等を理解した上で操作を実施してください。
本ドキュメントにおいて、2014年12月現在の AWSのサービスに従い記載しておりますが、AWSのサービス変更に伴い、これらの操作が変更となる可能性があります。

 

お問い合わせ

Hinemosクラウド管理オプション、クラウド仮想化オプション、その他Hinemos製品/サービスに関するお問合せは、

Hinemosパートナー企業、もしくは、NTTデータ Hinemos営業窓口までご相談ください。

 

ご相談・お問合せ

 

関連情報