[英]How to stop AWS Lambda function to log on CloudWatch
如果您擁有大量的AWS Lambda登錄CloudWatch可能會成為巨大的隱藏成本,因為無法告訴AWS停止登錄CloudWatch平台。 我發現這樣做的唯一方法是管理自定義IAM策略(與每個lambda關聯)並明確拒絕訪問日志:... actions:
{
"Sid": "DisableAllLogs",
"Resource": "*",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Effect": "Deny"
}
現在我正在嘗試對策略進行細化,只允許一些lambda記錄。 為此,我正在使用策略的Condition參數:
{
"Sid": "EnableLogsForWantedLambdaTriggers",
"Resource": "*",
"Condition": {
"ArnEquals": {
"aws:SourceArn": "arn:aws:lambda:REGION:ACCOUNT-ID:function:FUNCTION-NAME"
}
},
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Effect": "Allow"
}
但是這樣就沒有日志發送到CloudWatch。 我認為源ARN是錯誤的,但我無法找到正確的。
有線索嗎?
我發現的一種可能的解決方法是將策略重點放在資源上,而不是操作的調用者ARN上。 所以,如果我現在是lambda logGroupName和logStreamName (我現在總是這些)我可以只遵循記錄器將創建的資源上的操作,遵循記錄的命名約定 :
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "EnableLogsForWantedLambdaTriggers",
"Resource": [
"arn:aws:logs:<region>:<ID>:log-group:<logGroupName>:log-stream:<logStreamName>"
],
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Effect": "Allow"
}
]
}
通過這種方式,我可以選擇啟用想要的lamda和/或(在流名稱上)選擇的函數版本($ LATEST,1,2,...)。
例如,下一個將僅啟用函數的開發版本而忽略生產版本:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "EnableLogsForWantedLambdaTriggers",
"Resource": [
"arn:aws:logs:<region>:<ID>:log-group:<logGroupName>:log-stream:*/*/*/[$LATEST]*"
],
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Effect": "Allow"
}
]
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.