ClientError:调用 HeadObject 操作时发生错误(403):尝试跨帐户复制时禁止

Posted

技术标签:

【中文标题】ClientError:调用 HeadObject 操作时发生错误(403):尝试跨帐户复制时禁止【英文标题】:ClientError: An error occurred (403) when calling the HeadObject operation: Forbidden when trying cross account copy 【发布时间】:2021-02-13 11:48:37 【问题描述】:

我正在做 s3 对象的跨帐户副本。当我尝试将文件从源存储桶复制到目标存储桶时,我收到错误 ClientError: An error occurred (403) when calling HeadObject operation: Forbidden 我在 s3_object.download_fileobj(buffer)

行遇到错误
    final_df=pd.DataFrame() 
for file in files1: 
# file=file.split('/')[-1]
    bucket = 'source bucket'
    buffer = io.BytesIO()
    s3 = boto3.resource('s3')
    s3_object = s3.Object(bucket,file)
    s3_object.download_fileobj(buffer)
    df = pd.read_parquet(buffer)
    print(file)
    s3 = boto3.client('s3')
    file=file.split('/')[-1]
    print(file)
    final_df=pd.concat([final_df,df],sort=False)

Files1 是存储桶中所有 parquet 文件的列表

【问题讨论】:

【参考方案1】:

这里的问题可能在于这是一个跨帐户副本。您可能需要设置一个 IAM 角色以确保两个账户都有权限。

如 https://aws.amazon.com/premiumsupport/knowledge-center/s3-troubleshoot-403/ 中所述,以及其他故障排除选项,

对于持续的跨账户权限,请在您的 对您的存储桶具有权限的帐户。然后,授予另一个 AWS account 承担该 IAM 角色的权限。了解更多信息, 请参阅教程:使用 IAM 角色跨 AWS 账户委派访问。 (https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html)

【讨论】:

是的,我已经设置了一个 IAM 角色,并且源存储桶和目标存储桶已将其添加到信任关系中。源存储桶具有列表、获取和解密权限。目标存储桶已添加 put 权限。

以上是关于ClientError:调用 HeadObject 操作时发生错误(403):尝试跨帐户复制时禁止的主要内容,如果未能解决你的问题,请参考以下文章

致命错误:调用 HeadObject 操作时发生错误(404):键“”不存在

AWS BOTO3 S3 python - 调用 HeadObject 操作时发生错误(404):未找到

Django/AWS - 调用 HeadObject 操作时发生错误(403):禁止

我可以在不显式调用 headObject 的情况下从 S3 对象流中获取 Content-Type 吗?

AWS CLI S3:使用终端在本地复制文件:致命错误:调用 HeadObject 操作时发生错误(404)

AWS lambda:调用HeadObject操作时发生错误(404):找不到