gpt4 book ai didi

python-3.x - Boto3 InvalidAccessKeyId in generate_presigned_post

转载 作者:行者123 更新时间:2023-12-05 06:19:04 31 4
gpt4 key购买 nike

我正在使用 Python 的 Chalice 库创建 AWS Lambda 和 API。我的 AWS 凭证是使用 github 工作流 aws-actions 注入(inject)的,它能够chalice deploy。端点正在运行,并且正在完美地部署到 AWS。

问题是:

我使用 Boto3 通过其函数 generate_presigned_post 创建一个预签名的上传表单位于此处的文档中:https://boto3.amazonaws.com/v1/documentation/api/latest/guide/s3-presigned-urls.html

但是当我使用该函数的响应并用它生成一个 html 时,在提交要上传的文件后,它会返回我

<Error>
<Code>InvalidAccessKeyId</Code>
<Message>
The AWS Access Key Id you provided does not exist in our records.
</Message>

我检查了所有内容,它似乎使用了错误的 AWS_ACCESS_KEY,但如果它完美地部署到 AWS,我认为这不是问题(至少目前如此)。我使用 boto3 客户端,它似乎自动定位 aws 凭证,但它似乎没有找到我的(或发生的任何事情)并提供了错误的 AWS_ACCESS_KEY。

import boto3

S3_CLIENT = boto3.client('s3')
BUCKET = 'bucket_name'

response = S3_CLIENT.generate_presigned_post(
BUCKET,
Key="{$filename}",
Fields=None,
Conditions=None,
ExpiresIn=3600
)

它返回正确的响应,但是当与表单集成并使用时,表单返回错误。

最佳答案

由于 lambda 和临时键的性质,这实际上比看起来要复杂一点。可以说您应该遵循以下步骤:

  1. 创建一个 IAM 角色,该角色有权为相关存储桶生成预签名 URL。

  2. 获取 lambda 基本执行角色并为该角色添加权限以代入步骤 1 中的角色。

  3. 在您的 boto3 代码中,添加一个步骤以在生成签名 url 之前承担步骤 1 中的角色。像这样:

    import boto3

    sts_client = boto3.client('sts')

    assumed_role_object = sts_client.assume_role(
    RoleArn='arn_of_role_to_assume'
    )

    credentials = assumed_role_object['Credentials']

    s3_client = boto3.client(
    's3',
    aws_access_key_id=credentials['AccessKeyId'],
    aws_secret_access_key=credentials['SecretAccessKey'],
    aws_session_token=credentials['SessionToken'],
    )

    s3_client.generate_presigned_url......

关于python-3.x - Boto3 InvalidAccessKeyId in generate_presigned_post,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60985001/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com