Autorizar o Amazon Redshift a acessar outros serviços da AWS em seu nome - Amazon Redshift

Autorizar o Amazon Redshift a acessar outros serviços da AWS em seu nome

Alguns recursos do Amazon Redshift exigem que o Amazon Redshift acesse outros serviços da AWS em seu nome. Por exemplo, os comandos COPY e UNLOAD podem carregar ou descarregar dados em seu cluster Amazon Redshift usando um bucket do Amazon S3. O comando CREATE EXTERNAL FUNCTION pode invocar uma função do AWS Lambda usando uma função Lambda definida pelo usuário (UDF) escalar. O Amazon Redshift Spectrum pode usar um catálogo de dados no Amazon Athena ou no AWS Glue. Para que seus clusters Amazon Redshift atuem em seu nome, você fornece credenciais de segurança para seus clusters. O método preferido para fornecer credenciais de segurança é especificar uma função do AWS Identity and Access Management (IAM). Para COPY e UNLOAD, é possível fornecer as credenciais temporárias.

Os usuários precisam de acesso programático se quiserem interagir com a AWS de fora do AWS Management Console. A forma de conceder acesso programático depende do tipo de usuário que está acessando a AWS.

Para conceder acesso programático aos usuários, selecione uma das seguintes opções:

Qual usuário precisa de acesso programático? Para Por

Identificação da força de trabalho

(Usuários gerenciados no Centro de Identidade do IAM)

Use credenciais temporárias para assinar solicitações programáticas para a AWS CLI, os SDKs da AWS ou as APIs da AWS.

Siga as instruções da interface que deseja utilizar.

IAM Use credenciais temporárias para assinar solicitações programáticas para a AWS CLI, os SDKs da AWS ou as APIs da AWS. Siga as instruções em Como usar credenciais temporárias com recursos da AWS no Guia do usuário do IAM.
IAM

(Não recomendado)

Use credenciais de longo prazo para assinar solicitações programáticas para a AWS CLI, os SDKs da AWS ou as APIs da AWS.

Siga as instruções da interface que deseja utilizar.

Em seguida, descubra como criar uma função do IAM com as permissões apropriadas para acessar outros serviços da AWS. Você também precisa associar a função ao seu cluster e especificar o nome do recurso da Amazon (ARN) da função ao executar o comando Amazon Redshift. Para ter mais informações, consulte Autorizar operações COPY, UNLOAD, CREATE EXTERNAL FUNCTION e CREATE EXTERNAL SCHEMA usando funções do IAM.

Além disso, um superusuário pode conceder o privilégio ASSUMEROLE a usuários e grupos específicos para fornecer acesso a uma função para operações COPY e UNLOAD. Para obter informações, consulte GRANT no Guia do desenvolvedor de banco de dados do Amazon Redshift.

Criar uma função do IAM para permitir que o cluster do Amazon Redshift acesse serviços da AWS

Para criar uma função IAM para permitir que seu cluster do Amazon Redshift se comunique com outros serviços da AWS em seu nome, execute as seguintes etapas. Os valores usados nesta seção são exemplos, você pode escolher valores com base em suas necessidades.

Para criar uma função do IAM para permitir que o Amazon Redshift acesse os serviços da AWS
  1. Abra o console do IAM.

  2. No painel de navegação, escolha Roles.

  3. Escolha Criar Perfil.

  4. Escolha serviço da AWS e clique em Redshift.

  5. Em Select your use case, escolha Redshift - Customizable e clique em Next: Permissions. A página Attach permissions policy é exibida.

  6. Para acesso ao Amazon S3 usando COPY, como exemplo, use AmazonS3ReadOnlyAccess anexe. Para acesso ao Amazon S3 usando COPY ou UNLOAD, sugerimos que você crie políticas gerenciadas que restrinjam o acesso ao bucket desejado e ao prefixo adequadamente. Para operações de leitura e gravação, recomendamos aplicar os privilégios mínimos e restringir apenas os buckets do Amazon S3 e prefixos chave necessários para o Amazon Redshift.

    Para acessar as funções do Lambda para o comando CREATE EXTERNAL FUNCTION, adicione AWSLambdaRole.

    Para o Redshift Spectrum, além do acesso ao Amazon S3, adicione AWSGlueConsoleFullAccess ou AmazonAthenaFullAccess.

    Escolha Próximo: etiquetas.

  7. A página Adicionar tags é exibida. Opcionalmente, é possível adicionar tags. Selecione Next: Review (Próximo: revisar).

  8. Para Role Name, digite um nome para sua função, por exemplo, RedshiftCopyUnload. Selecione Criar função.

  9. A nova função está disponível para todos os usuários em clusters que usam a função. Para restringir acesso somente a usuários específicos em clusters específicos ou, a clusters em regiões específicas, edite a relação de confiança da função. Para ter mais informações, consulte Restringir acesso a funções do IAM.

  10. Associe a função ao cluster. Você pode associar uma função do IAM a um cluster ao criar o cluster, ou adicionar a função a um cluster existente. Para ter mais informações, consulte Associar funções do IAM a clusters.

    nota

    Para restringir o acesso a dados específicos, use uma função do IAM que conceda o mínimo de privilégios necessários.

Restringir acesso a funções do IAM

Por padrão, as funções de IAM que estão disponíveis para um cluster do Amazon Redshift estão disponíveis para todos os usuários desse cluster. Você pode optar por restringir as funções do IAM a usuários específicos do banco de dados do Amazon Redshift em clusters específicos ou a regiões específicas.

Para permitir que somente usuários de banco de dados específicos usem uma função do IAM, siga as etapas a seguir.

Para identificar usuários de banco de dados específicos com acesso a uma função do IAM
  1. Identifique o nome do recurso da Amazon (ARN) para os usuários do banco de dados em seu cluster do Amazon Redshift. O ARN de um usuário de banco de dados está no formato: arn:aws:redshift:region:account-id:dbuser:cluster-name/user-name.

    Para o Amazon Redshift sem servidor, use o formato ARN a seguir. arn:aws:redshift:region:account-id:dbuser:workgroup-name/user-name

  2. Abra o console do IAM.

  3. No painel de navegação, escolha Perfis.

  4. Escolha a função do IAM que você deseja restringir a usuários específicos do banco de dados do Amazon Redshift.

  5. Escolha a guia Trust Relationships e Edit Trust Relationship. Uma nova função do IAM que permite ao Amazon Redshift acessar outros serviços da AWS em seu nome tem uma relação de confiança da seguinte maneira:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "redshift.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
  6. Adicione uma condição à seção da ação sts:AssumeRole da relação de confiança que limite o campo sts:ExternalId a valores especificados por você. Inclua um ARN para cada usuário do banco de dados para quem você deseja dar acesso à função. O ID externo pode ser qualquer string exclusiva.

    Por exemplo, a relação de confiança a seguir especifica que somente os usuários do banco de dados user1 e user2 no cluster my-cluster na região us-west-2 têm permissão para usar essa função do IAM.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "redshift.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "sts:ExternalId": [ "arn:aws:redshift:us-west-2:123456789012:dbuser:my-cluster/user1", "arn:aws:redshift:us-west-2:123456789012:dbuser:my-cluster/user2" ] } } }] }
  7. Escolha Update Trust Policy.

Restringir uma função do IAM a uma região da AWS

Você pode restringir uma função do IAM para ser acessível somente em uma determinada região da AWS. Por padrão, as funções do IAM do Amazon Redshift não estão restritas a uma única região.

Para restringir o uso de uma função do IAM por região, siga estas etapas.

Para identificar regiões permitidas para uma função do IAM
  1. Abra o Console do IAM em https://console.aws.amazon.com/.

  2. No painel de navegação, escolha Perfis.

  3. Escolha a função que você deseja modificar com regiões específicas.

  4. Escolha a guia Trust Relationships e Edit Trust Relationship. Uma nova função do IAM que permite ao Amazon Redshift acessar outros serviços da AWS em seu nome tem uma relação de confiança da seguinte maneira:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "redshift.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
  5. Modifique a lista Service do Principal com a lista das regiões específicas para as quais você deseja permitir o uso da função. Cada região na lista Service deve estar no seguinte formato: redshift.region.amazonaws.com.

    Por exemplo, a relação de confiança editada permite o uso da função do IAM somente nas regiões us-east-1 e us-west-2.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "redshift.us-east-1.amazonaws.com", "redshift.us-west-2.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
  6. Escolher Update Trust Policy

Encadeando funções do IAM no Amazon Redshift

Ao anexar uma função ao cluster, o cluster pode assumir essa função para acessar o Amazon S3, o Amazon Athena, o AWS Glue, e o AWS Lambda em seu nome. Se uma função anexada ao cluster não tiver acesso aos recursos necessários, você poderá encadear outra função, possivelmente pertencente a outra conta. O cluster assumirá a função encadeada temporariamente para acessar os dados. Você também pode conceder acesso entre contas com o encadeamento de funções. Cada função em cadeia assume a próxima função na cadeia, até que o cluster assuma a função no final da cadeia. O número máximo de funções do IAM que você pode associar está sujeito a uma cota. Para obter mais informações, consulte a cota "Funções do IAM de cluster para o Amazon Redshift acessar outros serviços da AWS" no Cotas para objetos do Amazon Redshift.

Por exemplo, suponha que a Empresa A deseja acessar dados em um bucket do Amazon S3 que pertence à Empresa B. A Empresa A cria uma função de serviço da AWS para o Amazon Redshift nomeada RoleA e o anexa ao seu cluster. A empresa B cria uma função chamada RoleB que é autorizada a acessar os dados no bucket da empresa B. Para acessar os dados no bucket da empresa B, a empresa A executa um comando COPY usando um parâmetro iam_role que encadeia RoleA e RoleB. Durante a operação COPY, RoleA assume temporariamente RoleB para acessar o bucket do Amazon S3.

Para encadear funções, você estabelece uma relação de confiança entre as funções. Uma função que assume uma outra função (por exemplo, RoleA) precisa ter uma política de permissões que conceda a ela a permissão para assumir a função da próxima função encadeada (por exemplo, RoleB). Por sua vez, a função que passa a permissão (RoleB) precisa ter uma política de confiança que permita que ela passe suas permissões para a função encadeada anterior (RoleA). Para obter mais informações, consulte Usar funções de IAM no Manual do usuário do IAM.

A primeira função na cadeia deve ser uma função anexada ao cluster. A primeira função, e cada função subsequente que assume a próxima função na cadeia, deve ter uma política que inclua uma declaração específica. Essa declaração tem o efeito de Allow na ação sts:AssumeRole e no nome de recurso da Amazon (ARN) da próxima função em um elemento Resource. Em nosso exemplo, RoleA tem a seguinte política de permissão que permite assumir RoleB, propriedade da conta da AWS 210987654321.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1487639602000", "Effect": "Allow", "Action": [ "sts:AssumeRole" ], "Resource": "arn:aws:iam::210987654321:role/RoleB" } ] }

Uma função que passa para outra função deve estabelecer uma relação de confiança com a função que assume a função ou com a conta da AWS que possui a função. No exemplo, RoleB tem a seguinte política de confiança para estabelecer uma relação de confiança com a função RoleA.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Principal": { "AWS": "arn:aws:iam::role/RoleA" } } ] }

A seguinte política de confiança estabelece uma relação de confiança com o proprietário da RoleA, conta da AWS 123456789012.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Principal": { "AWS": "arn:aws:iam::123456789012:root" } } ] }
nota

Para restringir a autorização de encadeamento de funções a usuários específicos, defina uma condição. Para ter mais informações, consulte Restringir acesso a funções do IAM.

Ao executar um comando UNLOAD, COPY, CREATE EXTERNAL FUNCTION ou CREATE EXTERNAL SCHEMA, você encadeia funções incluindo uma lista separada por vírgulas de ARNs de função no parâmetroiam_role. O exemplo a seguir mostra a sintaxe do encadeamento de funções no parâmetro iam_role.

unload ('select * from venue limit 10') to 's3://acmedata/redshift/venue_pipe_' IAM_ROLE 'arn:aws:iam::<aws-account-id-1>:role/<role-name-1>[,arn:aws:iam::<aws-account-id-2>:role/<role-name-2>][,...]';
nota

A cadeia de funções inteira é colocada entre aspas simples e não deve conter espaços.

Nos exemplos a seguir, RoleA é anexada ao cluster que pertence à conta da AWS 123456789012. RoleB, que pertence à conta 210987654321, tem permissão para acessar o bucket denominado s3://companyb/redshift/. O exemplo a seguir encadeia RoleA e RoleB para descarregar dados (comando UNLOAD) no bucket s3://companyb/redshift/.

unload ('select * from venue limit 10') to 's3://companyb/redshift/venue_pipe_' iam_role 'arn:aws:iam::123456789012:role/RoleA,arn:aws:iam::210987654321:role/RoleB';

O exemplo a seguir usa um comando COPY para carregar os dados que foram descarregados no exemplo anterior.

copy venue from 's3://companyb/redshift/venue_pipe_' iam_role 'arn:aws:iam::123456789012:role/RoleA,arn:aws:iam::210987654321:role/RoleB';

No exemplo a seguir, o comando CREATE EXTERNAL SCHEMA usa funções encadeadas para assumir a função RoleB.

create external schema spectrumexample from data catalog database 'exampledb' region 'us-west-2' iam_role 'arn:aws:iam::123456789012:role/RoleA,arn:aws:iam::210987654321:role/RoleB';

No exemplo a seguir, CREATE EXTERNAL FUNCTION usa funções encadeadas para assumir a função RoleB.

create external function lambda_example(varchar) returns varchar volatile lambda 'exampleLambdaFunction' iam_role 'arn:aws:iam::123456789012:role/RoleA,arn:aws:iam::210987654321:role/RoleB';

Para obter mais informações, consulte também Autorizar operações COPY, UNLOAD, CREATE EXTERNAL FUNCTION e CREATE EXTERNAL SCHEMA usando funções do IAM.