【问题标题】:AWS Lambda IAM Policy not working as expected for CloudWatch LogsAWS Lambda IAM 策略未按预期对 CloudWatch Logs 起作用
【发布时间】:2018-01-16 19:33:30
【问题描述】:

我目前的 Lambda 函数策略如下:

{"Statement": [
    {
        "Action": [
            "logs:CreateLogStream",
            "logs:PutLogEvents"
        ],
        "Resource": "arn:aws:logs:us-east-1:<MY-ACCOUNT-NUMBER>:log-group:/<MY>/<LOGGING>/<DIR>:*",
        "Effect": "Allow"
    }
]}

我注意到 CloudWatch 日志中缺少我的一些打印日志,当我将其带入策略模拟器并尝试对以下资源运行 CloudWatch CreateLogStream 和 PutLogEvent 操作时,

  • 日志组:arn:aws:logs:us-east-1:&lt;MY_ACCOUNT_NUMBER&gt;:log-group:/&lt;MY&gt;/&lt;LOGGING&gt;/&lt;DIR&gt;,和
  • 日志流:arn:aws:logs:us-east-1:&lt;MY_ACCOUNT_NUMBER:log-group:/&lt;MY&gt;/&lt;LOGGING&gt;/&lt;DIR&gt;:log-stream:&lt;MY&gt;/&lt;LOG&gt;/&lt;STREAM&gt;

分别,我收到了权限错误:Denied Implicitly denied (no matching statements).

我注意到,当我将策略中的 Resource 更改为不包含尾随的 :* 时(因此它看起来像这样:"Resource": "arn:aws:logs:us-east-1:&lt;MY-ACCOUNT-NUMBER&gt;:log-group:/&lt;MY&gt;/&lt;LOGGING&gt;/&lt;DIR&gt;", CreateLogStream 操作工作正常。但是,由于权限,PutLogEvents 操作仍然失败.

如果有人能指出正确的方向,说明为什么此策略在模拟器中不起作用,我将不胜感激,因为我完全不知所措。

【问题讨论】:

    标签: amazon-web-services logging lambda amazon-cloudwatchlogs


    【解决方案1】:

    应尽量减少在资源中使用通配符。

    我建议使用以下策略来尝试授予最低限度的必要访问权限:

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": "logs:DescribeLogStreams",
                "Resource": "arn:aws:logs:us-east-1:<ACCOUNT-ID>:*"
            },
            {
                "Effect": "Allow",
                "Action": [
                    "logs:PutLogEvents",
                    "logs:CreateLogStream",
                    "logs:CreateLogGroup"
                ],
                "Resource": [
                    "arn:aws:logs:us-east-1:<ACCOUNT-ID>:log-group:/aws/lambda/<LAMBDA-FUNCTION-NAME>",
                    "arn:aws:logs:us-east-1:<ACCOUNT-ID>:log-group:/aws/lambda/<LAMBDA-FUNCTION-NAME>:log-stream:*",
                ]
            }
        ]
    }
    

    【讨论】:

    • 感谢您的回复。根据您所说的判断,我要么测试错误,要么Policy Sim 出现问题当我使用您的确切策略(使用我的特定参数)并尝试在各自的资源上模拟 CreateLogStream 和 PutLogEvents 时,我被拒绝了。
    • @Zach 抱歉,我再次在 Policy Simulator 中检查了它,并在我的示例中发现了错误。我想知道为什么旧解决方案在生产系统中使用它时不起作用。更新了我的答案以提出正确的政策。
    • 感谢您的更新。你能解释一下为什么这里的约定是使用通配符和 lambda 函数名吗?我想这并不像某人想要的那样严格,因为该功能可以为具有相同前缀的任何日志组放置日志事件/创建流,对吗?
    • 你是对的。这是更改的限制性不够,所以我再次对其进行了更新。这工作的原因是,对于PutLogEvents 操作,您需要对日志组日志流的权限。
    猜你喜欢
    • 2021-04-09
    • 2020-12-29
    • 2021-09-29
    • 2022-09-28
    • 2017-05-28
    • 1970-01-01
    • 2021-09-03
    • 2016-06-05
    • 2022-12-09
    相关资源
    最近更新 更多