我正在 jupyter 笔记本中使用 python。 我正在尝试从 aws s3 存储桶访问多个 parquet 文件并将它们全部转换为一个 json 文件。我知道我可以访问数据,但我得到:
ClientError: An error occurred (AccessDenied) when calling the ListObjects operation: Access Denied
这是我的代码:
import boto3
s3_resource = boto3.resource('s3')
s3_client = boto3.client('s3')
bucket = s3_resource.Bucket(name='my-bucket')
all_objects = s3_client.list_objects(Bucket = 'my-bucket', Prefix = 'Files.parquet')
我不确定拒绝访问是从哪里来的。非常感谢!
您可以点击此链接,并将以下策略附加到用户/角色。
{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action":[
"s3:ListBucket"
],
"Resource":"arn:aws:s3:::my-bucket"
}
]
}
我做了这个answer中的所有事情,但没有成功。无论如何,你应该先这样做。
对我有用的是在 AWS IAM 控制台中为我的帐户设置新的密钥和秘密,因为我使用的是另一个无权访问 S3 的用户帐户提供的密钥和秘密。
我还在S3中设置了直接访问S3的策略。 点击
Bucket --> Permissions --> Bucket policy
并创建这样的东西:
{
"Version": "2012-10-17",
"Id": "Policy1675850598142",
"Statement": [
{
"Sid": "Stmt1675850596389",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::918775241671:user/[email protected]"
},
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::bucketName"
}
]
}
您还需要在 boto3 中创建经过身份验证的会话才能连接,这是我的完整代码:
import boto3
import awswrangler as wr
# Define your AWS access key and secret key
aws_access_key_id = "SSSSL22FTPTYGZWDF4"
aws_secret_access_key = "fjsidkljfksjfkjs490340+eVcGaXmcamIOrDDzW"
# Use boto3 to create a session with your AWS credentials
session = boto3.Session(
aws_access_key_id=aws_access_key_id,
aws_secret_access_key=aws_secret_access_key
)
# Use awswrangler to connect to your S3 bucket
bucket_name = "mybucket"
# List the contents of your S3 bucket
s3 = session.client("s3")
result = s3.list_objects(Bucket=bucket_name)
# Print the contents of the bucket
if "Contents" in result:
for obj in result["Contents"]:
print(obj["Key"])
else:
print("The bucket is empty.")
您可能需要使用 VPN 访问您的 AWS 账户。如果您在本地运行该程序并且未连接到 VPN,AWS 将返回此信息。