![](/img/trans.png)
[英]How to reference a resource ARN in a cloudformation policy document ? (yaml)
[英]How to define Resource Policy for CloudWatch Logs with CloudFormation?
當我使用 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 執行此操作???
您無法使用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
.....
4 年后,這似乎仍然無法通過 Cloudformation 工作,盡管現在顯然支持這一點
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.