Como posso criar acesso entre contas do Amazon Redshift Spectrum ao AWS Glue e ao Amazon S3?

6 minuto de leitura
0

Quero usar o Amazon Redshift Spectrum para acessar o AWS Glue e o Amazon Simple Storage Service (Amazon S3) em uma conta diferente da AWS.

Resolução

Crie um perfil do IAM que confie no Amazon Redshift

Para acessar recursos da AWS entre contas com o Amazon Redshift Spectrum, você deve criar um perfil do AWS Identity and Access Management (AWS IAM) que confie no Amazon Redshift. Em seguida, anexe o perfil ao cluster do Amazon Redshift.

Conclua as seguintes etapas:

  1. Abra o console do IAM.
  2. No painel de navegação, escolha Perfis.
  3. Selecione Criar perfil.
  4. Em Selecionar tipo de entidade confiável, selecione Serviço da AWS.
  5. Escolha Redshift.
  6. Em Selecione seu caso de uso, escolha Redshift - Personalizável.
  7. Escolha Avançar: Permissões, Avançar: Tags e, em seguida, Avançar: Revise.
    Observação: Você não precisa adicionar políticas ou tags.
  8. Insira um Nome do perfil e escolha Criar perfil. Nos exemplos a seguir, o perfil é redshift_role1.
  9. Associe redshift_role1 ao cluster Amazon Redshift. Essa associação permite que seu cluster assuma o perfil recém-criado para acessar o Amazon S3, o Amazon Athena e o AWS Glue.

Crie um novo perfil do IAM com acesso ao AWS Glue e ao Amazon S3

Em uma conta diferente, crie um novo perfil do IAM com acesso ao AWS Glue e ao Amazon S3. O Amazon Redshift assume o perfil de acessar os recursos do AWS Glue e do S3 por meio da relação de confiança.

Conclua as seguintes etapas:

  1. Abra o console do IAM.

  2. Escolha Políticas e, em seguida, escolha Criar política.

  3. Escolha a guia JSON e insira uma política do IAM semelhante ao exemplo a seguir:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "VisualEditor0",
          "Effect": "Allow",
          "Action": [
            "glue:BatchCreatePartition",
            "glue:UpdateDatabase",
            "glue:CreateTable",
            "glue:DeleteDatabase",
            "glue:GetTables",
            "glue:GetPartitions",
            "glue:BatchDeletePartition",
            "glue:UpdateTable",
            "glue:BatchGetPartition",
            "glue:DeleteTable",
            "glue:GetDatabases",
            "glue:GetTable",
            "glue:GetDatabase",
            "glue:GetPartition",
            "glue:CreateDatabase",
            "glue:BatchDeleteTable",
            "glue:CreatePartition",
            "glue:DeletePartition",
            "glue:UpdatePartition"
          ],
          "Resource": "*"
        },
        {
          "Sid": "VisualEditor1",
          "Effect": "Allow",
          "Action": [
            "s3:GetObject",
            "s3:ListBucketMultipartUploads",
            "s3:ListBucket",
            "s3:GetBucketLocation",
            "s3:ListMultipartUploadParts"
          ],
          "Resource": [
            "arn:aws:s3:::your_bucket",
            "arn:aws:s3:::your_bucket/*"
          ]
        },
        {
          "Sid": "VisualEditor2",
          "Effect": "Allow",
          "Action": [
            "kms:Decrypt"
          ],
          "Resource": [
            "<KMS_KEY_ARN>"
          ]
        }
      ]
    }

    Observação: substitua your_bucket pelo nome do bucket do S3 que você deseja acessar com o Amazon Redshift Spectrum. Substitua KMS_KEY_ARN pelo ARN da chave KMS que criptografa seu bucket do S3. Se os arquivos em seu bucket do S3 estiverem criptografados, conceda as permissões adequadas ao Amazon Redshift.

  4. Escolha Revisar política.

  5. Insira um Nome para a política e selecione Criar política.

  6. No painel de navegação, escolha Perfis e depois Criar perfil.

  7. Em Selecionar tipo de entidade confiável, escolha Outra conta da AWS.

  8. Em ID da conta, insira o ID da conta que usa o Amazon Redshift. Para obter mais informações, consulte Usar um alias para o ID da conta da AWS.

  9. Escolha Avançar: Permissões.

  10. Na lista de políticas, selecione o nome da política que você criou.

  11. Escolha Avançar: Tags e, em seguida, selecione Avançar: Revise.
    Observação: Você não precisa adicionar tags.

  12. Insira um Nome do perfil e escolha Criar perfil. Nos exemplos a seguir, o perfil é glue_s3_role2.

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

  14. Selecione o nome do perfil que você criou e, em seguida, escolha a guia Relações de Confiança.

  15. Escolha Editar relação de confiança.

  16. Exclua a política existente e, em seguida, substitua-a por uma política semelhante ao exemplo a seguir:

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

Observação: substitua redshift_account1 pelo ID da conta que usa o Amazon Redshift. Substitua redshift_role1 pelo nome do primeiro perfil que você criou.

  1. Selecione Atualizar política de confiança.

Atualize as permissões para o perfil do IAM do Amazon Redshift

Atualize as permissões para o primeiro perfil do IAM que você criou. Conclua as seguintes etapas:

  1. Abra o console do IAM.

  2. Escolha Perfis no painel de navegação e, em seguida, escolha o nome do primeiro perfil (redshift_role1) que você criou anteriormente.

  3. Em Permissões, escolha Adicionar política em linha.

  4. Escolha a guia JSON. Exclua a política existente e insira uma política do IAM semelhante ao exemplo a seguir:

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

    Observação: Substitua glue_s3_account2 pelo ID da conta que usa o AWS Glue e o Amazon S3. Substitua glue_s3_role2 pelo nome do segundo perfil que você criou.

  5. Escolha Revisar política.

  6. Insira um nome para a política e selecione Criar política.

  7. Conecte-se ao cluster do Amazon Redshift.

  8. Crie um esquema externo que use os perfis que você criou nas duas contas. Veja o exemplo a seguir:

    create external schema spectrum_schema
    from data catalog
    database 'your_db'
    iam_role 'arn:aws:iam::redshift_account1:role/redshift_role1,arn:aws:iam::glue_s3_account2:role/glue_s3_role2'

    Observação: substitua os seguintes valores:

    your_db: o nome do seu banco de dados no AWS Glue.
    redshift_account1: o ID da conta do Amazon Redshift.
    redshift_role1: o nome do perfil que você criou na conta do Amazon Redshift.
    glue_s3_account2: o ID da conta AWS Glue e Amazon S3.
    glue_s3_role2: o nome do perfil que você criou na conta do AWS Glue e do Amazon S3.

    Na instrução Create External Schema DDL, liste os ARNs do perfil do IAM na seguinte ordem: rredshift_cluster_role, destination_account_role. Não inclua espaços entre os perfis.

Agora é possível usar o Amazon Redshift Spectrum do seu cluster Amazon Redshift no edshift_account1 para consultar tabelas do AWS Glue em glue_s3_account2. Todos os recursos devem estar na mesma região da AWS. Você não precisa recriar suas tabelas externas porque o Amazon Redshift Spectrum pode acessar suas tabelas existentes do AWS Glue.

A consulta a seguir retorna o número de linhas em uma tabela do AWS Glue criada no esquema externo:

select count(*) from spectrum_schema.glue_table;

Observação: Substitua spectrum\ _schema e glue_table pelo nome do seu esquema e da tabela do AWS Glue.

Informações relacionadas

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

Políticas de IAM para o Amazon Redshift Spectrum

AWS OFICIAL
AWS OFICIALAtualizada há um mês