AWS Lambda环境中的aws_access_key_id

Efi*_* MK 3 amazon-s3 amazon-web-services amazon-iam boto3 aws-lambda

我使用boto3来为s3创建一个预签名的发布网址。

s3 = boto3.client('s3')
post = s3.generate_presigned_post(
        Bucket=bucket_name,
        Key=f"{userid}.{suffix}"
    )
Run Code Online (Sandbox Code Playgroud)

aws_access_key_id正在使用不正确,使用正确的的方法之一是通过环境变量增加的环境变量。

知道如何使用在IAM中创建的用户定义的aws访问密钥强制执行吗?

更新1

附加到执行Lambda的IAM角色的策略

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "logs:*"
            ],
            "Resource": "arn:aws:logs:*:*:*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "lambda:InvokeFunction"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "xray:PutTraceSegments",
                "xray:PutTelemetryRecords"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:AttachNetworkInterface",
                "ec2:CreateNetworkInterface",
                "ec2:DeleteNetworkInterface",
                "ec2:DescribeInstances",
                "ec2:DescribeNetworkInterfaces",
                "ec2:DetachNetworkInterface",
                "ec2:ModifyNetworkInterfaceAttribute",
                "ec2:ResetNetworkInterfaceAttribute"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:*"
            ],
            "Resource": "arn:aws:s3:::*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "kinesis:*"
            ],
            "Resource": "arn:aws:kinesis:*:*:*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "sns:*"
            ],
            "Resource": "arn:aws:sns:*:*:*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "sqs:*"
            ],
            "Resource": "arn:aws:sqs:*:*:*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "dynamodb:*"
            ],
            "Resource": "arn:aws:dynamodb:*:*:*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "route53:*"
            ],
            "Resource": "*"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

更新2

在IAM中的作用 在IAM中的作用 Lambda配置中的角色配置 Lambda配置中的角色配置

小智 5

您不应将IAM用户用于lambda中的任何类型的执行权限。而是使用带有适当策略的IAM角色,并将该角色附加到Lambda函数

另请注意,配置角色后,lambda会自动将访问ID和密码设置为环境变量,并且Boto无需任何其他配置即可检索它们。

  • 我收到以下错误:_您提供的 AWS 访问密钥 ID 在我们的记录中不存在。_我的 IAM 用户中不存在该访问密钥。我使用 zappa 进行部署,它不属于任何 VPC (2认同)