[JAWS-UG CLI] CloudTrail:#4 ログをCloudWatchLogsに転送する設定

AWS CLIを利用して、CloudTrailのログをCloudWatchLogsに転送する設定をしてみます。


前提条件
========


CloudTrailへの権限
------------------

* CloudTrailに対してフル権限があること。


AWS CLIのバージョン
-------------------

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

  * AWS CLI 1.7.26

```bash:コマンド:
aws --version
```

結果(例):

      aws-cli/1.7.26 Python/2.7.5 Darwin/13.4.0


0. 準備
=======


0.1. リージョンの決定
---------------------

作成するTrailのリージョンを決めます。

(カレントユーザが利用するカレントリージョンも切り変わります。)

```bash:コマンド(アイルランドリージョンの場合):
export AWS_DEFAULT_REGION='eu-west-1'
```


0.2. 変数の確認
---------------

プロファイルとリージョンが想定のものになっていることを確認します。

```bash:変数の確認:
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名の確認
------------------

```bash:変数の確認:
cat << ETX

        S3_BUCKET_NAME: ${S3_BUCKET_NAME}

ETX
```


0.4. ロギングの状態確認
-----------------------

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

結果:

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


0.5. CloudWatch Logs ロググループ名の確認
-----------------------------------------

```bash:コマンド:
cat << ETX

        LOG_GROUP_NAME: ${LOG_GROUP_NAME}

ETX
```


0.6. IAMロール名の確認
----------------------

```bash:コマンド:
cat << ETX

        IAM_ROLE_NAME: ${IAM_ROLE_NAME}

ETX
```


1. 事前作業
===========


1.1. ロググループのARN取得
--------------------------

```bash:コマンド:
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取得
-----------------------

```bash:コマンド:
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. 本作業
=========


2.1. Trailの更新
----------------

```bash:変数の確認:
cat << ETX

        LOG_GROUP_ARN: ${LOG_GROUP_ARN}
        IAM_ROLE_ARN:  ${IAM_ROLE_ARN}

ETX
```

```bash:コマンド:
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の内容確認
--------------------

```bash:コマンド:
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. 事後作業
===========


3.1. IAMコマンドの実行
----------------------

```bash:コマンド:
aws iam list-users
```


3.2. ログ確認
-------------

CloudWatch Logsにログファイルが転送されていることを確認します。

```bash:コマンド:
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\"}"


完了
====