AWS CLIを利用して、CloudTrailのログをCloudWatchLogsに転送する設定をしてみます。
前提条件
CloudTrailへの権限
- CloudTrailに対してフル権限があること。
AWS CLIのバージョン
-
以下のバージョンで動作確認済
- AWS CLI 1.7.26
コマンド
aws --version
結果(例):
aws-cli/1.7.26 Python/2.7.5 Darwin/13.4.0
- 準備
=======
0.1. リージョンの決定
作成するTrailのリージョンを決めます。
(カレントユーザが利用するカレントリージョンも切り変わります。)
コマンド(アイルランドリージョンの場合)
export AWS_DEFAULT_REGION='eu-west-1'
0.2. 変数の確認
プロファイルとリージョンが想定のものになっていることを確認します。
変数の確認
aws configure list
結果(例):
Name Value Type Location
---- ----- ---- --------
profile cloudtrailFull-prjZ-mbp13iamFull-prjZ-mbp13 env AWS_DEFAULT_PROFILE
access_key ****************XXXX shared-credentials-file
secret_key ****************XXXX shared-credentials-file
region eu-west-1 env AWS_DEFAULT_REGION
0.3. Trail名の確認
変数の確認
cat << ETX
S3_BUCKET_NAME: ${S3_BUCKET_NAME}
ETX
0.4. ロギングの状態確認
コマンド
aws cloudtrail get-trail-status --name ${TRAIL_NAME}
結果:
{
"StartLoggingTime": 1421652962.51,
"IsLogging": true,
"LatestDeliveryTime": 1421653022.589
}
0.5. CloudWatch Logs ロググループ名の確認
コマンド
cat << ETX
LOG_GROUP_NAME: ${LOG_GROUP_NAME}
ETX
0.6. IAMロール名の確認
コマンド
cat << ETX
IAM_ROLE_NAME: ${IAM_ROLE_NAME}
ETX
- 事前作業
===========
1.1. ロググループのARN取得
コマンド
LOG_GROUP_ARN=`aws logs describe-log-groups --log-group-name-prefix ${LOG_GROUP_NAME} --query 'logGroups[].arn' --output text` \
&& echo ${LOG_GROUP_ARN}
結果(例):
arn:aws:logs:eu-west-1:XXXXXXXXXXXX:log-group:CloudTrail/DefaultLogGroup:*
1.2. IAMロールのARN取得
コマンド
IAM_ROLE_ARN=`aws iam get-role --role-name ${IAM_ROLE_NAME} --query 'Role.Arn' --output text` \
&& echo ${IAM_ROLE_ARN}
結果(例):
arn:aws:iam::XXXXXXXXXXXX:role/CloudTrail_CloudWatchLogs_Role-eu-west-1
- 本作業
=========
2.1. Trailの更新
変数の確認
cat << ETX
LOG_GROUP_ARN: ${LOG_GROUP_ARN}
IAM_ROLE_ARN: ${IAM_ROLE_ARN}
ETX
コマンド
aws cloudtrail update-trail \
--name ${TRAIL_NAME} \
--cloud-watch-logs-log-group-arn ${LOG_GROUP_ARN} \
--cloud-watch-logs-role-arn ${IAM_ROLE_ARN}
結果(例):
{
"IncludeGlobalServiceEvents": true,
"Name": "Default",
"S3BucketName": "trail-XXXXXXXXXXXX-eu-west-1",
"CloudWatchLogsRoleArn": "arn:aws:iam::XXXXXXXXXXXX:role/CloudTrail_CloudWatchLogs_Role-eu-west-1",
"CloudWatchLogsLogGroupArn": "arn:aws:logs:eu-west-1:XXXXXXXXXXXX:log-group:CloudTrail/DefaultLogGroup:*"
}
2.2. Trailの内容確認
コマンド
aws cloudtrail describe-trails --trail-name-list ${TRAIL_NAME}
結果:
{
"trailList": [
{
"CloudWatchLogsLogGroupArn": "arn:aws:logs:eu-west-1:XXXXXXXXXXXX:log-group:CloudTrail/DefaultLogGroup:*",
"IncludeGlobalServiceEvents": true,
"CloudWatchLogsRoleArn": "arn:aws:iam::XXXXXXXXXXXX:role/CloudTrail_CloudWatchLogs_Role-eu-west-1",
"Name": "DefaultDefault",
"S3BucketName": "trail-XXXXXXXXXXXX-eu-west-1"
}
]
}
- 事後作業
===========
3.1. IAMコマンドの実行
コマンド
aws iam list-users
3.2. ログ確認
CloudWatch Logsにログファイルが転送されていることを確認します。
コマンド
aws logs get-log-events \
--log-group-name ${LOG_GROUP_NAME} \
--log-stream-name ${LOG_STREAM_NAME} \
| grep ListUsers
結果(例):
"message": "{\"eventVersion\":\"1.02\",\"userIdentity\":{\"type\":\"IAMUser\",\"principalId\":\"AIDAXXXXXXXXXXXXXXXXX\",\"arn\":\"arn:aws:iam::XXXXXXXXXXXX:user/administrator-prjz-mbp13\",\"accountId\":\"XXXXXXXXXXXX\",\"accessKeyId\":\"AKIAXXXXXXXXXXXXXXXX\",\"userName\":\"administrator-prjz-mbp13\"},\"eventTime\":\"2015-05-11T03:17:52Z\",\"eventSource\":\"iam.amazonaws.com\",\"eventName\":\"ListUsers\",\"awsRegion\":\"us-east-1\",\"sourceIPAddress\":\"xxx.xxx.xxx.xxx\",\"userAgent\":\"aws-cli/1.7.26 Python/2.7.5 Darwin/13.4.0\",\"requestParameters\":null,\"responseElements\":null,\"requestID\":\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\"eventID\":\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\"eventType\":\"AwsApiCall\",\"recipientAccountId\":\"XXXXXXXXXXXX\"}"