[AWS][CFn]CloudTrail 설정

소개



안녕하세요. 친숙합니다.
전회에 이어, 클래스 메소드 씨의 블로그 기사, AWS 어카운트를 만들면 먼저 할 일 ~영화 원년판~ 를 참고로 해, AWS에서의 초기 설정을 CloudFormation에서 실시해 갑니다.
이번에는 "CloudTrail 활성화"를 CloudFormation에서 실시하겠습니다. CloudTrail은 말할 필요도 없지만 감사 로그에 대한 설정입니다. 엔터프라이즈에서 AWS를 사용하는 경우 여기를 사용하거나 설정하지 않는 것이 좋습니다.

전제



샘플 코드로 실시하고 있는 것은 이하입니다.
본래라면 CloudwatchLogs에의 출력도 실시해, 특정의 API가 실행되었을 경우에 SNS 통지하도록(듯이) 설정하는 것이 좋을지도 모릅니다.
  • CloudTrail 사용
  • CloudTrail을 S3에 저장
  • S3에 저장된 로그는 13 개월 (400 일) 경과 후 삭제됩니다
  • S3에 저장된 로그는 KMS로 암호화되어 특정 사용자 만 복합 할 수 있습니다.
  • CloudTrail Insight는 아직 CFn을 지원하지 않으므로 수동으로 설정 ※ 대응하면 추가합니다.

    샘플 코드


    ---
    AWSTemplateFormatVersion: 2010-09-09
    Description: CloudTrail
    
    #------------------------------
    # Resources: Your resource list
    #------------------------------
    Resources:
      # CloudTrailをS3に保存するためのバケットを作成する。ライフサイクルは13ヶ月(400日)。
      ## Logs bucket
      CloudTrailBucket:
        Type: AWS::S3::Bucket
        Properties:
          AccessControl: LogDeliveryWrite
          BucketEncryption:
            ServerSideEncryptionConfiguration:
            - ServerSideEncryptionByDefault:
                SSEAlgorithm: AES256
          PublicAccessBlockConfiguration:
            BlockPublicAcls: True
            BlockPublicPolicy: True
            IgnorePublicAcls: True
            RestrictPublicBuckets: True
          LifecycleConfiguration:
            Rules: 
            - Id: 13months(400days)
              Status: Enabled
              ExpirationInDays: 400
              NoncurrentVersionExpirationInDays: 400
        DeletionPolicy: Retain
    
      ## Logs bucket policy
      CloudTrailBucketPolicy:
        Type: AWS::S3::BucketPolicy
        Properties:
          Bucket: !Ref CloudTrailBucket
          PolicyDocument:
            Version: 2012-10-17
            Statement:
            - Sid: AWSCloudTrailAclCheck
              Effect: Allow
              Principal:
                Service: cloudtrail.amazonaws.com
              Action: s3:GetBucketAcl
              Resource: !Sub "arn:aws:s3:::${CloudTrailBucket}"
            - Sid: AWSCloudTrailWrite
              Effect: Allow
              Principal:
                Service: cloudtrail.amazonaws.com
              Action: s3:PutObject
              Resource: !Sub "arn:aws:s3:::${CloudTrailBucket}/AWSLogs/${AWS::AccountId}/*"
              Condition:
                StringEquals:
                  s3:x-amz-acl: bucket-owner-full-control
    
      # S3に保存したログはKMSで暗号化し、特定のユーザでしか復号できないようにする
      ## KMS
      myKey:
        Type: AWS::KMS::Key
        Properties:
          Description: for CloudTrail log files
          Enabled: True
          KeyPolicy:
            Version: 2012-10-17
            Id: CloudTrailEncryptKey
            Statement:
            - Sid: Allow administration of the key
              Effect: Allow
              Principal:
                AWS: !Sub "arn:aws:iam::${AWS::AccountId}:user/NaGym_t" #ここは任意のroleやuserに変更してください。
              Action:
              - kms:Create*
              - kms:Describe*
              - kms:Enable*
              - kms:List*
              - kms:Put*
              - kms:Update*
              - kms:Revoke*
              - kms:Disable*
              - kms:Get*
              - kms:Delete*
              - kms:TagResource
              - kms:UntagResource
              - kms:ScheduleKeyDeletion
              - kms:CancelKeyDeletion
              Resource: "*"
            - Sid: Allow use of the key
              Effect: Allow
              Principal:
                Service: cloudtrail.amazonaws.com
                AWS: !Sub "arn:aws:iam::${AWS::AccountId}:user/NaGym_t" #ここは任意のroleやuserに変更してください。
              Action:
              - kms:Encrypt
              - kms:Decrypt
              - kms:ReEncrypt
              - kms:GenerateDataKey*
              - kms:DescribeKey
              Resource: "*"
            - Sid: Allow attachment of persistent resources
              Effect: Allow
              Principal:
                AWS: !Sub "arn:aws:iam::${AWS::AccountId}:user/NaGym_t" #ここは任意のroleやuserに変更してください。
              Action:
              - kms:CreateGrant
              - kms:ListGrants
              - kms:RevokeGrant
              Resource: "*"
              Condition:
                Bool:
                  kms:GrantIsForAWSResource: True
        DeletionPolicy: Retain
    
      # CloudTrailを有効化する
      ## CloudTrail
      CloudTrail:
        Type: AWS::CloudTrail::Trail
        Properties:
          S3BucketName: !Ref CloudTrailBucket
          IncludeGlobalServiceEvents: true
          IsLogging: true
          KMSKeyId: !Ref myKey
          IsMultiRegionTrail: true
          EnableLogFileValidation: true
          TrailName: cloudtraillog
    

    실행 결과


  • CloudTrail 사용
  • CloudTrail을 S3에 저장
  • S3에 저장한 로그는 13개월(400일) 경과 후 삭제한다.
  • CloudTrail Insight는 아직 CFn에 대응하고 있지 않기 때문에, 수동으로 설정한다 ※대응하면 추기합니다
    여기는 [CloudTrail]→[트레일 정보]→[설정]에서 변경할 수 있습니다.

  • 요약



    이번에는 CloudFormation에서 CloudTrail을 활성화하겠습니다.
    CloudTrail은, 얻는 것이 좋은 것의 활용되고 있다고 말해지면 나 자신도 할 수 없는 자신감이 있습니다…
    CloudTrail Insight가 그것에 도움을 주면 좋다고 생각하면서 동작을 확인하지 않으므로 유효성을 확인할 수 없습니다.
    하지만 감사 추적으로서는 취득해 두는 것이 절대적으로 좋기 때문에, 우선은 설정하도록 합시다.
    뭔가 도움이되면 다행입니다.

    좋은 웹페이지 즐겨찾기