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.
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 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
-
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 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 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
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: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
" } } } ] }' -
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 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
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 de cluster 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 cluster (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 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
. 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-cluster \ --db-cluster-identifier
my-db-cluster
\ --feature-name s3Import \ --role-arnyour-role-arn
\ --regionyour-region
Para Windows:
aws rds add-role-to-db-cluster ^ --db-cluster-identifier
my-db-cluster
^ --feature-name s3Import ^ --role-arnyour-role-arn
^ --regionyour-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:
-
Solução de problemas de identidade e acesso do Amazon Aurora
-
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