Configurar o acesso a um bucket do Amazon S3 - Amazon Aurora

Configurar o acesso a um bucket do Amazon S3

Para importar dados de um arquivo do Amazon S3, conceda ao cluster de bancos de dados Aurora PostgreSQL permissão para acessar o bucket do Amazon S3 no qual o arquivo se encontra. Conceda acesso a um bucket do Amazon S3 de uma das duas maneiras, conforme descrito nos tópicos a seguir.

Usar uma função do IAM para acessar um bucket do Amazon S3

Antes de carregar dados de um arquivo do Amazon S3, conceda ao cluster de bancos de dados Aurora PostgreSQL permissão para acessar o bucket do Amazon S3 no qual o arquivo está. Dessa forma, não é necessário gerenciar informações adicionais de credenciais ou fornecê-las na chamada da função aws_s3.table_import_from_s3.

Para fazer isso, crie uma política do IAM que conceda acesso ao bucket do Amazon S3. Crie uma função do IAM e associe a política a ela. Depois, atribua uma função do IAM ao cluster de banco de dados.

nota

Não é possível associar uma função do IAM a um cluster de banco de dados Aurora Serverless v1, portanto, as etapas a seguir não se aplicam.

Para oferecer ao Simple Storage Service (Amazon S3) acesso a um cluster de bancos de dados Aurora PostgreSQL por meio de uma função do IAM
  1. Crie uma política do IAM.

    Essa política concede ao bucket e ao objeto as permissões para que o cluster de bancos de dados Aurora PostgreSQL acesse o Amazon S3.

    Inclua na política as seguintes ações necessárias para permitir a transferência de arquivos de um bucket do Amazon S3 para o do Aurora PostgreSQL:

    • s3:GetObject

    • s3:ListBucket

    Inclua na política os recursos a seguir para identificar o bucket e os objetos do Amazon S3 no bucket. Isso mostra o formato do nome de recurso da Amazon (ARN) para acessar o Amazon S3.

    • arn:aws:s3:::amzn-s3-demo-bucket

    • arn:aws:s3:::amzn-s3-demo-bucket/*

    Para ter mais informações sobre como criar uma política do IAM para o Aurora PostgreSQL, consulte Criar e usar uma política do IAM para acesso do banco de dados do IAM. Consulte também Tutorial: Criar e anexar sua primeira política gerenciada pelo cliente no Guia do usuário do IAM.

    O comando da AWS CLI a seguir cria uma política do IAM denominada rds-s3-import-policy com essas opções. Ele concede acesso a um bucket denominado amzn-s3-demo-bucket.

    nota

    Anote o nome do recurso da Amazon (ARN) da política que é retornado por esse comando. O ARN será necessário para uma etapa posterior, quando você anexar a política a um perfil do IAM.

    exemplo

    Para Linux, macOS ou Unix:

    aws iam create-policy \ --policy-name rds-s3-import-policy \ --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Sid": "s3import", "Action": [ "s3:GetObject", "s3:ListBucket" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket", "arn:aws:s3:::amzn-s3-demo-bucket/*" ] } ] }'

    Para Windows:

    aws iam create-policy ^ --policy-name rds-s3-import-policy ^ --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Sid": "s3import", "Action": [ "s3:GetObject", "s3:ListBucket" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket", "arn:aws:s3:::amzn-s3-demo-bucket/*" ] } ] }'
  2. Criar um perfil do IAM.

    Faça isso para que o Aurora PostgreSQL possa assumir essa função do IAM para acessar os buckets do Amazon S3. Para ter mais informações, consulte Criar um perfil para delegar permissões a um usuário do IAM no Guia do usuário do IAM.

    Convém usar as chaves de contexto de condição global aws:SourceArn e aws:SourceAccount em políticas baseadas em recursos para limitar as permissões do serviço a um recurso específico. Essa é a maneira mais eficiente de se proteger contra o problema "confused deputy".

    Se você utilizar ambas as chaves de contexto de condição global, e o valor aws:SourceArn contiver o ID da conta, o valor aws:SourceAccount e a conta no valor aws:SourceArn deverão utilizar o mesmo ID de conta quando utilizados na mesma instrução de política.

    • Use aws:SourceArn se quiser acesso entre serviços para um único recurso.

    • Use aws:SourceAccount se você quiser permitir que qualquer recurso nessa conta seja associado ao uso entre serviços.

    Na política, certifique-se de usar a chave de contexto de condição global aws:SourceArn com o ARN completo do recurso. O exemplo a seguir mostra como fazer isso utilizando o comando da AWS CLI para criar uma função chamada rds-s3-import-role.

    exemplo

    Para Linux, macOS ou Unix:

    aws iam create-role \ --role-name rds-s3-import-role \ --assume-role-policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "rds.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": "111122223333", "aws:SourceArn": "arn:aws:rds:us-east-1:111122223333:cluster:clustername" } } } ] }'

    Para Windows:

    aws iam create-role ^ --role-name rds-s3-import-role ^ --assume-role-policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "rds.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": "111122223333", "aws:SourceArn": "arn:aws:rds:us-east-1:111122223333:cluster:clustername" } } } ] }'
  3. Anexe a política do IAM que você criou ao perfil do IAM que você criou.

    O comando da AWS CLI a seguir vincula a política criada na etapa anterior à função rds-s3-import-role. Substitua your-policy-arn pelo ARN da política que você anotou naquela ocasião.

    exemplo

    Para Linux, macOS ou Unix:

    aws iam attach-role-policy \ --policy-arn your-policy-arn \ --role-name rds-s3-import-role

    Para Windows:

    aws iam attach-role-policy ^ --policy-arn your-policy-arn ^ --role-name rds-s3-import-role
  4. Adicione o perfil do IAM ao cluster de banco de dados.

    Faça isso usando o AWS Management Console ou a AWS CLI, conforme descrito a seguir.

Para adicionar um perfil do IAM a um cluster de banco de dados do PostgreSQL usando o console
  1. Faça login no AWS Management Console e abra o console do Amazon RDS em https://console.aws.amazon.com/rds/.

  2. Escolha o nome da de cluster de banco de dados do PostgreSQL para exibir os detalhes.

  3. Na guia Connectivity & security (Conectividade e segurança), na seção Manage IAM roles (Gerenciar funções do IAM), escolha a função a ser adicionada sob Add IAM roles to this cluster (Adicionar funções do IAM a este cluster/esta instância).

  4. Em Feature (Recurso), escolha s3Import.

  5. Escolha Add role (adicionar função).

Para adicionar um perfil do IAM a um cluster de banco de dados do PostgreSQL usando a CLI
  • Use o comando a seguir para adicionar a função ao cluster de banco de dados do PostgreSQL chamado my-db-cluster. Substituayour-role-arn pelo ARN da função que você anotou em uma etapa anterior. Use s3Import para o valor da opção --feature-name.

    exemplo

    Para Linux, macOS ou Unix:

    aws rds add-role-to-db-cluster \ --db-cluster-identifier my-db-cluster \ --feature-name s3Import \ --role-arn your-role-arn \ --region your-region

    Para Windows:

    aws rds add-role-to-db-cluster ^ --db-cluster-identifier my-db-cluster ^ --feature-name s3Import ^ --role-arn your-role-arn ^ --region your-region

Para adicionar uma função do IAM a um cluster de banco de dados PostgreSQL utilizando a API do Amazon RDS, chame a operação AddRoleToDBCluster.

Usar credenciais de segurança para acessar um bucket do Amazon S3

Se preferir, você poderá usar credenciais de segurança para conceder acesso a um bucket do Amazon S3 em vez de conceder acesso com uma função do IAM. Faça isso especificando o parâmetro credentials na chamada da função aws_s3.table_import_from_s3.

O parâmetro credentials é uma estrutura do tipo aws_commons._aws_credentials_1, que contém credenciais da AWS. Use a função aws_commons.create_aws_credentials para definir a chave de acesso e a chave secreta em uma estrutura aws_commons._aws_credentials_1, conforme mostrado a seguir.

postgres=> SELECT aws_commons.create_aws_credentials( 'sample_access_key', 'sample_secret_key', '') AS creds \gset

Depois de criar a estrutura aws_commons._aws_credentials_1 , use a função aws_s3.table_import_from_s3 com o parâmetro credentials para importar os dados, conforme mostrado a seguir.

postgres=> SELECT aws_s3.table_import_from_s3( 't', '', '(format csv)', :'s3_uri', :'creds' );

Outra opção é incluir a chamada de função aws_commons.create_aws_credentials em linha dentro da chamada de função aws_s3.table_import_from_s3.

postgres=> SELECT aws_s3.table_import_from_s3( 't', '', '(format csv)', :'s3_uri', aws_commons.create_aws_credentials('sample_access_key', 'sample_secret_key', '') );

Solução de problemas de acesso ao Amazon S3

Se você encontrar problemas de conexão ao tentar importar dados do Amazon S3, consulte o seguinte para obter recomendações: