Bloqueie o acesso público ao Amazon RDS usando o Cloud Custodian - Recomendações da AWS

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á.

Bloqueie o acesso público ao Amazon RDS usando o Cloud Custodian

Criado por Abhay Kumar (AWS) e Dwarika Patra (AWS)

Ambiente: produção

Tecnologias: bancos de dados; segurança, identidade, conformidade

Workload: todos os outros workloads; código aberto

Serviços da AWS: Amazon RDS

Resumo

Muitas organizações executam suas cargas de trabalho e serviços em vários fornecedores de nuvem. Nesses ambientes de nuvem híbrida, a infraestrutura de nuvem precisa de uma governança rígida da nuvem, além da segurança fornecida pelos provedores de nuvem individuais. Um banco de dados na nuvem, por exemplo, Amazon Relational Database Service (Amazon RDS) é um serviço importante que deve ser monitorado para detectar quaisquer vulnerabilidades de acesso e permissão. Embora você possa restringir o acesso ao banco de dados do Amazon RDS configurando um grupo de segurança, você pode adicionar uma segunda camada de proteção para proibir ações como acesso público. Garantir que o acesso público seja bloqueado ajudará você a cumprir o Regulamento Geral de Proteção de Dados (GDPR), a Lei de Portabilidade e Responsabilidade de Seguros de Saúde (HIPAA), o Instituto Nacional de Padrões e Tecnologia (NIST) e o Padrão de Segurança de Dados do Setor de Cartões de Pagamento (PCI DSS).

O Cloud Custodian é um mecanismo de regras de código aberto que você pode usar para impor restrições de acesso aos recursos da Amazon Web Services (AWS), como o Amazon RDS. Com o Cloud Custodian, você pode definir regras que validam o ambiente em relação aos padrões definidos de segurança e conformidade. Você pode usar o Cloud Custodian para gerenciar seus ambientes de nuvem ajudando a garantir a conformidade com políticas de segurança, políticas de tags e coleta de resíduos de recursos não utilizados e gerenciamento de custos. Com o Cloud Custodian, você pode usar uma única interface para implementar a governança em um ambiente de nuvem híbrida. Por exemplo, você pode usar a interface do Cloud Custodian para interagir com a AWS e o Microsoft Azure, reduzindo o esforço de trabalhar com mecanismos como o AWS Config, grupos de segurança da AWS e políticas do Azure.

Esse padrão fornece instruções para usar o Cloud Custodian na AWS para impor restrições de acessibilidade pública em instâncias do Amazon RDS.

Pré-requisitos e limitações

Pré-requisitos

Arquitetura

Pilha de tecnologias de destino

  • Amazon RDS

  • AWS CloudTrail

  • AWS Lambda

  • Cloud Custodian

Arquitetura de destino

O diagrama a seguir mostra o Cloud Custodian implantando a política no Lambda, a AWS CloudTrail iniciando o evento CreateDBInstance e a configuração da função Lambda como falsa no Amazon RDS. PubliclyAccessible

Usando o Cloud Custodian na AWS para restringir o acesso público às instâncias do Amazon RDS.

Ferramentas

Serviços da AWS

  • CloudTrailA AWS ajuda você a auditar a governança, a conformidade e o risco operacional da sua conta da AWS.

  • O ‭AWS Command Line Interface (AWS CLI)‭ é uma ferramenta de código aberto que permite que você interaja com serviços da AWS usando comandos no shell da linha de comando.

  • O AWS Identity and Access Management (IAM) ajuda você a gerenciar com segurança o acesso aos seus recursos da AWS, controlando quem está autenticado e autorizado a usá-los.

  • O AWS Lambda é um serviço de computação que ajuda você a executar código sem exigir provisionamento ou gerenciamento de servidores. Ele executa o código somente quando necessário e dimensiona automaticamente, assim, você paga apenas pelo tempo de computação usado.

  • O Amazon Relational Database Service (Amazon RDS) ajuda você a configurar, operar e escalar um banco de dados relacional na Nuvem AWS.

Outras ferramentas

  • O Cloud Custodian unifica as ferramentas e os scripts que muitas organizações usam para gerenciar suas contas de nuvem pública em uma ferramenta de código aberto. Ele usa um mecanismo de regras sem estado para definição e aplicação de políticas, com métricas, resultados estruturados e relatórios detalhados para a infraestrutura de nuvem. Ele se integra perfeitamente a um runtime de tecnologia sem servidor para fornecer remediação e resposta em tempo real com baixa sobrecarga operacional.

Épicos

TarefaDescriçãoHabilidades necessárias

Instale a AWS CLI.

Para instalar a AWS CLI, siga as instruções na documentação da AWS CLI.

Administrador da AWS

Configurar credenciais da AWS.

Defina as configurações que a AWS CLI usa para interagir com a AWS, incluindo a região da AWS e o formato de saída que você deseja usar.

$>aws configure AWS Access Key ID [None]: <your_access_key_id> AWS Secret Access Key [None]: <your_secret_access_key> Default region name [None]: Default output format [None]:

Para obter mais informações, consulte a documentação da AWS.

Administrador da AWS

Criar um perfil do IAM.

Para criar um perfil do IAM com a função de execução do Lambda, execute o comando a seguir.

aws iam create-role --role-name lambda-ex --assume-role-policy-document '{"Version": "2012-10-17","Statement": [{ "Effect": "Allow", "Principal": {"Service": "lambda.amazonaws.com"}, "Action": "sts:AssumeRole"}]}
AWS DevOps
TarefaDescriçãoHabilidades necessárias

Instale o Cloud Custodian.

Para instalar o Cloud Custodian em seu sistema operacional e ambiente, siga as instruções na documentação do Cloud Custodian.

DevOps engenheiro

Verifique o esquema do Cloud Custodian.

Para ver a lista completa dos recursos do Amazon RDS com os quais você pode executar políticas, use o comando a seguir.

custodian schema aws.rds
DevOps engenheiro

Crie a política do Cloud Custodian.

Salve o código que está no arquivo de política do Cloud Custodian na seção Informações adicionais usando uma extensão YAML.

DevOps engenheiro

Defina as ações do Cloud Custodian para alterar a bandeira de acesso público.

  1. Localize o código do custodiante (por exemplo, /Users/abcd/custodian/lib/python3.9/site-packages/c7n/resources/rds.py).

  2. Localize a classe RDSSetPublicAvailability em rds.py e modifique essa classe usando o código que está no arquivo rds.py de atributos c7n na seção Informações adicionais.

DevOps engenheiro

Execute uma simulação.

(Opcional) Para verificar quais recursos são identificados pela política sem executar nenhuma ação nos recursos, use o comando a seguir.

custodian run -dryrun <policy_name>.yaml -s <output_directory>
DevOps engenheiro
TarefaDescriçãoHabilidades necessárias

Implante a política usando o Lambda.

Para criar a função do Lambda que executará a política, use o comando a seguir.

custodian run -s policy.yaml

Essa política será então iniciada pelo CloudTrail CreateDBInstance evento da AWS.

Como resultado, o AWS Lambda definirá a bandeira de acesso público como falsa para instâncias que correspondam aos critérios.

DevOps engenheiro

Recursos relacionados

Mais informações

Arquivo YAML da política do Cloud Custodian

policies: - name: "block-public-access" resource: rds description: | This Enforcement blocks public access for RDS instances. mode: type: cloudtrail events: - event: CreateDBInstance # Create RDS instance cloudtrail event source: rds.amazonaws.com ids: requestParameters.dBInstanceIdentifier role: arn:aws:iam::1234567890:role/Custodian-compliance-role filters: - type: event key: 'detail.requestParameters.publiclyAccessible' value: true actions: - type: set-public-access state: false

arquivo rds.py de atributos c7n

@actions.register('set-public-access') class RDSSetPublicAvailability(BaseAction): schema = type_schema( "set-public-access", state={'type': 'boolean'}) permissions = ('rds:ModifyDBInstance',) def set_accessibility(self, r): client = local_session(self.manager.session_factory).client('rds') waiter = client.get_waiter('db_instance_available') waiter.wait(DBInstanceIdentifier=r['DBInstanceIdentifier']) client.modify_db_instance( DBInstanceIdentifier=r['DBInstanceIdentifier'], PubliclyAccessible=self.data.get('state', False)) def process(self, rds): with self.executor_factory(max_workers=2) as w: futures = {w.submit(self.set_accessibility, r): r for r in rds} for f in as_completed(futures): if f.exception(): self.log.error( "Exception setting public access on %s \n %s", futures[f]['DBInstanceIdentifier'], f.exception()) return rds

Integração com o Security Hub

O Cloud Custodian pode ser integrado ao AWS Security Hub para enviar descobertas de segurança e tentar ações de remediação. Para obter mais informações, consulte Anunciando a integração do Cloud Custodian com o AWS Security Hub.