Configuración del acceso a un bucket de Amazon S3
Para importar datos de un archivo de Amazon S3, conceda permiso del clúster de base de datos de Aurora PostgreSQL para obtener acceso al bucket de Amazon S3 en el que se encuentra el archivo. Puede proporcionar acceso a un bucket de Amazon S3 de una de las dos formas siguientes, tal y como se describe en los siguientes temas.
Temas
Uso de un rol de IAM para obtener acceso a un bucket de Amazon S3
Antes de cargar los datos de un archivo de Amazon S3, conceda permiso al clúster de base de datos de Aurora PostgreSQL para obtener acceso al bucket de Amazon S3 en el que se encuentra el archivo. De esta forma, no tiene que facilitar ni administrar información adicional de credenciales en la llamada a la función aws_s3.table_import_from_s3.
Para ello, cree una política de IAM que proporcione acceso al bucket de Amazon S3. Cree un rol de IAM y conecte la política a dicho rol. A continuación, asigne el rol de IAM al clúster de base de datos.
nota
No se puede asociar un rol de IAM a un clúster de base de datos de Aurora Serverless v1, por lo que no se aplican los siguientes pasos.
Para dar a un clúster de base de datos de Aurora PostgreSQL acceso a Simple Storage Service (Amazon S3) a través de un rol de IAM, lleve a cabo el siguiente procedimiento:
-
Cree una política de IAM.
Esta política concede los permisos de bucket y objeto que permiten que el clúster de base de datos de Aurora PostgreSQL tenga acceso a Amazon S3.
Incluya las siguientes acciones requeridas en la política para permitir la transferencia de archivos de un bucket de Amazon S3 a Aurora PostgreSQL:
-
s3:GetObject
-
s3:ListBucket
Incluya los siguientes recursos en la política para identificar el bucket de Amazon S3 y los objetos incluidos en este. A continuación se muestra el formato de nombre de recurso de Amazon (ARN) para obtener acceso a Amazon S3.
-
arn:aws:s3:::
amzn-s3-demo-bucket
-
arn:aws:s3:::
amzn-s3-demo-bucket
/*
Para obtener información adicional sobre cómo crear una política de IAM para Aurora PostgreSQL, consulte Creación y uso de una política de IAM para el acceso a bases de datos de IAM. Consulte también el Tutorial: Crear y asociar su primera política administrada por el cliente en la Guía del usuario de IAM.
El siguiente comando de la AWS CLI crea una política de IAM denominada
rds-s3-import-policy
con estas opciones. Otorga acceso a un bucket denominadoamzn-s3-demo-bucket
.nota
Anote el Nombre de recurso de Amazon (ARN) de la política que devolvió este comando. Al asociar la política a un rol de IAM, se necesita el ARN para realizar un paso posterior.
ejemplo
Para Linux, macOS o: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
/*" ] } ] }'En: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
/*" ] } ] }' -
-
Crear un rol de IAM.
Haga esto para que Aurora PostgreSQL pueda asumir este rol de IAM para obtener acceso a los buckets de Amazon S3. Para obtener más información, vea Crear un rol para delegar permisos a un usuario de IAM en Guía del usuario de IAM.
Le recomendamos que utilice las claves de contexto de condición globales de
aws:SourceArn
yaws:SourceAccount
en las políticas basadas en recursos para limitar los permisos del servicio a un recurso específico. Esta es la forma más eficaz de protegerse contra el problema del suplente confuso.Si utiliza claves de contexto de condición globales y el valor
aws:SourceArn
contiene el ID de cuenta, el valoraws:SourceAccount
y la cuenta en el valoraws:SourceArn
deben utilizar el mismo ID de cuenta cuando se utiliza en la misma instrucción de política.Use
aws:SourceArn
si quiere acceso entre servicios para un único recurso.-
Use
aws:SourceAccount
si quiere permitir que cualquier recurso de esa cuenta se asocie al uso entre servicios.
En la política, asegúrese de utilizar la clave de contexto de condición global
aws:SourceArn
con el ARN completo del recurso. En el siguiente ejemplo se muestra cómo se usa el comando de la AWS CLI para crear un rol denominadords-s3-import-role
.ejemplo
Para Linux, macOS o: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
" } } } ] }'En: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
" } } } ] }' -
Asocie la política de IAM que creó al rol de IAM creado.
El siguiente comando AWS CLI adjunta la política creada en el paso anterior al rol denominado
rds-s3-import-role
. Sustituya
por el ARN de la política que ha anotado en un paso anterior.your-policy-arn
ejemplo
Para Linux, macOS o:Unix
aws iam attach-role-policy \ --policy-arn
your-policy-arn
\ --role-name rds-s3-import-roleEn:Windows
aws iam attach-role-policy ^ --policy-arn
your-policy-arn
^ --role-name rds-s3-import-role -
Añada el rol de IAM al clúster de base de datos.
Para ello, utilice la AWS Management Console o la AWS CLI, tal y como se describe a continuación.
Para añadir un rol de IAM para un clúster de base de datos de PostgreSQL utilizando la consola
Inicie sesión en la AWS Management Console y abra la consola de Amazon RDS en https://console.aws.amazon.com/rds/
. -
Seleccione el nombre de clúster de base de datos de PostgreSQL para mostrar sus detalles.
-
En la pestaña Connectivity & security (Conectividad y seguridad), en la sección Manage IAM roles (Administrar roles de IAM), elija el rol que desee agregar en la instancia Add IAM roles to this clúster .
-
En Feature Feature (Característica), elija s3Import.
-
Seleccione Add role (Añadir rol).
Para añadir un rol de IAM para un clúster de base de datos de PostgreSQL mediante la CLI, realice el siguiente procedimiento:
-
Utilice el siguiente comando para añadir el rol al clúster de base de datos de PostgreSQL denominado
my-db-cluster
. Sustituya
por el ARN del rol que ha anotado en el paso anterior. Utiliceyour-role-arn
s3Import
para el valor de la opción--feature-name
.ejemplo
Para Linux, macOS o:Unix
aws rds add-role-to-db-cluster \ --db-cluster-identifier
my-db-cluster
\ --feature-name s3Import \ --role-arnyour-role-arn
\ --regionyour-region
En:Windows
aws rds add-role-to-db-cluster ^ --db-cluster-identifier
my-db-cluster
^ --feature-name s3Import ^ --role-arnyour-role-arn
^ --regionyour-region
Para agregar un rol de IAM para un clúster de base de datos de PostgreSQL mediante la API de Amazon RDS, llame a la operación AddRoleToDBclúster.
Uso de credenciales de seguridad para obtener acceso a un bucket de Amazon S3
Si lo prefiere, puede utilizar credenciales de seguridad para proporcionar acceso a un bucket de Amazon S3, en lugar de proporcionar acceso con un rol de IAM. Para ello, especifique el parámetro credentials
en la llamada a la función aws_s3.table_import_from_s3.
El parámetro credentials
es una estructura de tipo aws_commons._aws_credentials_1
, que contiene credenciales de AWS. Utilice la función aws_commons.create_aws_credentials para establecer la clave de acceso y la clave secreta en una estructura aws_commons._aws_credentials_1
, como se muestra a continuación.
postgres=>
SELECT aws_commons.create_aws_credentials( 'sample_access_key
', 'sample_secret_key
', '') AS creds \gset
Tras crear la estructura aws_commons._aws_credentials_1
, utilice la función aws_s3.table_import_from_s3 con el parámetro credentials
para importar los datos, tal y como se muestra a continuación.
postgres=>
SELECT aws_s3.table_import_from_s3( 't', '', '(format csv)', :'s3_uri', :'creds' );
O bien puede incluir la llamada a la función aws_commons.create_aws_credentials insertada dentro de la llamada a la función 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
', '') );
Solución de errores de acceso a Amazon S3
Si tiene problemas de conexión al intentar importar los datos de Amazon S3, consulte las recomendaciones que se indican a continuación:
-
Solución de problemas de identidades y accesos en Amazon Aurora
-
Solución de problemas de Amazon S3 en la Guía del usuario de Amazon Simple Storage Service
-
Solución de problemas de Amazon S3 e IAM en la Guía del usuario de IAM