繁体   English   中英

列出 S3 关系时出错:拒绝访问

[英]An error occurred while listing S3 relations: Access Denied

我已经创建了 lambda function,需要访问 s3 存储桶,我正在尝试创建 s3 事件触发器,但出现访问被拒绝错误。

lambda.tf

resource "aws_lambda_function" "s3-lambdas" {
  filename         = "./s3-lambdas.zip"
  function_name    = "s3-lambdas"
  source_code_hash = filebase64sha256(s3-lambdas)
  role             = module.lambda_role.arn
  handler          = "s3-lambdas.lambda_handler"
  runtime          = "python3.9"
  timeout          = 200
  description      = "invoke glue job"
  depends_on       = [module.lambda_role]
}

resource "aws_lambda_permission" "s3_lambdas_s3_events" {
  depends_on    = [aws_lambda_function.s3-lambdas]
  statement_id  = "AllowS3Invoke"
  action        = "lambda:InvokeFunction"
  function_name = aws_lambda_function.s3-lambdas.function_name
  principal     = "s3.amazonaws.com"
  source_arn    = "arn:aws:s3:::${module.bucket-name.name}"
}

resource "aws_s3_bucket_notification" "bucket_notifications" {
  bucket = module.bucket-name.name
  lambda_function {
    lambda_function_arn = aws_lambda_function.s3-lambdas.arn
    events              = ["s3:ObjectCreated:*"]
    filter_prefix       = "abc/def/"
  }
  depends_on = [aws_lambda_permission.s3_lambdas_s3_events]
}

和我的 lambda 角色,其中包含 s3 完全访问权限。 s3.tf

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:*"
            ],
            "Resource": [
                "arn:aws:s3:::dev-s3-bucket",
                "arn:aws:s3:::dev-s3-bucket/*"
            ]
        }
    ]
}

即使我An error occurred while listing S3 relations: Access Denied

已编辑

output "bucket_name" {
  value = module.bucket-name.name
}

bucket_name = dev-s3-bucket

output "iam_dev_arn" {
  value = module.lambda_role.arn
}

iam_dev_arn = arn:aws:iam::0123456789:role/s3-lambda-role

output "div_arn" {
  value = aws_lambda_function.s3-lambdas.arn
}

div_arn = arn:aws:lambda:us-east-1:0123456789:function:s3-lambdas

承担_角色_政策

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

我添加了与模块相关的输出

s3-lambdas

from __future__ import print_function
import boto3
import urllib
import os

print ('Loading function')

glue = boto3.client('glue')

def lambda_handler(event, context):
    gluejobname = os.environ['glue_job']

    try: 
        runId = glue.start_job_run(JobName=gluejobname)
        status = glue.get_job_run(JobName=gluejobname, RunId=runId['JobRunId'])
        print("Job Status : ", status['JobRun']['JobRunState'], "runId",runId)
    except Exception as e:
        raise e
    return {
        "statusCode": 200,
        "body": os.environ['glue_job'] + " Job started"
    }

s3 存储桶策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "denyInsecureTransport",
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::dev-s3-bucket/*",
                "arn:aws:s3:::dev-s3-bucket"
            ],
            "Condition": {
                "Bool": {
                    "aws:SecureTransport": "false"
                }
            }
        }
    ]
}

在您的 S3 存储桶策略中,您可以进行以下更改并重试:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:*"
            ],
            "Resource": [
                "arn:aws:s3:::dev-s3-bucket/abc/def/*"   <-- change this
            ]
        }
    ]
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM