pandas to_csv 的 CreateBucket 权限到 S3 的 AccessDenied 错误

AccessDenied error from CreateBucket Permissions for pandas to_csv to S3

我在 EC2 机器上有一个脚本 运行ning,由 运行ning pd.to_csv('s3://<my_bucket_name>/<file_path> 完成。

运行 在本地使用我的 AWS 管理员凭据,此脚本 运行 没问题并将 csv 存入正确的存储桶。

我的 EC2 实例的 S3 权限是从 AWS 的文档中复制和粘贴的:https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_examples_s3_rw-bucket.html

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "ListObjectsInBucket",
            "Effect": "Allow",
            "Action": ["s3:ListBucket"],
            "Resource": ["arn:aws:s3:::<my_bucket_name>"]
        },
        {
            "Sid": "AllObjectActions",
            "Effect": "Allow",
            "Action": "s3:*Object*",
            "Resource": ["arn:aws:s3:::<my_bucket_name>/*"]
        }
    ]
}

在EC2实例上运行时,我的错误是botocore.exceptions.ClientError: An error occurred (AccessDenied) when calling the CreateBucket operation: Access Denied

我不明白为什么 pandas/s3fs 试图在我的存储桶已经存在的情况下创建一个存储桶。其他地方的建议是只提供 s3:* 对 ec2 的访问权限,但我宁愿限制得更多一些,也不愿没有任何限制。

关于如何解决这个问题有什么想法吗?

快速查看 Pandas 代码库并没有向我显示任何具体内容,但我的猜测是它正在检查 listing/updating 对象之前是否存在存储桶,但失败是因为它没有 s3:ListAllMyBuckets permission.

您可以通过为您的角色赋予该行动(在其自己的声明中)来证实或否认该理论,这有望避免必须给予它 s3:*

事实证明,这更多是 运行 ec2 实例的 aws 批处理角色的问题。写入权限足以在没有存储桶列表权限的情况下写入 S3。 AccessDenied 错误是一个更普遍的错误,即没有权限传递给实例。