Neste guia passo a passo, aprenderemos como configurar a autenticação SSO com o Redshift e AWS IAM Identity Center para aumentar a segurança e facilitar o acesso dos usuários.

Fontes Utilizadas:

Dicionário de Termos:

TermoSignificado
Conta do Identity CenterA conta onde o IAM Identity Center está configurado.
Conta do RedshiftA conta filha da conta do Identity Center que contém o Cluster Redshift ao qual queremos nos conectar.
IDPProvedor de Identidade

O que é o Redshift?

AWS Redshift é um serviço de data warehousing totalmente gerenciado fornecido pela Amazon Web Services (AWS).
Ele é projetado para lidar com cargas de trabalho de análise de dados em grande escala e permite que as organizações analisem grandes quantidades de dados de forma rápida e econômica.

O que é o IAM Identity Center?

O IAM Identity Center fornece um local onde você pode criar ou conectar usuários da força de trabalho e gerenciar centralmente seu acesso a todas as suas contas e aplicativos da AWS.
Você pode usar permissões de várias contas para atribuir acesso dos usuários da força de trabalho às contas da AWS.

Por que SSO?

SSO reduz o número de superfícies de ataque porque os usuários fazem login apenas uma vez por dia e usam apenas um conjunto de credenciais.
Reduzir o login para um conjunto de credenciais melhora a segurança da empresa. Quando os funcionários precisam usar senhas separadas para cada aplicativo, geralmente não o fazem.

Pré-requisitos

  1. IAM Identity Center pré-configurado → Primeiros passos – AWS IAM Identity Center.
  2. Cluster Redshift pré-configurado com acesso administrativo.
  3. Usuário e senha da Fonte de Identidade (Okta, PingOne, etc.).
  4. JetBrains DataGrip instalado (pode ser a versão gratuita).

Passo a Passo:

Configurar aplicativo do Identity Center

Nosso primeiro passo será criar um novo aplicativo do AWS Identity Center na conta do Identity Center para ser usado como o principal canal entre os usuários e o cluster Redshift.

  1. No painel lateral do IAM Identity Center, clique em “Aplicativos”.

  2. No canto superior direito, clique em “Adicionar aplicativo”.
  3. Marque “adicionar aplicativo SAML 2.0 personalizado” e clique em “Próximo”.
  4. Defina um nome de exibição apropriado, chamaremos nosso aplicativo de “Redshift-ReadOnly”, pois este aplicativo será usado para obter acesso somente leitura aos dados do cluster.
  5. Baixe o arquivo de metadados SAML do Identity Center, usaremos ele mais tarde para configurar nosso aplicativo da conta Redshift.

  6. Copie a URL de login do aplicativo, pois precisaremos dela mais tarde.
  7. Em seguida, configuraremos o ACS do aplicativo SAML (também conhecido como Serviço de Consumidor de Asserção).
    Brevemente, ACS é o local onde a resposta do aplicativo SAML será enviada.

    Como usaremos o driver JDBC do AWS Redshift para conectar ao nosso cluster Redshift, precisaremos definir o ACS do aplicativo para http://localhost:7890/redshift/ – pois o driver JDBC inicia um servidor ouvindo na porta 7890 por padrão.
  8. Para restringir a asserção do aplicativo SAML apenas ao redshift, configuraremos o campo “Público do SAML do Aplicativo” para urn:amazon:webservices:redshift.

Criar Provedor de Identidade

Depois de criarmos nosso aplicativo Redshift-ReadOnly na conta do Identity Center, precisamos configurar um provedor de identidade para ser usado pelo aplicativo Redshift-ReadOnly para conectar ao cluster Redshift da conta Redshift.

  1. No painel lateral do IAM Dashboard da sua conta Redshift, clique em Provedores de Identidade.
  2. No canto superior direito, clique em “Adicionar provedor”.

  3. Preencha os detalhes do novo IDP:
    1. Defina o “Nome do provedor” como Redshift-ReadOnly (mesmo que nosso aplicativo configurado anteriormente).
    2. Envie o arquivo de metadados que baixamos durante o processo de configuração do nosso aplicativo IAM Identity Center. Clique em “Adicionar provedor” e finalize.
  4. Vá para a página de descrição do IDP e copie o ARN do IDP, usaremos ele mais tarde.

Criar Função e Política do IAM

Agora que criamos o Provedor de Identidade para ser usado pelo nosso aplicativo IAM Identity Center, podemos criar a função que será usada para conectar ao cluster Redshift em si.

  1. No painel lateral do IAM Dashboard da sua conta Redshift, clique em Funções.
  2. No canto superior direito, clique em “Criar Função”.

  3. Crie uma entidade confiável do tipo federação SAML 2.0 e defina o seguinte:
    1. Defina o IDP para o IDP “Redshift-ReadOnly” que criamos anteriormente.
    2. Marque o botão de rádio “Permitir acesso programático apenas” e defina:
      Atributo: “SAML:aud” → definindo qual público pode assumir esta função.
      Valor: “http://localhost:7890/redshift/ → Definindo o público para nosso servidor local do driver JDBC do Redshift (conforme explicado na primeira seção).

      Clique em “Próximo”.
  4. Clique em “Criar política” e uma nova aba será aberta.
  5. Selecione “JSON”.
  6. No painel do editor de Políticas, cole a seguinte declaração de política e edite os seguintes valores no escopo “Recurso” para corresponder aos seus próprios: <region>, <account>, <clusterName>.
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "redshift:CreateClusterUser",
                    "redshift:JoinGroup",
                    "redshift:GetClusterCredentials",
                    "redshift:ListSchemas",
                    "redshift:ListTables",
                    "redshift:ListDatabases",
                    "redshift:ExecuteQuery",
                    "redshift:FetchResults",
                    "redshift:CancelQuery",
                    "redshift:DescribeClusters",
                    "redshift:DescribeQuery",
                    "redshift:DescribeTable"
                ],
                "Resource": [
                    "arn:aws:redshift:<region>:<account>:cluster:<clusterName>",
                    "arn:aws:redshift:<region>:<account>:dbuser:<clusterName>/${redshift:DbUser}",
                    "arn:aws:redshift:<region>:<account>:dbname:<clusterName>/${redshift:DbName}",
                    "arn:aws:redshift:<region>:<account>:dbgroup:<clusterName>/bi_users_group",
                ]
            }
        ]
    }

  7. Nomeie a política como “Redshift-ReadOnly-policy” e clique em “Create policy”.
  8. Volte para a aba de origem onde começamos a criar nossa função IAM
    → clique em atualizar → digite “Redshift-ReadOnly-policy” na barra de pesquisa → marque a política “Redshift-ReadOnly-policy” → clique em “Next”.
  9. Nomeie a função como “Redshift-ReadOnly-role” e clique em “Create role” no canto inferior direito.
  10. Agora que criamos a função IAM, vá para a página de descrição dela e copie o ARN da função, usaremos isso mais tarde.

Configure os Atributos do Aplicativo do IAM Identity Center

Para configurar nosso aplicativo para funcionar com o Redshift, precisamos configurar alguns atributos do aplicativo que irão orientá-lo sobre “como se conectar” a ele.

  1. No IAM Identity Center, vá para o painel de Aplicativos e escolha o aplicativo que criamos anteriormente.

  2. Atribua usuários e grupos que você gostaria que tivessem permissões para este aplicativo → Atribuir acesso de usuário a aplicativos no console do IAM Identity Center – AWS IAM Identity Center (sucessor do AWS Single Sign-On).

  3. Clique em “attribute mappings”.
  4. Defina os atributos de acordo com a tabela a seguir e substitua o <role_arn> & <idp_arn> espaço reservado pelos ARNs que você copiou nas etapas anteriores:
AtributoValorExplicação
Assunto (atributo padrão)${user:email}O assunto utilizado.
https://aws.amazon.com/SAML/Attributes/RoleSessionName${user:email}O nome da sessão criada contra o cluster.
https://redshift.amazon.com/SAML/Attributes/AutoCreatetrueConfigure o aplicativo para criar o usuário do Redshift automaticamente na autenticação.
https://aws.amazon.com/SAML/Attributes/Role,A função IAM e o IDP a serem usados para conectar ao Redshift.
https://redshift.amazon.com/SAML/Attributes/DbUser${user:email}O nome do usuário do banco de dados a ser criado.
https://redshift.amazon.com/SAML/Attributes/DbGroupsreadonlyO grupo do banco de dados ao qual o novo usuário será atribuído.

Clique em “Save changes”.

Criar grupo Redshift & Conceder permissões

Nesta etapa, configuraremos o readonly grupo Redshift (conforme definido nos atributos do Aplicativo na etapa anterior) ao qual cada usuário será atribuído ao se conectar via o aplicativo.

  1. Conecte-se ao seu cluster Redshift com um usuário privilegiado (superusuário).
  2. Execute o seguinte script SQL para criar o grupo readonly e atribuir a ele read permissões para o esquema público (o esquema padrão).
    create group readonly;
    grant usage on schema public to group readonly;
    grant select on all tables in schema public to group readonly;

Configure a Fonte de Dados do cliente DataGrip

:tada: Estamos todos configurados e finalmente prestes a colher nossos frutos! :tada:
Nesta etapa, configuraremos uma fonte de dados DataGrip que será usada como a conexão entre nós e o cluster Redshift.

  1. Abra o DataGrip e crie uma nova fonte de dados Redshift.
  2. Um assistente de fonte de dados será aberto para você configurar a conexão, defina os seguintes atributos:
    1. Nome: Redshift ReadOnly SSO.
    2. Host: endpoint do seu servidor Redshift.
    3. Usuário: seu email identificador (será usado como o Usuário do DB Redshift).
    4. Senha: a senha que você configurou na sua Fonte de Identidade (Okta, PingOne, etc.)
    5. Banco de Dados: o banco de dados ao qual você deseja se conectar.
    6. URL: a URL estará principalmente configurada neste ponto (devido ao preenchimento automático do DataGrip), tudo o que resta para você fazer é mudar o prefixo da URL JDBC de jdbc:redshift:// para jdbc:redshift:iam://.
  3. Vá para a aba Advanced e configure estes 3 atributos:
    1. plugin_name: com.amazon.redshift.plugin.BrowserSamlCredentialsProvider – já definido, então edite-o.
    2. idp_reponse_timeout: 60 – crie um novo valor.
    3. login_url: <a URL de login do aplicativo SAML que você copiou anteriormente> – crie um novo valor.
  4. Na parte inferior do assistente de configuração da fonte de dados, clique em “test connection”.

    Uma vez clicado, seu navegador abrirá e exibirá a seguinte tela:

    Se tudo estiver configurado corretamente, você deverá ver o seguinte pop-up no DataGrip:

    Clique em OK.

    É isso! Obrigado por ler 🙂