使用PEM访问S3以通过Python进行身份验证

时间:2019-05-17 17:37:06

标签: python ssl-certificate

为我提供了一个PEM文件来访问S3存储桶。我可以使用curl(例如curl -v -k --cert file_path_in_bucket ,-O https: ip / sourcefilepath )将文件复制到存储桶-这很好地表明PEM允许我访问存储桶。

我尝试将其转换为Python Requests: .pem -> .crt + key之后的Python request.get调用,但收到SSLError(“握手不正确:错误([(“ SSL例程”,“ ssl3_get_server_certificate”,“证书验证失败”)) ,))。在我看来,我需要提供其他信息。

任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:1)

原来的答案如下:

r = requests.get('https:// ip:port / file_path ',verify = False,cert =' pem_file_path ')

注意,请参考 cert 参数以传递pem文件。

快乐编码

答案 1 :(得分:0)

通过Python访问S3的首选方法是使用BOTO3库。

假设您已经非常简单地配置了SECRET KEY和Credentials。

import boto3
s3list = boto3.resource('s3')
print('Displaying list of Buckets I have access to ')
for bucket in s3list.buckets.all():
   print(bucket.name)

答案 2 :(得分:0)

这是要使用Boto3上传图像

import boto3
img = open('some.jpg','rb')
s3list.Bucket('mybucket').put_object(Key='some.jpg', Body=img)

答案 3 :(得分:0)

正如他们已经向您建议的那样,boto3易于使用。 这里有我用于将对象放入s3存储桶或从中获取对象的函数。

def putdataons3(localfile, remotefile):
    try:
        bucket = 'yourbucket'
        boto3accesskey = 'your access key'
        boto3secretaccesskey = 'your secret access key'
        boto3client = boto3.client('s3', region_name='eu-central-1', aws_access_key_id=boto3accesskey, aws_secret_access_key=boto3secretaccesskey)
        d = boto3client.put_object(Body=open(localfile, 'rb').read(), Bucket=bucket, Key=remotefile)
        if d['ResponseMetadata']['HTTPStatusCode'] == 200:
            return True
        return False
    except:
        return False

def getdatafroms3(remotefile, localfile, overwrite=True):
    try:
        if overwrite == False:
            if os.path.isfile(localfile):
                return False
        bucket = 'yourbucket'
        boto3accesskey = 'your access key'
        boto3secretaccesskey = 'your secret access key'
        boto3client = boto3.client('s3', region_name='eu-central-1', aws_access_key_id=boto3accesskey, aws_secret_access_key=boto3secretaccesskey)
        d = boto3client.get_object(Bucket=bucket, Key=remotefile)
        if d['ResponseMetadata']['HTTPStatusCode'] == 200:
            f = open(localfile, "wb")
            d = d['Body'].read()
            f.write(d)
            f.close()
            return True
        return False
    except:
        return False