이 설명서는 의 버전 1 AWS CLI 전용입니다. 의 버전 2와 관련된 설명서는 버전 2 사용 설명서 를 AWS CLI참조하세요.
기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
에 TLS 대한 최소 버전 적용 AWS CLI
AWS Command Line Interface (AWS CLI)를 사용하는 경우 전송 계층 보안(TLS) 프로토콜은 AWS CLI 및 간의 통신을 보호하는 데 중요한 역할을 합니다 AWS 서비스. AWS 서비스와 통신할 때 보안을 강화하려면 TLS 1.2 이상을 사용해야 합니다.
AWS CLI 및 는 암호화, 인증 및 데이터 무결성을 제공하는 TLS 프로토콜로 데이터를 안전하게 교환할 AWS 서비스 수 있습니다. TLS 프로토콜을 활용하면 AWS CLI 와의 상호 작용 AWS 서비스 이 무단 액세스 및 데이터 침해로부터 보호되어 AWS 에코시스템의 전반적인 보안이 강화됩니다.
AWS 공동 책임 모델
AWS CLI 버전 1이 TLS 1.2 이전 TLS 버전을 사용하지 않도록 하려면 OpenSSL을 다시 컴파일하여 이 최소값을 적용한 다음 Python을 다시 컴파일하여 새로 빌드된 Open 을 사용해야 할 수 있습니다SSL.
현재 지원되는 프로토콜 확인
먼저 Open 을 SDK 사용하여 테스트 서버 및 Python에 사용할 자체 서명된 인증서를 생성합니다SSL.
$
openssl req -subj '/CN=localhost' -x509 -newkey rsa:4096 -nodes -keyout key.pem -out cert.pem -days 365
그런 다음 열기 를 사용하여 테스트 서버를 스핀업합니다SSL.
$
openssl s_server -key key.pem -cert cert.pem -www
새 터미널 창에서 가상 환경을 생성하고 PythonSDK용 를 설치합니다.
$
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
그러면 연결에 대한 세부 정보가 표시됩니다. 출력에서 "프로토콜 : "을 검색합니다. 출력이 “TLSv1.2” 이상인 경우 는 SDK 기본적으로 TLS v1.2 이상으로 설정됩니다. 이전 버전인 경우 OpenSSL 및 Python을 다시 컴파일해야 합니다.
그러나 Python 설치가 TLS v1.2 이상으로 기본 설정되어 있더라도 서버가 TLS v1.2 이상을 지원하지 않는 경우 Python이 TLS v1.2 이전 버전으로 재협상할 수 있습니다. Python이 이전 버전으로 자동으로 다시 협상하지 않는지 확인하려면 다음과 같이 테스트 서버를 다시 시작하세요.
$
openssl s_server -key key.pem -cert cert.pem -no_tls1_3 -no_tls1_2 -www
이전 버전의 Open 를 사용하는 경우 -no_tls_3
플래그를 사용할 수 없을 SSL수 있습니다. 이 경우 사용 중인 OpenSSL 버전이 TLS v1.3을 지원하지 않으므로 플래그를 제거합니다. 그런 다음 Python 스크립트를 다시 실행합니다.
$
python check.py
Python 설치가 TLS 1.2 이전 버전에 대해 올바르게 재협상되지 않으면 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을 다시 컴파일하여 TLS v1.2 이전의 프로토콜 협상을 비활성화해야 합니다.
OpenSSL 및 Python 컴파일
SDK 또는 가 TLS1.2 이전 버전에 대해 협상 AWS CLI 하지 않도록 하려면 OpenSSL 및 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 컴파일됩니다. 또한 디렉터리에 OpenSSL을 설치하고 /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이 TLS1.2 이전 버전을 협상하지 않는지 확인하려면 새로 설치된 Python 버전(즉, /opt/python-with-min-tls1_2/bin/python3
)을 현재 지원되는 프로토콜 확인 사용하여 단계를 다시 실행합니다.