Help us understand the problem. What is going on with this article?

[JAWS-UG CLI] CloudTrail:#1 CloudTrail入門 (+ SNS通知テスト)

More than 5 years have passed since last update.

http://jawsug-cli.doorkeeper.jp/events/18569 でのハンズオン資料です。

AWS CLIを利用して、CloudTrailの設定をしてみます。

前提条件

CloudTrailへの権限

概ね以下の権限が必要です。

権限
    {
      "Effect": "Allow",
      "Action": [
        "cloudtrail:CreateTrail",
        "cloudtrail:DescribeTrails",
        "cloudtrail:GetTrailStatus",
        "cloudtrail:StartLogging",
        "cloudtrail:UpdateTrail"
      ],
      "Resource": "*"
    }

AWS CLIのバージョン

以下のバージョンで動作確認済

  • AWS CLI 1.7.0

0. 事前作業

0.1. リージョンの指定

リージョンを指定します。

コマンド
export AWS_DEFAULT_REGION='ap-northeast-1'

このハンズオンでは、AWS標準のリージョン変数を利用していますが、regionオプションでコマンド毎に指定しても同様の結果になります。
( 「オペミスを回避するために明示的に実行する」という意味ではregionオプションの方が良いです。)

0.2. S3バケット名の決定

ここでは、trail-${AWS_DEFAULT_REGION}-${組織名}をバケット名とします。

コマンド
ORG_NAME='example-jp'
コマンド
S3_BUCKET_NAME="trail-${AWS_DEFAULT_REGION}-${ORG_NAME}" && echo ${S3_BUCKET_NAME}

0.3. S3キープレフィックスの決定

今回は、デフォルトのままにします。

デフォルト
/${キープレフィックス}/AWSLogs/XXXXXXXXXXXX/CloudTrail/${リージョン名}

0.4. SNSトピック名の決定

コマンド
SNS_TOPIC_NAME="trail-${AWS_DEFAULT_REGION}" && echo ${SNS_TOPIC_NAME}

新規に作成する場合: http://qiita.com/tcsh/items/e05e21e7338668cbf3b8 1以降の手順

0.5. AWSアカウントIDの取得

S3のバケットポリシー作成のときに必要となります。

コマンド
AWS_ID=`aws iam get-user --query 'User.Arn' --output text | sed 's/^.*:://' | sed 's/:.*$//'` \
  && echo ${AWS_ID}

1. Trailの作成

1.1. Trail名の決定

コマンド
TRAIL_NAME="trail-${AWS_DEFAULT_REGION}" && echo ${TRAIL_NAME}

1.2. Trailの作成

コマンド
aws cloudtrail create-trail \
  --name ${TRAIL_NAME} \
  --s3-bucket-name ${S3_BUCKET_NAME} \
  --sns-topic-name ${SNS_TOPIC_NAME}
結果
{
    "IncludeGlobalServiceEvents": true, 
    "Name": "trail-ap-northeast-1", 
    "SnsTopicName": "trail-ap-northeast-1", 
    "S3BucketName": "trail-ap-northeast-1-example-jp"
}

1.3. Trailの内容確認

コマンド
aws cloudtrail describe-trails --trail-name-list ${TRAIL_NAME}
結果
{
    "trailList": [
        {
            "IncludeGlobalServiceEvents": true, 
            "Name": "trail-ap-northeast-1", 
            "SnsTopicName": "trail-ap-northeast-1", 
            "S3BucketName": "trail-ap-northeast-1-example-jp"
        }
    ]
}

2. CloudTrailロギングの開始

2.1. ロギングの状態確認

コマンド
aws cloudtrail get-trail-status --name ${TRAIL_NAME}
結果
{
    "IsLogging": false
}

2.2. ロギングの開始

コマンド
aws cloudtrail start-logging --name ${TRAIL_NAME}
結果
(戻り値なし)

2.3. ロギングの状態確認

コマンド
aws cloudtrail get-trail-status --name ${TRAIL_NAME}

ロギング開始直後は下記の内容が表示されます。

結果
{
    "IsLogging": true, 
    "StartLoggingTime": 1421652962.51
}

10分ほどまって、S3バケットにログが保存されると、以下の内容に変化します。

結果
{
    "StartLoggingTime": 1421652962.51, 
    "IsLogging": true, 
    "LatestDeliveryTime": 1421653022.589
}

3. SNS通知を確認

SNSトピックを購読したメールアドレスに、通知が届いているはずなので確認しましょう。

4. ログの確認

4.1. ログ確認

S3バケットにログファイルが作成されていることを確認します。

コマンド
aws s3 ls s3://${S3_BUCKET_NAME}/AWSLogs/${AWS_ID}/CloudTrail/${AWS_DEFAULT_REGION}/`date -u +%Y`/`date -u +%m`/`date -u +%d`/
結果
2015-01-19 14:29:42        980 XXXXXXXXXXXX_CloudTrail_ap-northeast-1_20150119T0530Z_XgjNcNlurtSBMnGv.json.gz

4.2. ログをローカルに転送

コマンド
aws s3 sync "s3://${S3_BUCKET_NAME}/AWSLogs/${AWS_ID}/CloudTrail/${AWS_DEFAULT_REGION}/`date -u +%Y`/`date -u +%m`/`date -u +%d`/" .
結果(例)
download: s3://trail-ap-northeast-1-example-jp/AWSLogs/XXXXXXXXXXXX/CloudTrail/ap-northeast-1/2015/01/19/XXXXXXXXXXXX_CloudTrail_ap-northeast-1_20150119T0530Z_XgjNcNlurtSBMnGv.json.gz to ./XXXXXXXXXXXX_CloudTrail_ap-northeast-1_20150119T0530Z_XgjNcNlurtSBMnGv.json.gz

4.3. ログを展開

コマンド
gunzip -d ${AWS_ID}*json.gz

4.4. ログの閲覧

jsonlintを通すと読みやすくなります。

コマンド
cat ${AWS_ID}*json | jsonlint

5. 通知の停止

SNSトピックへの通知を停止しておきます。

コマンド
aws cloudtrail update-trail --name ${TRAIL_NAME} --sns-topic-name "" 

完了

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away