Aplicando uma versão mínima do TLS para o AWS CLI - AWS Command Line Interface

Esta documentação é para a AWS CLI única versão 1. Para obter a documentação relacionada à versão 2 do AWS CLI, consulte o Guia do usuário da versão 2.

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Aplicando uma versão mínima do TLS para o AWS CLI

Ao usar o AWS Command Line Interface (AWS CLI), o protocolo Transport Layer Security (TLS) desempenha um papel crucial na proteção da comunicação entre AWS CLI e. Serviços da AWS Para aumentar a segurança ao se comunicar com os AWS serviços, você deve usar a versão TLS 1.2 ou posterior.

O AWS CLI and AWS service (Serviço da AWS) pode trocar dados com segurança, com o TLS protocolo fornecendo criptografia, autenticação e integridade dos dados. Ao aproveitar o TLS protocolo, ele AWS CLI garante que suas interações Serviços da AWS sejam protegidas contra acesso não autorizado e violações de dados, aumentando a segurança geral do seu ecossistema. AWS

O modelo de responsabilidade AWS compartilhada modelo se aplica à proteção de dados em AWS Command Line Interface. Conforme descrito neste modelo, AWS é responsável por proteger a infraestrutura global que executa todos os Serviços da AWS. Você é responsável por manter o controle sobre seu conteúdo hospedado nessa infraestrutura. Você também é responsável pelas tarefas de configuração e gerenciamento de segurança do Serviços da AWS que você usa. Para obter mais informações sobre proteção de dados, consulteProteção de dados no AWS CLI.

Para garantir que a AWS CLI versão 1 não use nenhuma TLS versão anterior à TLS 1.2, talvez seja necessário recompilar o Open SSL para impor esse mínimo e, em seguida, recompilar o Python para usar o Open recém-criado. SSL

Determinar os protocolos atualmente compatíveis

Primeiro, crie um certificado autoassinado para usar no servidor de teste e no SDK Python usando o Open. SSL

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

Em seguida, ative um servidor de teste usando o OpenSSL.

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

Em uma nova janela de terminal, crie um ambiente virtual e instale o SDK para Python.

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

Crie um novo script Python chamado check.py que use a biblioteca subjacente SDK HTTP do.

$ 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'))

Execute o novo script.

$ python check.py

Ele exibe detalhes sobre a conexão feita. Procure “Protocol : ” na saída. Se a saída for "TLSv1.2" ou posterior, o SDK padrão será v1.2 ou posterior. TLS Se for uma versão anterior, você precisará recompilar o Open SSL e recompilar o Python.

No entanto, mesmo que sua instalação do Python tenha como padrão a versão TLS 1.2 ou posterior, ainda é possível que o Python renegocie para uma versão anterior à TLS v1.2 se o servidor não suportar a versão 1.2 ou posterior. TLS Para verificar se o Python não renegocia automaticamente para versões anteriores, reinicie o servidor de teste com o seguinte.

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

Se você estiver usando uma versão anterior do OpenSSL, talvez não tenha a -no_tls_3 bandeira disponível. Se for esse o caso, remova o sinalizador porque a versão do Open SSL que você está usando não é compatível com a TLS v1.3. Execute novamente o script Python.

$ python check.py

Se sua instalação do Python corretamente não renegociar para versões anteriores à TLS 1.2, você deverá receber um erro. 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)')))

Se você conseguir fazer uma conexão, precisará recompilar o Open e o SSL Python para desativar a negociação de protocolos anteriores à v1.2. TLS

Compile Open SSL e Python

Para garantir que SDK ou AWS CLI não negocie nada anterior à TLS 1.2, você precisa recompilar o Open e SSL o Python. Para fazer isso, copie o seguinte conteúdo para criar um script e executá-lo.

#!/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

Isso compila uma versão do Python que tem um SSL Open vinculado estaticamente que não negocia automaticamente nada anterior à 1.2. TLS Isso também instala o Open SSL no /opt/openssl-with-min-tls1_2 diretório e instala o Python no diretório. /opt/python-with-min-tls1_2 Depois de executar esse script, verifique a instalação da nova versão do Python.

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

Isso deve imprimir o seguinte.

$ Python 3.8.1

Para confirmar que essa nova versão do Python não negocia uma versão anterior à TLS 1.2, execute novamente as etapas de uso da versão recém-instalada Determinar os protocolos atualmente compatíveis do Python (ou seja,). /opt/python-with-min-tls1_2/bin/python3