에 TLS 대한 최소 버전 적용 AWS CLI - AWS Command Line Interface

이 설명서는 의 버전 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 Command Line Interface. 이 모델에 설명된 대로 AWS 는 모든 를 실행하는 글로벌 인프라를 보호할 책임이 있습니다 AWS 서비스. 사용자는 인프라에서 호스팅되는 콘텐츠를 관리해야 합니다. 또한 사용하는 의 보안 구성 및 관리 태스크에 대한 책임이 AWS 서비스 있습니다. 데이터 보호에 대한 자세한 내용은 섹션을 참조하세요의 데이터 보호 AWS CLI.

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)을 현재 지원되는 프로토콜 확인 사용하여 단계를 다시 실행합니다.