Cla*_*zzi 12 amazon-web-services aws-lambda
如果您拥有大量的AWS Lambda登录CloudWatch可能会成为巨大的隐藏成本,因为无法告诉AWS停止登录CloudWatch平台.我发现这样做的唯一方法是管理自定义IAM策略(与每个lambda关联)并明确拒绝访问日志:... actions:
{
"Sid": "DisableAllLogs",
"Resource": "*",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Effect": "Deny"
}
Run Code Online (Sandbox Code Playgroud)
现在我正在尝试对策略进行细化,只允许一些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"
}
Run Code Online (Sandbox Code Playgroud)
但是这样就没有日志发送到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"
}
]
}
Run Code Online (Sandbox Code Playgroud)
通过这种方式,我可以选择启用所需的 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"
}
]
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4286 次 |
| 最近记录: |