Configuración del acceso a un bucket de Amazon S3 - Amazon Relational Database Service

Configuración del acceso a un bucket de Amazon S3

Para importar datos de un archivo de Amazon S3, conceda permiso a la instancia de base de datos de RDS for PostgreSQL del 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.

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 a la instancia de RDS para la base de datos de 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 a la instancia 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 una instancia de base de datos de RDS for PostgreSQL acceso a Simple Storage Service (Amazon S3) a través de un rol de IAM, lleve a cabo el siguiente procedimiento:
  1. Cree una política de IAM.

    Esta política concede los permisos de bucket y objeto que permiten que la instancia de RDS para base de datos de 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 Amazon RDS:

    • 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 RDS para 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 denominado amzn-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/*" ] } ] }'
  2. Crear un rol de IAM.

    Haga esto para que Amazon RDS 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 y aws: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 valor aws:SourceAccount y la cuenta en el valor aws: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 denominado rds-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:db:dbname" } } } ] }'

    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:db:dbname" } } } ] }'
  3. 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 your-policy-arn por el ARN de la política que ha anotado en un paso anterior.

    ejemplo

    Para Linux, macOS o:Unix

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

    En:Windows

    aws iam attach-role-policy ^ --policy-arn your-policy-arn ^ --role-name rds-s3-import-role
  4. Añada el rol de IAM a la instancia 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 una instancia de base de datos de PostgreSQL utilizando la consola
  1. Inicie sesión en la AWS Management Console y abra la consola de Amazon RDS en https://console.aws.amazon.com/rds/.

  2. Seleccione el nombre de instancia de base de datos de PostgreSQL para mostrar sus detalles.

  3. 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 (Agregar roles de IAM a este clúster) .

  4. En Feature Feature (Característica), elija s3Import.

  5. Seleccione Add role (Añadir rol).

Para añadir un rol de IAM para una instancia de base de datos de PostgreSQL utilizando la CLI
  • Utilice el siguiente comando para añadir el rol a la instancia de base de datos de PostgreSQL denominada my-db-instance. Sustituya your-role-arn por el ARN del rol que ha anotado en el paso anterior. Utilice s3Import para el valor de la opción --feature-name.

    ejemplo

    Para Linux, macOS o:Unix

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

    En:Windows

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

Para agregar un rol de IAM para una instancia de base de datos de PostgreSQL mediante la API de Amazon RDS, llame a la operación AddRoleToDBInstance.

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: