簡體   English   中英

AWS IAM Policy Assistance with Lambda Permissions for SMTP

[英]AWS IAM Policy Assistance with Lambda Permissions for SMTP

我正在創建一個 lambda function 來發送電子郵件(沒什么新東西)。 我在制定政策時遇到問題。 TFSec 使用 Resource 元屬性阻止了我,並指出不允許使用“*”。 所以我想做的就是將我的策略限制為我的 lambda function。我想我可以像過去那樣動態創建 ARN。 好吧,我發現它起作用的唯一方法是利用“條件”元屬性但是......,當我使用條件時,我得到這個錯誤:

│ 錯誤:創建錯誤 Lambda Function (1): InvalidParameterValueException: 提供的執行角色沒有在 EC2 上調用 CreateNetworkInterface 的權限

│ { │ RespMetadata: { │ StatusCode: 400, │ RequestID: "3b8fc1dd-21d8-xxxx-xxx-xxxxxxx" │ }, │ Message_: "提供的執行角色無權在 EC2 上調用 CreateNetworkInterface", │ 類型: “用戶”│}

讓我難受的是我的政策中設置了權限,見下文:

  resource "aws_iam_role_policy" "lambda_sendmail_policy" {
  name = "lambda-sendmail"
  role = aws_iam_role.lambda_sendmail_role.id
  policy = jsonencode({
    "Version" : "2012-10-17",
    "Statement" : [
      {
        "Sid" : "Stmt163546987325",
        "Effect" : "Allow",
        "Action" : [
          "ec2:DescribeInstances",
          "ec2:CreateNetworkInterface",
          "ec2:AttachNetworkInterface",
          "ec2:DescribeNetworkInterfaces",
          "ec2:DeleteNetworkInterface",
          "autoscaling:CompleteLifecycleAction"
        ],
        "Resource" : "*",
        "Condition" : {
          "StringEquals" : {
            "lambda:FunctionArn" : "arn:aws:lambda:us-east-1:${local.accountid}:function:${var.appenv}-${var.lambda_appname}"
          }
        }
      },
      {
        "Effect" : "Allow",
        "Action" : [
          "logs:PutLogEvents",
          "logs:CreateLogStream"
        ],
        "Resource" : [
          "arn:aws:logs:us-east-1:${local.accountid}:log-group:/aws/lambda/*"
        ]
      },
      {
        "Effect" : "Allow",
        "Action" : [
          "xray:PutTraceSegments",
          "xray:PutTelemetryRecords"
        ],

        "Resource" : "*"

      }
    ]
  })
}

顯然有權限,但我錯誤地傳遞了 Lambda ARN,這里需要一些幫助。

如果我刪除條件,它會起作用,但 TFSEC 發現我告訴我需要指定資源。

我不確定條件屬性是否支持 Lambda,但這里的任何幫助都會很棒。

您不能將此條件用於提到的 ec2 操作:

"Condition" : {
      "StringEquals" : {
        "lambda:FunctionArn" : "arn:aws:lambda:us-east-1:${local.accountid}:function:${var.appenv}-${var.lambda_appname}"
      }
    }

用於大多數 ec2:* 操作的條件是......

"Condition": {
    "ArnLikeIfExists": {
      "ec2:Vpc": "your_vpc_arn"
    }
  }

此塊限制對 function 共享的 vpc 的權限,並且對於某些 lambda 操作(例如創建/更新,其中 api 調用不包括 vpc arn)無法為真。 這幾乎是你能得到的最嚴格的政策。

我也會將自動縮放移動到它自己的塊中,因為你絕對可以收緊它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM