Botoを使用してS3に接続しようとしていますが、失敗するようです。いくつかの回避策を試しましたが、うまくいかないようです。誰かがこれを手伝ってくれませんか?以下はコードです。
import boto
if not boto.config.has_section('Credentials'):
boto.config.add_section('Credentials')
boto.config.set('Credentials', 'aws_access_key_id', AWS_KEY)
boto.config.set('Credentials', 'aws_secret_access_key', AWS_SECRET_KEY)
if not boto.config.has_section('Boto'):
boto.config.add_section('Boto')
boto.config.set('Boto', 'https_validate_certificates', 'False')
boto.config.add_section('aws info')
boto.config.set('aws info','aws_validate_certs','False')
s3 = boto.connect_s3(validate_certs=False)
bucket = s3.get_bucket(Bucket_NAME)
私は方法を発見しました、
connect_s3()
でis_secure=False
を使用しました。
おそらくバケット名にドットが含まれているため、SSL証明書の検証が失敗します。これはかなり頻繁に発生する問題です。たとえば github issue を参照してください。
安全でない接続(is_secure=False
)、代わりにOrdinaryCallingFormat
を使用:
import boto
conn = boto.s3.connect_to_region('eu-west-1', calling_format=boto.s3.connection.OrdinaryCallingFormat())
bucket = conn.get_bucket(your_bucket)
おそらく AWSリージョン を更新する必要があります。 us-east-1
Boto3では、s3クライアントを使用している場合、s3クライアントを作成するときにverify = Falseを使用します。たとえば:
s3 = boto3.client('s3', verify=False)
Boto3のドキュメントで述べたように、これはSSL証明書の検証をオフにするだけです。 SSLは引き続き使用されますが(use_sslがFalseでない限り)、SSL証明書は検証されません。
https://boto3.amazonaws.com/v1/documentation/api/latest/reference/core/session.html
verify = Falseを追加
boto3.resource(
"s3",
endpoint_url=<URL>,
aws_access_key_id=<ID>,
aws_secret_access_key=<Key>,
verify=False
)
macOSユーザー:このページにリンクされているpython.orgバイナリインストーラーのPython 3.6を使用している場合は、インストール中に表示される重要な情報をよく読んでください。この情報は、インストール後にをクリックしても表示されます。/Applications/Python 3.6/ReadMe.rtf。3.6.0インストーラーが提供するPythonの変更について、特にSSL証明書の検証に関して重要な情報があります。
https://www.python.org/downloads/release/python-360/
この記事の執筆時点でのReadMe.rtfから:
証明書の検証とOpenSSL
[〜#〜] new [〜#〜]Python 3.6のこのバリアントには、 OpenSSL 1.0.2以前のリリースとは異なり、非推奨のApple提供のOpenSSLライブラリは使用されなくなりました。これは、キーチェーンアクセスアプリケーションとセキュリティコマンドラインユーティリティによって管理されるシステムキーチェーンとユーザーキーチェーンの信頼証明書が使用されなくなったことも意味しますPython ssl moduleによるデフォルトです。3.6.0の場合、サンプルのコマンドスクリプトが/ Applications/Python 3.6に含まれており、サードパーティの証明書パッケージからデフォルトのルート証明書のキュレートされたバンドルをインストールします( https://pypi.python.org/pypi/certifi )。certifiの使用を選択した場合、証明書バンドルが更新されたときに通知されるようにプロジェクトの電子メール更新サービスにサブスクライブすることを検討する必要があります。
Python 3.6インストーラに含まれているバンドルされたpipには、ダウンロード接続を確認するための独自のデフォルトの証明書ストアがあります。
私もこの問題に遭遇しました。私の環境はUbuntu 15.04、Python 2.7.9およびBoto 2.38.0です。
引数validate_certs = Falseを設定しても、有効な証明書がなければHTTPS接続で動作しません。 botoのコードを読んだ後、それはPythonのsslモジュールの動作であることがわかりました。次に、ここで解決策を見つけました: "SSL:CERTIFICATE_VERIFY_FAILED" Error 。そして、ソリューションは動作します!!!。