Limitando o acesso a segredos - AWS Recomendações

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

Limitando o acesso a segredos

A segurança é a principal prioridade em AWS. No AWS Well-Architected Framework, a melhor prática de armazenar e usar segredos com segurança recomenda que você limite o acesso aos segredos, registre e audite o acesso aos segredos e que obtenha acesso por meio de uma API em vez de conceder acesso a uma pessoa. Isso está relacionado à geração de senhas aleatórias usando AWS Secrets Manager, discutido anteriormente neste guia.

No passado, as credenciais usadas para autenticação em bancos de dados, APIs de terceiros, tokens e outros segredos podiam ter sido incorporadas ao código-fonte ou aos arquivos do ambiente. Em muitas organizações, os administradores de banco de dados ainda podem acessar todas as credenciais de usuário do banco de dados. No entanto, é mais seguro se não o fizerem. Recomendamos que você:

  • Limite o acesso ao Secrets Manager por meio de uma política AWS Identity and Access Management (IAM) anexada a uma função de AWS serviço ou a uma função do IAM para usuários.

  • Estenda o acesso programático aos segredos no Secrets Manager somente por meio de chamadas de API para o Secrets Manager.

  • Evite usar segredos codificados.

  • Não transmita valores de credenciais em variáveis.

  • Certifique-se de que os segredos sejam usados diretamente pelo aplicativo ou pela infraestrutura, e não por um usuário humano.

O exemplo de código a seguir mostra uma abordagem que você pode usar para proteger dados confidenciais ao criar um banco de dados. Ao criar o banco de dados, você pode exigir a entrada do usuário como senha e, em seguida, girar a senha, ou pode usar uma senha aleatória desde o início. Gerar uma senha aleatória desde o início pode ajudar você a lidar e gerenciar credenciais com mais segurança.

O trecho de código a seguir cria um recurso de banco de dados e password = local.passwddata busca a senha de uma variável local.

resource "aws_db_instance" "default" { count = var.createdb == true ? 1 : 0 allocated_storage = 20 identifier = var.identifier db_name = var.databasename engine = "mysql" engine_version = "8.0.32" instance_class = "db.t3.micro" username = "admin" password = local.passwddata skip_final_snapshot = true publicly_accessible = false vpc_security_group_ids = [aws_security_group.db.id] db_subnet_group_name = aws_db_subnet_group.db.0.name }

O trecho de código a seguir cria uma senha aleatória ou aceita a senha fornecida pelo usuário. Terraformarmazena essa senha como uma variável local para que você possa usá-la posteriormente no código.

locals { passwddata = var.passwddata != null ? var.passwddata : data.aws_secretsmanager_random_password.test.random_secrets }