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.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}
- 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"
}
]
}
- 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
}
- SNS通知を確認
============================
SNSトピックを購読したメールアドレスに、通知が届いているはずなので確認しましょう。
- ログの確認
============================
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
- 通知の停止
===============
SNSトピックへの通知を停止しておきます。
aws cloudtrail update-trail --name ${TRAIL_NAME} --sns-topic-name ""