AWSの操作履歴を記録するCloudTrailを試してみた

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

re:Invent 2013にてAWSの新機能CloudTrailのリリースが発表されました。
CloudTrailとは簡単に言えば、Management Console、SDK、コマンドラインツールなどAWSに対して何か操作した履歴を記録する機能です。

 

Ct00

 

このCloudTrail を手探りでいじってみましたのでご紹介します。


 

AWS CLIから使ってみる

Management Consoleからの使い方はAmazon Web Servicesブログで紹介されていますので、AWS CLI(コマンドラインツール)から使ってみます。

 

準備

AWS CLIはバージョン1.2.5でないとCloudTrailを使えません。
まずバージョンアップします。

$ sudo pip install --upgrade awscli

終わったら

$ aws cloudtrail help

と、実行してヘルプが表示されれば使えます。

 

使ってみる

まずSubscribeしないといけません。やってみます。

$ aws cloudtrail create-subscription --name test
Service cloudtrail not available in region ap-northeast-1

…まだ東京リージョンでは使えないみたいです。

「こういう初物はまずus-east-1でしょう」ということで、us-east-1で試してみます。

$ aws cloudtrail create-subscription --name test --region us-east-1 --s3-new-bucket traillog
Setting up new S3 bucket traillog...
Creating/updating CloudTrail configuration...
CloudTrail configuration:
{
  "trailList": [
    {
      "IncludeGlobalServiceEvents": true,
      "Name": "test",
      "S3BucketName": "traillog"
    }
  ]
}
Starting CloudTrail service...
Logs will be delivered to traillog:None

できたみたいです。
今回はこのためにS3バケットを作りました。既存のバケットを使う場合はCloudTrailを許すポリシーの設定が必要です。

 ステータスを見てみます。

$ aws cloudtrail get-trail-status --name test --region us-east-1
{
    "LatestDeliveryAttemptTime": "2013-11-13T19:30:43Z",
    "LatestNotificationAttemptSucceeded": "",
    "LatestDeliveryAttemptSucceeded": "2013-11-13T19:30:43Z",
    "IsLogging": true,
    "TimeLoggingStarted": "2013-11-13T19:32:16Z",
    "LatestNotificationAttemptTime": "",
    "TimeLoggingStopped": ""
}

こんな感じです。

履歴を見てみる

手っ取り早くManagement Consoleで履歴が記録されているS3バケットを見てみましょう。


Ct03


隠してある部分はアカウントIDです。

上記の1つのファイルをダウンロードして内容を見てみましょう。


$ cat XXXXXXXXXXX_CloudTrail_us-east-1_20131113T1925Z_KabuTJwwiyfAcFO1.json | jq "."
{
  "Records": [
    {
      "responseElements": null,
      "requestParameters": {
        "trail": {
          "name": "traillog",
          "s3BucketName": "traillog"
        }
      },
      "errorMessage": "User: XXXXXXXXXXXX already has 1 trails.",
      "errorCode": "User: XXXXXXXXXXXX already has 1 trails.",
      "eventVersion": "1.0",
      "userIdentity": {
        "accessKeyId": "XXXXXXXXXXXXXXXXXXXX",
        "accountId": "XXXXXXXXXXX",
        "arn": "arn:aws:iam::XXXXXXXXXXX:root",
        "principalId": "XXXXXXXXXXXX",
        "type": "Root"
      },
      "eventTime": "2013-11-13T19:26:40Z",
      "eventSource": "cloudtrail.amazonaws.com",
      "eventName": "CreateTrail",
      "awsRegion": "us-east-1",
      "sourceIPAddress": "54.249.XXX.XXX",
      "userAgent": "aws-cli/1.2.5 Python/2.6.9 Linux/3.2.38-5.48.amzn1.x86_64"
    },
    {
      "responseElements": null,
      "requestParameters": {
        "trail": {
          "name": "traillog",
          "includeGlobalServiceEvents": true,
          "s3BucketName": "traillog"
        }
      },
      "errorMessage": "User: XXXXXXXXXXXXX already has 1 trails.",
      "errorCode": "User: XXXXXXXXXXXX already has 1 trails.",
      "eventVersion": "1.0",
      "userIdentity": {
        "accessKeyId": "XXXXXXXXXXXXXXXXXXX",
        "accountId": "XXXXXXXXXXX",
        "arn": "arn:aws:iam::XXXXXXXXXXXX:root",
        "principalId": "XXXXXXXXXXXX",
        "type": "Root"
      },
      "eventTime": "2013-11-13T19:28:56Z",
      "eventSource": "cloudtrail.amazonaws.com",
      "eventName": "CreateTrail",
      "awsRegion": "us-east-1",
      "sourceIPAddress": "54.249.XXX.XXX",
      "userAgent": "aws-cli/1.2.5 Python/2.6.9 Linux/3.2.38-5.48.amzn1.x86_64"
    }
  ]
}

アクセスキーIDやアカウントIDまで記録されています(上記では隠してます)
ブログではさらりと書いていますが、試行錯誤した跡がバッチリ記録されています。
JSON形式で保存されていますので、どうにでもうまいこと再利用できそうです。

コマンドの種類や使い方があるリファレンスはこちらにあります。

 

終わりに

まだ(2013年11月14日5時過ぎ)東京リージョンでは使えないようですが、使えるようになれば上記のように簡単に履歴の取得をセットができて、記録されるようになります。
「このEC2インスタンス消したの誰?」などとこれまで訊いて回らないといけなかった場面もあったかと思いますが、これで遡及できたりします。 
今回はひとまず試してみた程度ですので、今後詳しく調べてみたいと思います。