AWS日記31 (CloudTrail)

# はじめに
今回は [AWS CloudTrail](https://aws.amazon.com/jp/cloudtrail/) を試します。
アカウントアクティビティのログを記録し、[Amazon SNS](https://aws.amazon.com/jp/sns/)を組み合わせて通知するよう設定します。



# 設定
今回は CloudFormation を利用し、設定しました。
使用したテンプレートは[Github](https://github.com/tanaka-takurou/cloud-formation-templates/blob/master/cloudtrail_sample/template.yml)に。

# AWS SAM テンプレート作成

AWS SAM テンプレートで S3, SNS, CloudTrail の設定をします。

[参考資料]
[AWS SAM テンプレートを作成する](https://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/tutorial-lambda-sam-template.html)

### S3の設定は以下の部分
```yaml
  SampleBucket:
    Type: AWS::S3::Bucket
    Properties:
      AccessControl: LogDeliveryWrite
      BucketEncryption:
        ServerSideEncryptionConfiguration:
        - ServerSideEncryptionByDefault:
            SSEAlgorithm: AES256
      PublicAccessBlockConfiguration:
        BlockPublicAcls: True
        BlockPublicPolicy: True
        IgnorePublicAcls: True
        RestrictPublicBuckets: True
      LifecycleConfiguration:
        Rules:
        - Id: 30days
          Status: Enabled
          ExpirationInDays: 30
          NoncurrentVersionExpirationInDays: 30
    DeletionPolicy: Retain
  SampleBucketPolicy:
    Type: AWS::S3::BucketPolicy
    Properties:
      Bucket: !Ref SampleBucket
      PolicyDocument:
        Version: 2012-10-17
        Statement:
        - Sid: SampleBucketCloudTrailAclCheck
          Effect: Allow
          Principal:
            Service: cloudtrail.amazonaws.com
          Action: s3:GetBucketAcl
          Resource: !Sub "arn:aws:s3:::${SampleBucket}"
        - Sid: SampleBucketCloudTrailWrite
          Effect: Allow
          Principal:
            Service: cloudtrail.amazonaws.com
          Action: s3:PutObject
          Resource: !Sub "arn:aws:s3:::${SampleBucket}/AWSLogs/${AWS::AccountId}/*"
          Condition:
            StringEquals:
              s3:x-amz-acl: bucket-owner-full-control
```


### SNSの設定は以下の部分
```yaml
  TrailSNSTopic:
    Type: AWS::SNS::Topic
  TrailSNSTopicPolicy:
    Type: AWS::SNS::TopicPolicy
    Properties:
      PolicyDocument:
        Version: 2012-10-17
        Statement:
        - Sid: SampleSNSCloudTrailWrite
          Effect: Allow
          Principal:
            Service: cloudtrail.amazonaws.com
          Action: sns:Publish
          Resource: !Sub "arn:aws:sns:${AWS::Region}:${AWS::AccountId}:*"
      Topics:
        - !Ref TrailSNSTopic
  TrailSNSSubscription:
    Type: AWS::SNS::Subscription
    Properties:
      Endpoint: !Ref TrailSNSMailAddress
      Protocol: email
      TopicArn: !Ref TrailSNSTopic
```


### CloudTrailの設定は以下の部分
```yaml
  SampleTrail:
    Type: AWS::CloudTrail::Trail
    Properties:
      S3BucketName: !Ref SampleBucket
      SnsTopicName: !GetAtt TrailSNSTopic.TopicName
      IsLogging: true
      TrailName: !Ref TrailName
```

# イベント履歴の確認

 - CloudTrail コンソール から イベント履歴の確認

![CloudTrail2_.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/586707/feb96b01-55b3-9027-1fd7-a8b680a2562f.jpeg)



# 終わりに
CloudTrail を試しました。
異常なアクティビティを警告する、 CloudTrail Insights も今後試してきたいと思います。 


<details><summary>参考資料</summary><div>

[[AWS][CFn]CloudTrailの設定](https://qiita.com/NaGym_t/items/e88ec0fa5c14e540ffdc)

[AWS::CloudTrail::Trail](https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-resource-cloudtrail-trail.html)

[AWS::SNS::Topic](https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-properties-sns-topic.html)

[Amazon SNS トピックのアクセス許可](https://docs.aws.amazon.com/ja_jp/config/latest/developerguide/sns-topic-policy.html)