Meu bucket do Amazon S3 tem arquivos de dados criados usando o comando UNLOAD de um cluster do Amazon Redshift em outra conta. Por que não consigo acessar esses arquivos?

5 minuto de leitura
0

Meu bucket do Amazon Simple Storage Service (Amazon S3) tem arquivos de dados criados usando o comando UNLOAD de um cluster do Amazon Redshift em outra conta da AWS. No entanto, estou recebendo erros 403 de acesso negado quando tento acessar esses arquivos em minha própria conta. Como posso corrigir isso?

Breve descrição

Por padrão, um objeto do S3 pertence à conta da AWS que o carregou. Isso é verdade mesmo quando o bucket pertence a outra conta. Portanto, quando os arquivos de dados do Amazon Redshift são colocados em seu bucket por outra conta, você não tem permissão padrão para esses arquivos.

Para obter acesso aos arquivos de dados, um perfil do AWS Identity and Access Management (IAM) com permissões entre contas deve executar o comando UNLOAD novamente. Siga estas etapas para configurar o cluster do Amazon Redshift com permissões entre contas no bucket:

1.    Na conta do bucket do S3, crie um perfil do IAM com permissões para o bucket. Esse é o perfil do bucket.

2.    Na conta do cluster do Amazon Redshift, crie outro perfil do IAM com permissões para assumir o perfil do bucket. Essa é o perfil do cluster.

3.    Atualize o perfil do bucket para conceder acesso ao bucket e, em seguida, crie uma relação de confiança com o perfil do cluster.

4.    No cluster do Amazon Redshift, execute o comando UNLOAD usando o perfil do cluster e o perfil do bucket.

Importante: Essa resolução não se aplica aos clusters do Amazon Redshift ou aos buckets do S3 que usam criptografia do lado do servidor com o AWS Key Management Service (AWS KMS).

Resolução

Criar um perfil do bucket

Na conta do bucket do S3, crie um perfil do IAM com permissões para o bucket:

1.    Na conta do bucket do S3, abra o console do IAM.

2.    Crie um perfil do IAM. Ao criar o perfil, selecione o seguinte:

Em Selecionar tipo de entidade confiável, escolha Serviço da AWS.

Em Escolha o serviço que usará esse perfil, escolha Redshift.

Em Selecione seu caso de uso, escolha Redshift - Personalizável.

3.    Depois de criar o perfil do IAM, anexe uma política que conceda permissão ao bucket. Você pode usar uma política semelhante à seguinte:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1234537676482",
      "Action": [
        "s3:ListBucket",
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::awsexamplebucket/*",
        "arn:aws:s3:::awsexamplebucket"
      ]
    }
  ]
}

4.Obtenha o Amazon Resource Name (ARN) do perfil do bucket. Você precisa do ARN do perfil para uma etapa posterior.

Crie um perfil do cluster

Na conta do cluster do Amazon Redshift, crie outro perfil do IAM com permissões para assumir o perfil do bucket:

1.    Na conta do cluster do Amazon Redshift, abra o console do IAM.

2.    Crie um perfil do IAM. Ao criar o perfil, selecione o seguinte:

Em Selecionar tipo de entidade confiável, escolha Serviço da AWS.

Em Escolha o serviço que usará esse perfil, escolha Redshift.

Em Selecione seu caso de uso, escolha Redshift - Personalizável.

3.    Depois de criar o perfil do IAM, anexe a seguinte política ao perfil:

Importante: Substitua arn:aws:iam::123456789012:role/Bucket_Role pelo ARN do perfil do bucket que você criou.

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

4.     Obtenha o ARN do perfil do cluster. Você precisa do ARN do perfil para uma etapa posterior.

Atualize o perfil do bucket para criar uma relação de confiança com o perfil do cluster

1.    Na conta do bucket do S3, abra o console do IAM.

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

3.    Na lista de perfis, abra o Perfil do bucket que você criou.

4.    Escolha a guia Relações de confiança.

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

6.    Em Documento de política, substitua a política existente pela seguinte:

Importante: Substitua arn:aws:iam::012345678901:role/Cluster_Role pelo ARN do perfil do cluster que você criou.

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

7.    Escolha Atualizar política de confiança.

No cluster do Amazon Redshift, execute a operação de descarregamento usando o perfil do cluster e o perfil do bucket

1.    Conecte-se ao cluster do Amazon Redshift.

2.    Execute o comando UNLOAD com os dois perfis do IAM que você criou, semelhantes aos seguintes:

Importante: Substitua arn:aws:iam::012345678901:role/Cluster_Role pelo ARN de seu perfil do cluster. Em seguida, substitua arn:aws:iam::123456789012:role/Bucket_Role pelo ARN do seu perfil do bucket.

unload ('select * from TABLE_NAME')
to 's3://awsexamplebucket'
iam_role 'arn:aws:iam::012345678901:role/Cluster_Role,arn:aws:iam::123456789012:role/Bucket_Role';

Depois que você executa o comando UNLOAD, os arquivos de dados pertencem à mesma conta do bucket em que estão armazenados.


Informações relacionadas

Exemplos de UNLOAD

AWS OFICIAL
AWS OFICIALAtualizada há um ano