Cloud Formationで簡単に全リージョンのCloudTrailを有効化する

  • 0
    いいね
  • 0
    コメント

    サクっとできるので、アカウント作ったらとりあえずやっておくといいかもしれません:grinning:

    以下は、全リージョンのCloudTrailを有効にするCloudFormationテンプレートのペライチと、使い方になります。

    テンプレートは、公式ドキュメントをベースに以下の修正を加えています。

    • 全てのリージョンで CloudTrail 証跡を有効にするように変更
    • グローバルサービス (IAM など) からのイベントをログファイルに発行するように変更
    • OutputにSNS TopicのARNと、S3バケット名を出力するように変更
    • SNSのサブスクリプションは指定しない → サブスクリプションは後から自由に設定したいので、SNS Topicだけ作っておく

    CloudFormation テンプレート

    ---
    AWSTemplateFormatVersion: "2010-09-09"
    Resources:
      S3Bucket:
        DeletionPolicy: Retain
        Type: "AWS::S3::Bucket"
        Properties: {}
      BucketPolicy:
        Type: "AWS::S3::BucketPolicy"
        Properties:
          Bucket:
            Ref: S3Bucket
          PolicyDocument:
            Version: "2012-10-17"
            Statement:
              -
                Sid: "AWSCloudTrailAclCheck"
                Effect: "Allow"
                Principal:
                  Service: "cloudtrail.amazonaws.com"
                Action: "s3:GetBucketAcl"
                Resource:
                  !Sub |-
                    arn:aws:s3:::${S3Bucket}
              -
                Sid: "AWSCloudTrailWrite"
                Effect: "Allow"
                Principal:
                  Service: "cloudtrail.amazonaws.com"
                Action: "s3:PutObject"
                Resource:
                  !Sub |-
                    arn:aws:s3:::${S3Bucket}/AWSLogs/${AWS::AccountId}/*
                Condition:
                  StringEquals:
                    s3:x-amz-acl: "bucket-owner-full-control"
      Topic:
        Type: "AWS::SNS::Topic"
      TopicPolicy:
        Type: "AWS::SNS::TopicPolicy"
        Properties:
          Topics:
            - Ref: "Topic"
          PolicyDocument:
            Version: "2008-10-17"
            Statement:
              -
                Sid: "AWSCloudTrailSNSPolicy"
                Effect: "Allow"
                Principal:
                  Service: "cloudtrail.amazonaws.com"
                Resource: "*"
                Action: "SNS:Publish"
      myTrail:
        DependsOn:
            - BucketPolicy
            - TopicPolicy
        Type: "AWS::CloudTrail::Trail"
        Properties:
          S3BucketName:
            Ref: S3Bucket
          SnsTopicName:
            !GetAtt Topic.TopicName
          IsLogging: true
          IsMultiRegionTrail: true
          IncludeGlobalServiceEvents: true
    Outputs:
      SNSTopicArn:
        Value: !Ref Topic
      S3BucketName:
        Value: !Ref S3Bucket
    

    使い方

    どんなリソースが作られるのか視覚的にわかりやすいので、CloudFormation Designerを使ってテンプレートを読み込んでみます。(慣れている方は、aws cliとかを使ってもいいと思います)

    まずは、CloudFormationのコンソールを開いて、「テンプレートのデザイン」を押します。

    001.png

    CloudFormation Designerの画面が開いたら、

    1. テンプレートの言語の選択をYAMLに変えます
    2. テンプレートタブに上記テンプレをコピペします
    3. テンプレをvalidateします
    4. 画面右上の矢印から画面のリフレッシュを行います

    003.png

    すると、リソースがどのようにつくられるか可視化されます:clap:

    あとは、画面上部左上にある:cloud:のアイコンからスタックを作成する画面に行って、適当に名前をつけて作成します。

    スクリーンショット 2017-06-20 13.34.31.png

    簡単。うまくいくと状況がCREATE_COMPLETEになります。

    スクリーンショット 2017-06-20 13.41.49.png

    まとめ

    正直CloudTrailのコンソールからでもポチポチやれば簡単に設定できるのですが、なるべくリソース作成や変更はコード化しておくと、後からいろいろ見直しやすいのでおすすめです:thumbsup:

    参考

    http://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-resource-cloudtrail-trail.html