如何使用 CloudFormation 定义 CloudWatch Logs 的资源策略?

问题描述 投票:0回答:3

当我使用 Route53 配置 DNS 查询日志记录时,我可以为 Route53 创建资源策略以记录到我的日志组。我可以使用 cli

aws logs describe-resource-policies
确认此策略,并看到类似以下内容:

{
  "resourcePolicies": [
    {
        "policyName": "test-logging-policy", 
        "policyDocument": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"route53.amazonaws.com\"},\"Action\":[\"logs:CreateLogStream\",\"logs:PutLogEvents\"],\"Resource\":\"arn:aws:logs:us-east-1:xxxxxx:log-group:test-route53*\"}]}", 
        "lastUpdatedTime": 1520865407511
    }
  ]
}

cli 还具有

put-resource-policy
来创建其中之一。我还看到 Terraform 有一个资源
aws_cloudwatch_log_resource_policy
具有相同的功能。

所以问题是:如何使用 CloudFormation 做到这一点???

amazon-web-services aws-cloudformation amazon-cloudwatchlogs
3个回答
4
投票

您无法使用 CloudWatch 控制台创建或编辑资源策略。您必须使用 CloudWatch API、AWS 开发工具包之一或 AWS CLI。

目前没有 Cloudformation 支持创建资源策略,但您可以创建自定义 lambda 资源来执行此操作。

https://gist.github.com/sudharsans/cf9c52d7c78a81818a4a47872982bd76

CloudFormation 自定义资源:

  AddResourcePolicy:
    Type: Custom::AddResourcePolicy
    Version: '1.0'
    Properties:
      ServiceToken: arn:aws:lambda:us-east-1:872673965194:function:test-lambda-deploy-Lambda-15R963QKCI80A
      CloudWatchLogsLogGroupArn: !GetAtt LogGroup.Arn
      PolicyName: "testpolicy"

拉姆达:

import cfnresponse
import boto3
def PutPolicy(arn,policyname):
    response = client.put_resource_policy(
      policyName=policyname,
      policyDocument="....",
    )
    return

def handler(event, context):
    ......
        if event['RequestType'] == "Delete":
            DeletePolicy(PolicyName)
        if event['RequestType'] == "Create":
            PutPolicy(CloudWatchLogsLogGroupArn,PolicyName)
        responseData['Data'] = "SUCCESS"
        status=cfnresponse.SUCCESS
     .....

0
投票

4 年后,这似乎仍然无法通过 Cloudformation 实现,尽管现在显然支持这一点


0
投票

请参阅 AWS::Logs::ResourcePolicy 资源类型。

根据CFN发布历史,这是在

2021-07-15
上引入的。

© www.soinside.com 2019 - 2024. All rights reserved.