Configurar o acesso a um bucket do Amazon S3
Para importar dados de um arquivo do Amazon S3, conceda à instância de banco de dados do RDS for 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.
Tópicos
Usar uma função do IAM para acessar um bucket do Amazon S3
Antes de carregar dados de um arquivo do Amazon S3, conceda à instância de banco de dados do RDS para 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 à instância 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 uma instância de banco de dados do RDS for PostgreSQL por meio de uma função do IAM
-
Crie uma política do IAM.
Essa política concede ao bucket e ao objeto as permissões para que a instância de banco de dados do RDS para 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 Amazon RDS do :
-
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 RDS para 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 denominadoamzn-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
/*" ] } ] }' -
-
Criar um perfil do IAM.
Faça isso para que o Amazon RDS 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
eaws: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 valoraws:SourceAccount
e a conta no valoraws: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 chamadards-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:db:dbname
" } } } ] }'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:db:dbname
" } } } ] }' -
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
pelo ARN da política que você anotou naquela ocasião.your-policy-arn
exemplo
Para Linux, macOS ou Unix:
aws iam attach-role-policy \ --policy-arn
your-policy-arn
\ --role-name rds-s3-import-rolePara Windows:
aws iam attach-role-policy ^ --policy-arn
your-policy-arn
^ --role-name rds-s3-import-role -
Adicione o perfil do IAM à instância 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 uma instância de banco de dados do PostgreSQL usando o console
Faça login no AWS Management Console e abra o console do Amazon RDS em https://console.aws.amazon.com/rds/
. -
Escolha o nome da instância de de banco de dados do PostgreSQL para exibir os detalhes.
-
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 instance (Adicionar funções do IAM a este cluster/esta instância).
-
Em Feature (Recurso), escolha s3Import.
-
Escolha Add role (adicionar função).
Para adicionar um perfil do IAM para uma instância de banco de dados do PostgreSQL usando a CLI
-
Use o comando a seguir para adicionar a função à instância de banco de dados do PostgreSQL chamada
my-db-instance
. Substitua
pelo ARN da função que você anotou em uma etapa anterior. Useyour-role-arn
s3Import
para o valor da opção--feature-name
.exemplo
Para Linux, macOS ou Unix:
aws rds add-role-to-db-instance \ --db-instance-identifier
my-db-instance
\ --feature-name s3Import \ --role-arnyour-role-arn
\ --regionyour-region
Para Windows:
aws rds add-role-to-db-instance ^ --db-instance-identifier
my-db-instance
^ --feature-name s3Import ^ --role-arnyour-role-arn
^ --regionyour-region
Para adicionar uma função do IAM a uma instância de banco de dados PostgreSQL utilizando a API do Amazon RDS, chame a operação AddRoleToDBInstance.
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:
-
Solução de problemas do Amazon S3 no Guia do usuário do Amazon Simple Storage Service
-
Troubleshooting Amazon S3 and IAM (Solucionar problemas no Amazon S3 e no IAM) no Guia do usuário do IAM