Usar uma identidade federada para gerenciar o acesso do Amazon Redshift aos recursos locais e às tabelas externas do Amazon Redshift Spectrum
Usar a federação de identidades na AWS com as credenciais fornecidas pelo GetDatabaseCredentials
pode simplificar a autorização e o acesso a dados locais e externos. Neste tutorial, mostramos como fornecer acesso a recursos com a federação de identidades da AWS, em vez de usar um perfil específico do IAM.
Atualmente, para dar aos usuários acesso aos dados externos que residem no Amazon S3, você cria um perfil do IAM com permissões definidas em uma política de permissões. Depois, os usuários com o perfil anexado podem acessar os dados externos. Isso funciona, mas se você quiser fornecer regras detalhadas, como tornar colunas específicas indisponíveis para determinado usuário, talvez seja necessário definir configurações adicionais no esquema externo.
A federação de identidades, com credenciais fornecidas pelo GetDatabaseCredentials
, pode fornecer acesso a recursos do AWS Glue e do Redshift Spectrum por meio de regras detalhadas do IAM que são mais fáceis de especificar e alterar. Isso facilita a aplicação do acesso que está em conformidade com suas regras empresariais.
Os benefícios de usar credenciais federadas são os seguintes:
-
Não é necessário gerenciar perfis do IAM anexados ao cluster para o Redshift Spectrum.
-
Os administradores do cluster podem criar um esquema externo acessível por consumidores com diferentes contextos do IAM. Isso é útil, por exemplo, para realizar a filtragem de colunas em uma tabela, na qual consumidores diferentes consultam o mesmo esquema externo e obtêm campos variados nos registros retornados.
-
É possível consultar o Amazon Redshift usando um usuário com permissões do IAM, em vez de apenas com um perfil.
Preparar uma identidade para fazer login com a identidade federada
Antes de fazer login com identidade federada, você deve realizar várias etapas preliminares. Essas instruções pressupõem que você tenha um esquema externo existente do Redshift Spectrum que faz referência a um arquivo de dados armazenado em um bucket do Amazon S3 e que o bucket esteja na mesma conta do cluster Amazon Redshift ou do data warehouse do Amazon Redshift Serverless.
-
Crie uma identidade do IAM. Isso pode ser um usuário ou um perfil do IAM. Use qualquer nome permitido pelo IAM.
-
Anexe políticas de permissões à identidade. Especifique um destes fatores:
-
redshift:GetClusterCredentialsWithIAM
(para um cluster provisionado do Amazon Redshift) -
redshift-serverless:GetCredentials
(para o Amazon Redshift Serverless)
É possível adicionar permissões com o editor de políticas por meio do console do IAM.
A identidade do IAM também precisa de permissões para acessar dados externos. Conceda acesso ao Amazon S3 adicionando diretamente as seguintes políticas gerenciadas da AWS:
-
AmazonS3ReadOnlyAccess
-
AWSGlueConsoleFullAccess
A última política gerenciada será necessária se você estiver usando o AWS Glue para preparar os dados externos. Para obter mais informações sobre as etapas para conceder acesso ao Amazon Redshift Spectrum, consulte “Criar uma função do IAM para o Amazon Redshift”, que faz parte do guia de introdução do Amazon Redshift e do Redshift Spectrum. Ele mostra as etapas de adição de políticas do IAM para acessar o Redshift Spectrum.
-
-
Configure o cliente SQL para se conectar ao Amazon Redshift. Use o driver JDBC do Amazon Redshift e adicione as credenciais do usuário às propriedades de credencial da ferramenta. Um cliente como o SQL Workbench/J funciona bem para isso. Defina as seguintes propriedades estendidas de conexão do cliente:
-
AccessKeyID: o identificador da chave de acesso.
-
SecretAccessKey: a chave de acesso secreta. (Preste atenção ao risco de segurança de transmitir a chave secreta caso você não use criptografia.)
-
SessionToken: um conjunto de credenciais temporárias para um perfil do IAM.
-
groupFederation: defina como
true
se você estiver configurando a identidade federada para um cluster provisionado. Não defina esse parâmetro se você estiver usando o Amazon Redshift Serverless. -
LogLevel: valor inteiro no nível de log. Isso é opcional.
-
-
Defina o URL como o endpoint JDBC encontrado no console do Amazon Redshift ou do Amazon Redshift Serverless. Substitua seu esquema de URL por jdbc:redshift:iam: e use esta formatação:
-
Formato para um cluster provisionado do Amazon Redshift:
jdbc:redshift:iam://<cluster_id>.<unique_suffix>.<region>.redshift.amazonaws.com:<port>/<database_name>
Exemplo:
jdbc:redshift:iam://test1.12345abcdefg.us-east-1.redshift.amazonaws.com:5439/dev
-
Formato para o Amazon Redshift Serverless:
jdbc:redshift:iam://<workgroup-name>.<account-number>.<aws-region>.redshift-serverless.amazonaws.com:5439:<port>/<database_name>
Exemplo:
jdbc:redshift:iam://default.123456789012.us-east-1.redshift-serverless.amazonaws.com:5439/dev
Depois de se conectar ao banco de dados pela primeira vez usando uma identidade do IAM, o Amazon Redshift cria automaticamente uma identidade do Amazon Redshift com o mesmo nome, com o prefixo
IAM:
para um usuário ouIAMR:
para um perfil do IAM. As etapas restantes deste tópico mostram exemplos para um usuário.Se um usuário do Redshift não for criado automaticamente, você poderá criar um executando uma instrução
CREATE USER
, usando uma conta de administrador e especificando o nome do usuário no formatoIAM:<user name>
. -
-
Como administrador do cluster do Amazon Redshift, conceda ao usuário do Redshift as permissões necessárias para acessar o esquema externo.
GRANT ALL ON SCHEMA my_schema to "IAM:my_user";
Para permitir que o usuário do Redshift crie tabelas no esquema externo, ele deve ser proprietário do esquema. Por exemplo:
ALTER SCHEMA my_schema owner to "IAM:my_user";
-
Para verificar a configuração, execute uma consulta como usuário, usando o cliente SQL, depois que as permissões forem concedidas. Esse exemplo de consulta recupera dados de uma tabela externa.
SELECT * FROM my_schema.my_table;
Conceitos básicos da propagação de identidade e autorização para o Redshift Spectrum
A fim de transmitir uma identidade federada para consultar tabelas externas, defina SESSION
como o valor para o parâmetro de consulta IAM_ROLE
de CREATE EXTERNAL SCHEMA
. As etapas a seguir mostram como configurar e utilizar SESSION
para autorizar consultas no esquema externo.
-
Crie tabelas locais e externas. Tabelas externas catalogadas com o AWS Glue funcionam para isso.
-
Conecte-se ao Amazon Redshift com sua identidade do IAM. Conforme mencionado na seção anterior, quando a identidade se conecta ao Amazon Redshift, é criado um usuário de banco de dados do Redshift. O usuário é criado caso ainda não exista. Se o usuário for novo, o administrador deverá conceder a ele permissões para realizar tarefas no Amazon Redshift, como consultar e criar tabelas.
-
Conecte-se ao Redshift com sua conta de administrador. Execute o comando para criar um esquema externo usando o valor
SESSION
.create external schema spectrum_schema from data catalog database '<my_external_database>' region '<my_region>' iam_role 'SESSION' catalog_id '<my_catalog_id>';
Observe que
catalog_id
está definido nesse caso. Essa é uma nova configuração adicionada com o recurso, poisSESSION
substitui uma função específica.Nesse exemplo, os valores na consulta imitam como os valores reais aparecem.
create external schema spectrum_schema from data catalog database 'spectrum_db' region 'us-east-1' iam_role 'SESSION' catalog_id '123456789012'
O valor
catalog_id
nesse caso é o ID da sua conta da AWS. -
Execute consultas para acessar seus dados externos usando a identidade do IAM com a qual você se conectou na etapa 2. Por exemplo:
select * from spectrum_schema.table1;
Nesse caso,
table1
pode ser, por exemplo, dados formatados em JSON em um arquivo, em um bucket do Amazon S3. -
Se você já tem um esquema externo que usa um perfil do IAM anexado ao cluster, apontando para seu banco de dados ou esquema externo, é possível substituir o esquema existente e usar uma identidade federada, conforme detalhado nestas etapas, ou criar uma.
SESSION
indica que as credenciais da identidade federada são usadas para consultar o esquema externo. Ao usar o parâmetro de consulta SESSION
, defina o catalog_id
. Isso é necessário porque aponta para o catálogo de dados usado para o esquema. Anteriormente, o catalog_id
era recuperado do valor atribuído a iam_role
. Quando você configura a propagação de identidade e autorização dessa forma (por exemplo, para o Redshift Spectrum), usando credenciais federadas para consultar um esquema externo, a autorização por meio de um perfil do IAM não é necessária.
Observações de uso
Um erro de conexão comum é o seguinte: Erro do IAM ao recuperar credenciais temporárias: não é possível realizar unmarshaling da resposta de exceção com os operadores de unmarshaling fornecidos. Esse erro ocorre quando se tem um driver JDBC herdado. A versão mínima do driver necessária para identidade federada é 2.1.0.9. Você pode obter o driver JDBC em Baixe o driver JDBC do Amazon Redshift, versão 2.1.
Recursos adicionais
Esses links fornecem informações adicionais para gerenciar o acesso a dados externos.
-
Você ainda pode acessar os dados do Redshift Spectrum usando um perfil do IAM. Para ter mais informações, consulte Autorizar o Amazon Redshift a acessar serviços da AWS em seu nome.
-
Ao gerenciar o acesso a tabelas externas com o AWS Lake Formation, você pode consultá-las usando o Redshift Spectrum com identidades federadas do IAM. Não é mais necessário gerenciar perfis do IAM anexados a clusters para que o Redshift Spectrum consulte dados registrados com o AWS Lake Formation. Para obter mais informações, consulte Usar o Amazon Redshift Spectrum com o AWS Lake Formation.