ODO无法使用S3ResponseError访问S3:403 Forbidden

时间:2017-07-24 22:05:31

标签: amazon-s3 boto boto3 odo

我正在使用odo库将 pandas dataframe 传输到S3。但是我收到了以下错误:

import pandas as pd
df = pd.DataFrame([[1, 2], [3, 4], [5, 6], [7, 8]], columns=["A", "B"])
odo(df,'s3://path_to_s3_folder')
S3ResponseError: S3ResponseError: 403 Forbidden
<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>AccessDenied</Code><Message>Anonymous access is forbidden for this operation</Message><RequestId>F5958774D56AD29E</RequestId><HostId>zOH8JOxpSgB5Scgc/YrtHO1+e9lXoKAF89IhRSeAiSoGHAJxyjXKBVFIYETeO4gSLZOUgXmwKLM=</HostId></Error>

现在我正确设置了AWS凭据,我可以在~/.aws/credentials文件中看到

cat credentials
[default]
aws_access_key_id = XXXXX
aws_secret_access_key = XXXXXXXXXX

aws cli对我来说正常工作,我可以正确运行aws lscp命令(我想这意味着我确实拥有所需的权限)。

aws s3 ls s3://path_to_s3

此外boto3能够访问s3资源并且不会出错。

import boto3
s3 = boto3.resource('s3')
for bucket in s3.buckets.all():
    print(bucket.name)

配置中可能出现的错误/缺失是什么?

2 个答案:

答案 0 :(得分:1)

请安装boto。

快速检查pandas odo源代码后,代码只使用boto模块,不支持boto3。

答案 1 :(得分:0)

正如@mootmoot指出,odo使用boto不使用boto3

boto3可以按照here~/.aws/credentials获取aws凭据。但是对于boto,您需要按照所述here

设置env变量

添加,

$ export AWS_ACCESS_KEY_ID=XXXXX
$ export AWS_SECRET_ACCESS_KEY=XXXXXXXXXX