Segurança com o Amazon Aurora MySQL - Amazon Aurora

Segurança com o Amazon Aurora MySQL

A segurança do Amazon Aurora MySQL é gerenciada em três níveis:

  • Para controlar quem pode realizar ações de gerenciamento do Amazon RDS em clusters de banco de dados e instâncias de banco de dados do Aurora MySQL, utilize o AWS Identity and Access Management (IAM). Ao se conectar à AWS usando credenciais do IAM, sua conta da AWSdeve ter políticas do IAM que concedam as permissões necessárias para executar operações de gerenciamento do Amazon RDS. Para obter mais informações, consulte Gerenciamento de identidade e acesso no Amazon Aurora.

    Se você estiver utilizando o IAM para acessar o console do Amazon RDS, primeiro faça login no AWS Management Console com suas credenciais de usuário do IAM. Depois, acesse o console do Amazon RDS em https://console.aws.amazon.com/rds/.

  • Crie clusters de banco de dados do Aurora MySQL em uma nuvem pública virtual (VPC) com base no serviço Amazon VPC. Para controlar quais dispositivos e instâncias do Amazon EC2 podem abrir conexões com o endpoint e a porta da instância de banco de dados dos clusters de banco de dados do Aurora MySQL em uma VPC, use um grupo de segurança da VPC. É possível estabelecer essas conexões de endpoint e porta usando Transport Layer Security (TLS). Além disso, as regras de firewall em sua empresa podem controlar se dispositivos sendo executados nela podem abrir conexões em uma instância de banco de dados. Para ter mais informações sobre VPCs, consulte VPCs da Amazon VPC e Amazon Aurora.

    A locação da VPC compatível depende da classe de instância de banco de dados usada pelos seus clusters de banco de dados do Aurora MySQL. Com a locação de VPC default, a VPC é executada em hardware compartilhado. Com a locação de VPC dedicated, a VPC é executada em uma instância de hardware dedicada. As classes de instâncias de banco de dados com performance intermitente apenas oferecem suporte para locação de VPC padrão. Essas classes de instâncias incluem db.t2, db.t3 e db.t4g. Todas as outras classes de instância de banco de dados do Aurora MySQL oferecem suporte para locação de VPC padrão e dedicada.

    nota

    Recomendamos usar as classes de instância de banco de dados T somente para servidores de desenvolvimento e teste, ou outros servidores que não sejam de produção. Para obter mais detalhes sobre as classes de instâncias T, consulte Uso de classes de instância T para desenvolvimento e testes.

    Para ter mais informações sobre as classes da instância, consulte Classes de instância de banco de dados Aurora. Para ter mais informações sobre a locação de VPC default e dedicated, consulte Instâncias dedicadas no Guia do usuário do Amazon Elastic Compute Cloud.

  • Para autenticar o login e as permissões de um cluster de banco de dados do Amazon Aurora MySQL, siga uma das seguintes abordagens ou uma combinação delas.

    • Você pode seguir a mesma abordagem de uma instância autônoma do MySQL.

      Comandos, como CREATE USER, RENAME USER, GRANT, REVOKE e SET PASSWORD funcionam exatamente como em bancos de dados on-premises, assim como modificando diretamente tabelas de esquema de banco de dados. Para obter mais informações, consulte Access Control and Account Management na documentação do MySQL.

    • Você também pode usar a autenticação de banco de dados do IAM.

      Com a autenticação de banco de dados do IAM, é possível autenticar seu cluster de banco de dados usando um usuário do IAM ou um perfil do IAM e um token de autenticação. Um token de autenticação é um valor exclusivo, gerado usando o processo de assinatura Signature Version 4. Ao usar a autenticação de banco de dados do IAM, você pode usar as mesmas credenciais para controlar o acesso aos seus recursos e bancos de dados da AWS. Para obter mais informações, consulte Autenticação do banco de dados do IAM.

nota

Para obter mais informações, consulte Segurança no Amazon Aurora.

Privilégios de usuário mestre com Amazon Aurora MySQL.

Quando você cria uma instância de banco de dados do Amazon Aurora MySQL, o usuário principal apresenta os seguintes privilégios padrão listados em Privilégios da conta de usuário mestre.

Para fornecer serviços de gerenciamento para cada cluster de banco de dados, os usuários admin e rdsadmin são criados quando o cluster de banco de dados é criado. Tentar descartar, renomear ou alterar a senha, ou alterar os privilégios, para a conta rdsadmin resulta em um erro.

Nos clusters de banco de dados do Aurora MySQL versão 2, os usuários admin e rdsadmin são criados quando o cluster de banco de dados é criado. Nos clusters de banco de dados do Aurora MySQL versão 3, os usuários admin, rdsadmin e rds_superuser_role são criados.

Importante

É altamente recomendável não usar o usuário mestre diretamente nas aplicações. Em vez disso, siga as práticas recomendadas de usar um usuário do banco de dados criado com os privilégios mínimos obrigatórios para a aplicação.

Visando o gerenciamento do cluster de banco de dados Aurora MySQL, os comandos kill e kill_query padrão foram restritos. Em vez disso, use os comandos do Amazon RDS rds_kill e rds_kill_query para encerrar sessões ou consultas de usuários em instâncias de banco de dados Aurora MySQL.

nota

A criptografia de uma instância de banco de dados e os snapshots não são compatíveis com a região China (Ningxia).

Usar TLS com clusters de banco de dados do Aurora MySQL

Os clusters de banco de dados do Amazon Aurora MySQL são compatíveis com conexões Transport Layer Security (TLS) de aplicações que usam o mesmo processo e a mesma chave pública que as instâncias de banco de dados do RDS para MySQL.

O Amazon RDS cria um certificado TLS e o instala na instância de banco de dados quando o Amazon RDS provisiona a instância. Esses certificados são assinados por uma autoridade de certificado. O certificado TLS inclui o endpoint da instância de banco de dados como o nome comum (CN) do certificado TLS para se proteger contra ataques de falsificação. Por isso, você pode usar o endpoint do cluster de banco de dados para se conectar a um cluster de banco de dados usando TLS somente se o seu cliente for compatível com Subject Alternative Names (SAN). Caso contrário, será necessário usar o endpoint da instância de gravação.

Para obter informações sobre como baixar certificados, consulte Como Usar SSL/TLS para criptografar uma conexão com um cluster de banco de dados.

Recomendamos o Driver JDBC para MySQL da AWS, como um cliente que comporta SAN com TLS. Para obter mais informações sobre o JDBC Driver para MySQL da AWS e as instruções completas para usá-lo, consulte o Repositório do GitHub do JDBC Driver para MySQL da AWS.

Exigir uma conexão TLS com um cluster de banco de dados do Aurora MySQL

É possível exigir que todas as conexões de usuário com o cluster de banco de dados do Aurora MySQL usem TLS com o parâmetro de cluster de banco de dados require_secure_transport. Por padrão, o parâmetro require_secure_transport é definido como OFF. Você pode definir o parâmetro require_secure_transport como ON para exigir TLS para conexões com o cluster de banco de dados.

Você pode definir o valor do parâmetro require_secure_transport atualizando o grupo de parâmetros do seu cluster de banco de dados. Você não precisa reinicializar seu cluster de banco de dados para que a alteração entre em vigor. Para obter mais informações sobre parameter groups, consulte Trabalhar com grupos de parâmetros.

nota

O parâmetro require_secure_transport está disponível para o Aurora MySQL versões 2 e 3. É possível definir esse parâmetro em um grupo de parâmetros de cluster de banco de dados personalizado. O parâmetro não está disponível em grupos de parâmetros de instância de banco de dados.

Quando o parâmetro require_secure_transport é definido como ON para um cluster de banco de dados, um cliente de banco de dados pode se conectar a ele se puder estabelecer uma conexão criptografada. Caso contrário, uma mensagem de erro semelhante à seguinte é retornada para o cliente:

MySQL Error 3159 (HY000): Connections using insecure transport are prohibited while --require_secure_transport=ON.

Versões do TLS para o Aurora MySQL

O Aurora MySQL é compatível com as versões 1.0, 1.1, 1.2 e 1.3 do Transport Layer Security (TLS). A partir do Aurora MySQL versão 3.04.0 e posterior, é possível usar o protocolo TLS 1.3 para proteger suas conexões. A tabela a seguir mostra o suporte a TLS para as versões do Aurora MySQL.

Aurora MySQL versão TLS 1.0 TLS 1.1 TLS 1.2 TLS 1.3

Aurora MySQL versão 3

Compatível (todas as versões abaixo de 3.04.0) Compatível (todas as versões abaixo de 3.04.0)

Compatível

Compatível

Aurora MySQL versão 2

Compatível Compatível

Compatível

Sem suporte
Importante

Se você estiver usando grupos de parâmetros personalizados para clusters do Aurora MySQL com a versão 2 e versões anteriores à 3.04.0, recomendamos usar o TLS 1.2 porque o TLS 1.0 e 1.1 são menos seguros. A edição comunitária do MySQL 8.0.26 e do Aurora MySQL 3.03 e suas versões secundárias descontinuaram o suporte ao TLS versões 1.1 e 1.0.

A edição comunitária do MySQL 8.0.28 e as versões compatíveis do Aurora MySQL 3.04.0 e posterior não são compatíveis com TLS 1.1 e TLS 1.0. Se você estiver usando as versões 3.04.0 e posterior do Aurora MySQL, não defina o protocolo TLS como 1.0 e 1.1 em seu grupo de parâmetros personalizados.

Para as versões 3.04.0 e posterior do Aurora MySQL, a configuração padrão é TLS 1.3 e TLS 1.2.

Você pode usar o parâmetro do cluster de banco de dados tls_version para indicar as versões de protocolo permitidas. Parâmetros de cliente semelhantes existem para a maioria das ferramentas de cliente ou drivers de banco de dados. Alguns clientes mais antigos podem não oferecer suporte às versões mais recentes do TLS. Por padrão, o cluster de banco de dados tenta usar a versão mais recente do protocolo TLS permitida pela configuração do servidor e do cliente.

Defina o parâmetro tls_version do cluster de banco de dados como um dos seguintes valores:

  • TLSv1.3

  • TLSv1.2

  • TLSv1.1

  • TLSv1

Você também pode definir o parâmetro tls_version como uma string de uma lista separada por vírgula. Se você quiser usar os protocolos TLS 1.2 e TLS 1.0, o parâmetro tls_version deverá incluir todos os protocolos, do mais baixo ao mais alto. Nesse caso, tls_version é definido como:

tls_version=TLSv1,TLSv1.1,TLSv1.2

Para obter informações sobre como modificar parâmetros em um grupo de parâmetros do cluster de banco de dados, consulte Modificar parâmetros em um grupo de parâmetros de cluster de banco de dados. Se você usar a AWS CLI para modificar o parâmetro de cluster de banco de dados tls_version, o ApplyMethod deverá ser definido como pending-reboot. Quando o método de aplicação é pending-reboot, as alterações nos parâmetros são aplicadas após você interromper e reiniciar os clusters de banco de dados associados ao grupo de parâmetros.

Configurar conjuntos de criptografia para conexões com clusters de banco de dados do Aurora MySQL

Usando conjuntos de cifras configuráveis, você pode ter mais controle sobre a segurança de suas conexões de banco de dados. É possível especificar uma lista de pacotes de criptografias que você deseja permitir para proteger conexões TLS do cliente com o banco de dados. Com conjuntos de cifras configuráveis, você pode controlar a criptografia de conexão aceita pelo servidor de banco de dados. Esse procedimento ajuda a impedir o uso de criptografia insegura ou obsoleta.

Os pacotes de criptografias configuráveis são compatíveis com o Aurora MySQL versão 3 e o Aurora MySQL versão 2. Para especificar a lista de criptografias permitidas do TLS 1.2, do TLS 1.1 e do TLS 1.0 para criptografar conexões, modifique o parâmetro de cluster ssl_cipher. Defina o parâmetro ssl_cipher em um grupo de parâmetros do cluster usando o AWS Management Console, a AWS CLI ou a API do RDS.

Defina o parâmetro ssl_cipher para uma string de valores de criptografia separados por vírgulas para a sua versão do TLS. Para a aplicação cliente, você pode especificar a criptografia a ser usada para conexões criptografadas usando a opção --ssl-cipher ao se conectar ao banco de dados. Para obter mais informações sobre como se conectar ao seu banco de dados, consulte Como conectar-se a um cluster de bancos de dados Amazon Aurora MySQL.

A partir do Aurora MySQL versão 3.04.0 e posterior, é possível especificar pacotes de criptografia do TLS 1.3. Para especificar os pacotes de criptografia do TLS 1.3 permitidos, modifique o parâmetro tls_ciphersuites em seu grupo de parâmetros. O TLS 1.3 reduziu o número de pacotes de criptografia disponíveis devido a mudanças na convenção de nomenclatura que remove o mecanismo de troca de chaves e o certificado usados. Defina o tls_ciphersuites como uma string de valores de criptografia separados por vírgulas para TLS 1.3.

A tabela a seguir mostra as criptografias compatíveis junto com o protocolo de criptografia TLS e as versões válidas do mecanismo do Aurora MySQL para cada criptografia.

CifraProtocolo de criptografiaVersões compatíveis do Aurora MySQL

DHE-RSA-AES128-SHA

TLS 1.03.01.0 e posteriores e todas as anteriores à 2.11.0

DHE-RSA-AES128-SHA256

TLS 1.23.01.0 e posteriores e todas as anteriores à 2.11.0

DHE-RSA-AES128-GCM-SHA256

TLS 1.23.01.0 e posteriores e todas as anteriores à 2.11.0

DHE-RSA-AES256-SHA

TLS 1.03.03.0 e anterior e todas as anteriores à 2.11.0

DHE-RSA-AES256-SHA256

TLS 1.23.01.0 e posteriores e todas as anteriores à 2.11.0

DHE-RSA-AES256-GCM-SHA384

TLS 1.23.01.0 e posteriores e todas as anteriores à 2.11.0

ECDHE-RSA-AES128-SHA

TLS 1.03.01.0 e versões posteriores, 2.09.3 e versões posteriores, 2.10.2 e versões posteriores

ECDHE-RSA-AES128-SHA256

TLS 1.23.01.0 e versões posteriores, 2.09.3 e versões posteriores, 2.10.2 e versões posteriores

ECDHE-RSA-AES128-GCM-SHA256

TLS 1.23.01.0 e versões posteriores, 2.09.3 e versões posteriores, 2.10.2 e versões posteriores

ECDHE-RSA-AES256-SHA

TLS 1.03.01.0 e versões posteriores, 2.09.3 e versões posteriores, 2.10.2 e versões posteriores

ECDHE-RSA-AES256-SHA384

TLS 1.23.01.0 e versões posteriores, 2.09.3 e versões posteriores, 2.10.2 e versões posteriores

ECDHE-RSA-AES256-GCM-SHA384

TLS 1.23.01.0 e versões posteriores, 2.09.3 e versões posteriores, 2.10.2 e versões posteriores

TLS_AES_128_GCM_SHA256

TLS 1.33.04.0 e posterior

TLS_AES_256_GCM_SHA384

TLS 1.33.04.0 e posterior

TLS_CHACHA20_POLY1305_SHA256

TLS 1.33.04.0 e posterior
nota

As cifras DHE-RSA só são compatíveis com as versões do Aurora MySQL anteriores à 2.11.0. Versões 2.11.0 e posteriores só são compatíveis com cifras ECDHE.

Para obter informações sobre como modificar parâmetros em um grupo de parâmetros do cluster de banco de dados, consulte Modificar parâmetros em um grupo de parâmetros de cluster de banco de dados. Se você usar a CLI para modificar o parâmetro de cluster de banco de dados ssl_cipher, o ApplyMethod deverá ser definido como pending-reboot. Quando o método de aplicação é pending-reboot, as alterações nos parâmetros são aplicadas após você interromper e reiniciar os clusters de banco de dados associados ao grupo de parâmetros.

Você também pode usar o comando da CLI describe-engine-default-cluster-parameters para determinar quais conjuntos de cifras são atualmente compatíveis com uma família de grupos de parâmetros específica. O exemplo a seguir mostra como obter os valores permitidos para o parâmetro de cluster ssl_cipher para o Aurora MySQL versão 2.

aws rds describe-engine-default-cluster-parameters --db-parameter-group-family aurora-mysql5.7 ...some output truncated... { "ParameterName": "ssl_cipher", "ParameterValue": "DHE-RSA-AES128-SHA,DHE-RSA-AES128-SHA256,DHE-RSA-AES128-GCM-SHA256,DHE-RSA-AES256-SHA,DHE-RSA-AES256-SHA256,DHE-RSA-AES256-GCM-SHA384,ECDHE-RSA-AES128-SHA,ECDHE-RSA-AES128-SHA256,ECDHE-RSA-AES128-GCM-SHA256,ECDHE-RSA-AES256-SHA,ECDHE-RSA-AES256-SHA384,ECDHE-RSA-AES256-GCM-SHA384", "Description": "The list of permissible ciphers for connection encryption.", "Source": "system", "ApplyType": "static", "DataType": "list", "AllowedValues": "DHE-RSA-AES128-SHA,DHE-RSA-AES128-SHA256,DHE-RSA-AES128-GCM-SHA256,DHE-RSA-AES256-SHA,DHE-RSA-AES256-SHA256,DHE-RSA-AES256-GCM-SHA384,ECDHE-RSA-AES128-SHA,ECDHE-RSA-AES128-SHA256,ECDHE-RSA-AES128-GCM-SHA256,ECDHE-RSA-AES256-SHA,ECDHE-RSA-AES256-SHA384,ECDHE-RSA-AES256-GCM-SHA384", "IsModifiable": true, "SupportedEngineModes": [ "provisioned" ] }, ...some output truncated...

Para obter mais informações sobre criptografia, consulte a variável ssl_cipher na documentação do MySQL. Para obter mais informações sobre formatos de conjunto de cifras, consulte a documentação sobre o formato de lista de cifras do openssl e o formato de strings de cifras do openssl no site do OpenSSL.

Criptografar conexões com um cluster de banco de dados do Aurora MySQL

Para criptografar conexões usando o cliente mysql padrão, inicie o cliente mysql usando o parâmetro --ssl-ca para referenciar a chave pública, por exemplo:

Para MySQL 5.7 e 8.0:

mysql -h myinstance.123456789012.rds-us-east-1.amazonaws.com --ssl-ca=full_path_to_CA_certificate --ssl-mode=VERIFY_IDENTITY

Para MySQL 5.6:

mysql -h myinstance.123456789012.rds-us-east-1.amazonaws.com --ssl-ca=full_path_to_CA_certificate --ssl-verify-server-cert

Substitua full_path_to_CA_certificate pelo caminho completo do certificado da autoridade de certificação (CA). Para obter informações sobre como baixar certificados, consulte Como Usar SSL/TLS para criptografar uma conexão com um cluster de banco de dados.

É possível exigir conexões TLS para determinadas contas de usuários. Por exemplo, é possível usar uma das seguintes declarações (dependendo da versão do MySQL) para exigir conexões SSL na conta do usuário encrypted_user.

Para MySQL 5.7 e 8.0:

ALTER USER 'encrypted_user'@'%' REQUIRE SSL;

Para MySQL 5.6:

GRANT USAGE ON *.* TO 'encrypted_user'@'%' REQUIRE SSL;

Ao usar um RDS Proxy, você se conecta ao endpoint do proxy e não ao endpoint do cluster usual. É possível tornar o SSL/TLS obrigatório ou opcional para conexões com o proxy, da mesma forma que para conexões feitas diretamente ao cluster de banco de dados do Aurora. Para receber informações sobre como usar o RDS Proxy, consulte Usar o Amazon RDS Proxy para o Aurora.

nota

Para receber mais informações sobre as conexões TLS com MySQL, consulte a documentação do MySQL.