の最小バージョンを強制する TLS - AWS Command Line Interface

このドキュメントは、 のバージョン 1 AWS CLI のみを対象としています。のバージョン 2 に関連するドキュメントについては AWS CLI、「 バージョン 2 ユーザーガイド」を参照してください。

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

の最小バージョンを強制する TLS

AWS Command Line Interface (AWS CLI) を使用する場合、Transport Layer Security (TLS) プロトコルは、 AWS CLI と 間の通信を保護する上で重要な役割を果たします AWS services。 AWS サービスと通信する際のセキュリティを強化するには、1.2 TLS 以降を使用する必要があります。

AWS CLI および AWS service は、暗号化、認証、データ整合性を提供するTLSプロトコルを使用して、データを安全に交換できます。TLS プロトコルを活用することで、 AWS CLI とのインタラクション AWS services が不正アクセスやデータ侵害から保護され、 AWS エコシステム全体のセキュリティが強化されます。

責任 AWS 共有モデル、 でのデータ保護に適用されます AWS Command Line Interface。このモデルで説明されているように、 AWS はすべての を実行するグローバルインフラストラクチャを保護する責任があります AWS services。お客様は、このインフラストラクチャでホストされているコンテンツに対する管理を維持する責任があります。また、 AWS services 使用する のセキュリティ設定および管理タスクについても責任を負います。データ保護の詳細については、「」を参照してくださいAWS CLI でのデータ保護

AWS CLI バージョン 1 で 1.2 TLS より前のTLSバージョンが使用されないようにするには、Open SSLを再コンパイルしてこの最小値を適用し、新しく構築された Open を使用するように Python を再コンパイルする必要がありますSSL。

現在サポートされているプロトコルの確認

まず、Open SDKを使用してテストサーバーと Python に使用する自己署名証明書を作成しますSSL。

$ openssl req -subj '/CN=localhost' -x509 -newkey rsa:4096 -nodes -keyout key.pem -out cert.pem -days 365

次に、Open を使用してテストサーバーを起動しますSSL。

$ openssl s_server -key key.pem -cert cert.pem -www

新しいターミナルウィンドウで、仮想環境を作成し、 for Python をインストールSDKします。

$ python3 -m venv test-env source test-env/bin/activate pip install botocore

SDKの基盤となるHTTPライブラリcheck.pyを使用する という名前の新しい Python スクリプトを作成します。

$ import urllib3 URL = 'https://localhost:4433/' http = urllib3.PoolManager( ca_certs='cert.pem', cert_reqs='CERT_REQUIRED', ) r = http.request('GET', URL) print(r.data.decode('utf-8'))

新しいスクリプトを実行します。

$ python check.py

確立された接続に関する詳細が表示されます。出力で「Protocol:」を検索します。出力がTLSv1「.2」以降の場合、 はSDKデフォルトで v1.2 TLS 以降になります。以前のバージョンの場合は、OpenSSL を再コンパイルして Python を再コンパイルする必要があります。

ただし、Python のインストールがデフォルトで TLS v1.2 以降であっても、サーバーが v1.2 TLS 以降をサポートしていない場合、Python は v1.2 TLS より前のバージョンに再ネゴシエートできます。Python が以前のバージョンに自動的に再ネゴシエートしないことを確認するには、次のようにしてテストサーバーを再起動します。

$ openssl s_server -key key.pem -cert cert.pem -no_tls1_3 -no_tls1_2 -www

以前のバージョンの Open を使用している場合はSSL、 -no_tls_3フラグが使用できない可能性があります。この場合、使用している OpenSSL のバージョンが v1.3 をサポートしていないためTLS、 フラグを削除します。次に、Python スクリプトを実行します。

$ python check.py

Python のインストールが 1.2 TLS より前のバージョンに対して再ネゴシエートされない場合は、SSLエラーが表示されます。

$ urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='localhost', port=4433): Max retries exceeded with url: / (Caused by SSLError(SSLError(1, '[SSL: UNSUPPORTED_PROTOCOL] unsupported protocol (_ssl.c:1108)')))

接続が可能な場合は、OpenSSL と Python を再コンパイルして、v1TLS.2 より前のプロトコルのネゴシエーションを無効にする必要があります。

Open と SSLPython をコンパイルする

SDK または AWS CLI が 1.2 TLS より前のバージョンでネゴシエートされないようにするには、Open SSLと Python を再コンパイルする必要があります。これを行うには、次のコンテンツをコピーしてスクリプトを作成し、実行します。

#!/usr/bin/env bash set -e OPENSSL_VERSION="1.1.1d" OPENSSL_PREFIX="/opt/openssl-with-min-tls1_2" PYTHON_VERSION="3.8.1" PYTHON_PREFIX="/opt/python-with-min-tls1_2" curl -O "https://www.openssl.org/source/openssl-$OPENSSL_VERSION.tar.gz" tar -xzf "openssl-$OPENSSL_VERSION.tar.gz" cd openssl-$OPENSSL_VERSION ./config --prefix=$OPENSSL_PREFIX no-ssl3 no-tls1 no-tls1_1 no-shared make > /dev/null sudo make install_sw > /dev/null cd /tmp curl -O "https://www.python.org/ftp/python/$PYTHON_VERSION/Python-$PYTHON_VERSION.tgz" tar -xzf "Python-$PYTHON_VERSION.tgz" cd Python-$PYTHON_VERSION ./configure --prefix=$PYTHON_PREFIX --with-openssl=$OPENSSL_PREFIX --disable-shared > /dev/null make > /dev/null sudo make install > /dev/null

これにより、1.2 より前のバージョンを自動的にネゴシエートしない静的にリンクされた OpenSSL を持つ Python TLS のバージョンがコンパイルされます。これにより、 ディレクトリに Open SSLがインストールされ、 /opt/openssl-with-min-tls1_2 ディレクトリに Python がインストールされます/opt/python-with-min-tls1_2。このスクリプトを実行した後、新しいバージョンの Python のインストールを確認します。

$ /opt/python-with-min-tls1_2/bin/python3 --version

これにより、以下が出力されます。

$ Python 3.8.1

この新しいバージョンの Python が 1.2 より前のバージョンをネゴシエートしていないことを確認するには、新しくインストールされた Python TLS バージョン (つまり、) 現在サポートされているプロトコルの確認を使用して からステップを再実行します/opt/python-with-min-tls1_2/bin/python3