如何授予Lambda将文件上传到terraform中的s3存储桶的权限?

Joey Yi Zhao

我在以下lambda函数配置中TerraForm

resource "aws_lambda_function" "test_lambda" {
  # filename         = "crawler/dist/deploy.zip"
  s3_bucket = "${var.s3-bucket}"
  s3_key    = "${aws_s3_bucket_object.file_upload.key}"
  # source_code_hash = "${filebase64sha256("file.zip")}"
  function_name    = "quote-crawler"
  role             = "arn:aws:iam::773592622512:role/LambdaRole"
  handler          = "handler.handler"
  source_code_hash = "${data.archive_file.zipit.output_base64sha256}"
  runtime          = "${var.runtime}"
  timeout          = 180

  environment {
    variables = {
      foo = "bar"
    }
  }
}

当我运行lambda"errorMessage": "An error occurred (AccessDenied) when calling the PutObject operation: Access Denied",时,尝试将文件上传到s3存储桶时出现错误似乎lambda函数没有访问s3的权限。TerraFormdoc尚不清楚如何配置它们。权限配置面板均未显示lambda console似乎由创建的lambdaTerraForm具有有限的配置供我使用。那么如何授予s3到lambda权限?

Adiii

为简单起见,您可以分三个步骤进行操作,

  1. 创建一个角色
  2. 制定政策
  3. 角色附加政策
  4. 附加到lambda的角色

创建角色。

resource "aws_iam_role" "role" {
  name = "${var.env_prefix_name}-alb-logs-to-elk"
  path = "/"

      assume_role_policy = <<EOF
    {

  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": "sts:AssumeRole",
      "Principal": {
        "Service": "lambda.amazonaws.com"
      },
      "Effect": "Allow",
      "Sid": ""
    }
  ]
}
EOF
}

创建对s3具有指定访问权限的策略

 #Created Policy for IAM Role
resource "aws_iam_policy" "policy" {
  name = "${var.env_prefix_name}-test-policy"
  description = "A test policy"


      policy = <<EOF
   {
"Version": "2012-10-17",
"Statement": [
    {
        "Effect": "Allow",
        "Action": [
            "logs:*"
        ],
        "Resource": "arn:aws:logs:*:*:*"
    },
    {
        "Effect": "Allow",
        "Action": [
            "s3:*"
        ],
        "Resource": "arn:aws:s3:::*"
    }
]

} 
    EOF
    }

附加的IAM角色和新创建的策略

resource "aws_iam_role_policy_attachment" "test-attach" {
  role       = "${aws_iam_role.role.name}"
  policy_arn = "${aws_iam_policy.policy.arn}"
}

现在将角色附加到Lamba源

resource "aws_lambda_function" "test_lambda" {
  # filename         = "crawler/dist/deploy.zip"
  s3_bucket = "${var.s3-bucket}"
  s3_key    = "${aws_s3_bucket_object.file_upload.key}"
  # source_code_hash = "${filebase64sha256("file.zip")}"
  function_name    = "quote-crawler"
  role             = "${aws_iam_role.role.arn}"
  handler          = "handler.handler"
  source_code_hash = "${data.archive_file.zipit.output_base64sha256}"
  runtime          = "${var.runtime}"
  timeout          = 180

  environment {
    variables = {
      foo = "bar"
    }
  }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何配置“ Terraform”以将zip文件上传到“ s3”存储桶,然后将其部署到lambda

如何使用Boto将文件上传到S3存储桶中的目录

如何使用Boto将文件上传到S3存储桶中的目录

尝试将文件从 lambda tmp 文件夹上传到 s3 存储桶

将文件上传到S3存储桶

AWS Lambda:如何在S3存储桶中读取CSV文件,然后将其上传到另一个S3存储桶?

亚马逊s3,将文件上传到存储桶中的文件夹中

将文件上传到 s3 存储桶、sdk php 中的特定文件夹

如何将缩略图文件上传到亚马逊S3存储桶?

如何使用axios将文件上传到Amazon S3存储桶?

如何获取将图像上传到s3存储桶的文件名?

如何将文件上传到AWS S3存储桶?

如何使用Java Apache HttpClient将文件上传到公共AWS S3存储桶

如何从React前端通过Spring后端将文件上传到S3存储桶?

如何使用AWS CDK中的自定义资源将文件上传到S3存储桶

如何将控制器中的生成pdf文件上传到S3存储桶

如何使用angular或javascript中的预签名URL将文件上传到S3存储桶

压缩 s3 存储桶中的对象,然后将 zip 文件夹上传到存储桶

如何在授予公共访问权限的情况下将文件上传到AWS S3?

将文件上传到AWS S3并授予公共访问权限

S3:如何授予对多个存储桶的访问权限?

如何以编程方式授予s3存储桶调用lambda的权限?

我的Amazon S3存储桶网址是什么?如何将许多文件上传到s3存储桶?

将JSON文件上传到Python中s3存储桶中的特定文件夹

文件未上传到s3存储桶

将屏幕快照从AWS lambda上传到s3存储桶失败

使用Api Gateway(Lambda函数)将图像上传到S3存储桶

如何通过特定文件类型限制将S3文件上传到存储桶?

Python-无法将文件上传到AWS S3存储桶中的已定义文件夹