Amazon RDS - Controle de acesso ao banco de dados

Para acessar a instância do banco de dados Amazon RDS, o usuário precisa de permissões específicas. Isso é configurado usando AWS IAM (gerenciamento de identidade e acesso). Neste tutorial veremos como esta configuração é feita.

A configuração envolve duas partes.

  • Authentication

  • Controle de acesso

Envolve a criação de nome de usuário, senha e geração de chaves de acesso para o usuário. Com a ajuda da chave de acesso, é possível fazer acesso programático ao serviço AWS RDS. As ferramentas SDK e CLI usam as chaves de acesso para fazer login criptograficamente com a solicitação.

Também podemos usar uma função IAM para autenticar um usuário. Mas a função não é atribuída a nenhum usuário específico; em vez disso, qualquer usuário pode assumir a função temporariamente e concluir a tarefa necessária. Depois que a tarefa termina, a função pode ser revogada e o usuário perde a capacidade de autenticação.

Depois que um usuário é autenticado, uma política anexada a esse usuário determina o tipo de tarefas que o usuário pode realizar. Abaixo está um exemplo de política que permite a criação de uma instância RDS DB, em uma instância t2.micro para o DB Engine MySQL.

{
    "Version": "2018-09-11",
    "Statement": [
        {
            "Sid": "AllowCreateDBInstanceOnly",
            "Effect": "Allow",
            "Action": [
                "rds:CreateDBInstance"
            ],
            "Resource": [
                "arn:aws:rds:*:123456789012:db:test*",
                "arn:aws:rds:*:123456789012:og:default*",
                "arn:aws:rds:*:123456789012:pg:default*",
                "arn:aws:rds:*:123456789012:subgrp:default"
            ],
            "Condition": {
                "StringEquals": {
                    "rds:DatabaseEngine": "mysql",
                    "rds:DatabaseClass": "db.t2.micro"
                }
            }
        }
    ]
}

Ação em qualquer recurso RDS

No exemplo a seguir, vemos uma política que permite qualquer ação de descrição em qualquer recurso RDS. O símbolo * é usado para representar qualquer recurso.

{
   "Version":"2012-10-17",
   "Statement":[
      {
         "Sid":"AllowRDSDescribe",
         "Effect":"Allow",
         "Action":"rds:Describe*",
         "Resource":"*"
      }
   ]
}

Não permitir a exclusão de uma instância de banco de dados

A política a seguir não permite que um usuário exclua uma instância de banco de dados específica.

{
   "Version":"2012-10-17",
   "Statement":[
      {
         "Sid":"DenyDelete1",
         "Effect":"Deny",
         "Action":"rds:DeleteDBInstance",
         "Resource":"arn:aws:rds:us-west-2:123456789012:db:my-mysql-instance"
      }
   ]
}