如何通过CloudFormation创建CloudWatch Logs资源策略(Route53场景)
使用CloudFormation配置Route53 DNS查询日志的CloudWatch资源策略
没问题!你完全可以通过CloudFormation来创建允许Route53发送DNS查询日志到CloudWatch Logs的资源策略。下面是一个完整的YAML模板示例,包含了必要的配置(如果你的日志组已经存在,可以去掉日志组的定义部分):
AWSTemplateFormatVersion: '2010-09-09' Description: CloudFormation template to create CloudWatch Logs resource policy for Route53 DNS query logs Resources: # 可选:如果需要在模板中创建目标日志组 Route53DNSQueryLogGroup: Type: AWS::Logs::LogGroup Properties: LogGroupName: /aws/route53/my-dns-queries RetentionInDays: 30 # 核心:允许Route53写入日志的资源策略 Route53LogResourcePolicy: Type: AWS::Logs::ResourcePolicy Properties: PolicyName: Route53-DNS-Query-Logs-Policy PolicyDocument: !Sub | { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "route53.amazonaws.com" }, "Action": [ "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "${Route53DNSQueryLogGroup.Arn}" } ] }
关键部分说明:
AWS::Logs::ResourcePolicy:这是CloudFormation中专门用于定义CloudWatch Logs资源权限的资源类型,和你提到的CLI命令aws logs put-resource-policy、Terraform的aws_cloudwatch_log_resource_policy作用完全一致。PolicyDocument:这里的JSON策略明确授权Route53服务主体(route53.amazonaws.com)对指定日志组执行logs:CreateLogStream和logs:PutLogEvents操作——这两个动作是Route53写入日志到CloudWatch Logs必须的权限。!Sub函数:用来动态插入日志组的ARN,避免手动硬编码,确保模板的灵活性。
如果你的日志组已经存在,只需要把Resource字段替换为你现有日志组的ARN即可,比如:
"Resource": "arn:aws:logs:us-east-1:123456789012:log-group:/aws/route53/existing-dns-queries:*"
创建完这个CloudFormation栈后,你就可以在Route53控制台中配置DNS查询日志,选择对应的日志组作为目标了。
内容的提问来源于stack exchange,提问作者Ryan Calhoun
相关产品推荐
相关产品推荐

