Search code examples
aws-cloudformationamazon-cloudfront

How to attach Real-time log to a Distribution in CloudFormation


I have created a real time logging configuration. However, I cannot find how to attach it to the for a CloudFront distribution. The CloudFront template to create the real time logging is:

KinesisDataStream:
Type: AWS::Kinesis::Stream
Properties:
  Name: my-stream
  RetentionPeriodHours: 24
  ShardCount: 1
RealTimeLogggingRole:
Type: AWS::IAM::Role
Properties:
  Tags:
    - Key: Name
      Value: my-role
  Path: "/"
  AssumeRolePolicyDocument:
    Version: 2012-10-17
    Statement:
      - Effect: Allow
        Action: sts:AssumeRole
        Principal:
          Service: cloudfront.amazonaws.com
  Policies:
    - PolicyName: po-real-time-logging-policy
      PolicyDocument:
        Version: 2012-10-17
        Statement:
          - Effect: Allow
            Action:
              - kinesis:DescribeStreamSummary
              - kinesis:DescribeStream
              - kinesis:PutRecord
              - kinesis:PutRecords
            Resource:
              - !GetAtt KinesisDataStream.Arn
RealTimeLoggging:
Type: AWS::CloudFront::RealtimeLogConfig
Properties:
  Name: my-logging
  SamplingRate: 100
  Fields:
    - timestamp
    - c-ip
    - cs-host
    - cs-uri-stem
    - cs-headers
  EndPoints:
    - StreamType: Kinesis
      KinesisStreamConfig:
        RoleArn: !GetAtt RealTimeLogggingRole.Arn
        StreamArn: !GetAtt KinesisDataStream.Arn
CloudFrontDistribution:
Type: AWS::CloudFront::Distribution
...

And I can attach it to the distributino the the GUI:

enter image description here

But I cannot find how to do this using the CloudFormation?


Solution

  • You have to update your AWS::CloudFront::Distribution DefaultCacheBehavior and set RealtimeLogConfigArn:

    RealtimeLogConfigArn: !Ref RealTimeLoggging