Acceso entre cuentas a S3 Access Grants - Amazon Simple Storage Service

Acceso entre cuentas a S3 Access Grants

Con S3 Access Grants, puede conceder acceso a los datos de Amazon S3 a lo siguiente:

  • Identidades de AWS Identity and Access Management (IAM) de su cuenta

  • Identidades de IAM en otras cuentas de AWS

  • Usarios o grupos de directorios en su instancia de AWS IAM Identity Center

En primer lugar, configure el acceso entre cuentas para la otra cuenta. Esto incluye conceder acceso a su instancia de S3 Access Grants mediante una política de recursos. A continuación, conceda acceso a sus datos de S3 (buckets, prefijos u objetos) mediante concesiones.

Tras configurar el acceso entre cuentas, la otra cuenta puede solicitar credenciales de acceso temporales a sus datos de Amazon S3 desde S3 Access Grants. La siguiente imagen muestra el flujo de usuarios para el acceso de S3 entre cuentas a través de S3 Access Grants:

Flujo de usuarios entre cuentas de S3 Access Grants
  1. Los usuarios o las aplicaciones de una segunda cuenta (B) solicitan credenciales a la instancia de S3 Access Grants de su cuenta (A), donde se almacenan los datos de Amazon S3. Para obtener más información, consulte Solicitar acceso a los datos de Amazon S3 a través de S3 Access Grants.

  2. La instancia de S3 Access Grants de su cuenta (A) devuelve credenciales temporales si hay una concesión que permite a la segunda cuenta acceder a sus datos de Amazon S3. Para obtener más información, consulte Crear concesiones.

  3. Los usuarios o las aplicaciones de la segunda cuenta (B) utilizan las credenciales ofrecidas por S3 Access Grants para acceder a los datos de S3 de su cuenta (A).

Configuración del acceso entre cuentas a S3 Access Grants

Para conceder acceso a S3 entre cuentas a través de S3 Access Grants, siga estos pasos:

  • Paso 1: configure una instancia de S3 Access Grants en su cuenta, por ejemplo, el ID de la cuenta 111122223333, donde se almacenan los datos de S3.

  • Paso 2: configure la política de recursos de la instancia de S3 Access Grants de su cuenta 111122223333 para dar acceso a la segunda cuenta, por ejemplo, el ID de cuenta 444455556666.

  • Paso 3: configure los permisos de IAM para que la entidad principal de IAM de la segunda cuenta 444455556666 solicite las credenciales de la instancia de S3 Access Grants de su cuenta 111122223333.

  • Paso 4: cree una concesión en su cuenta 111122223333 que permita a la entidad principal de IAM de la segunda cuenta 444455556666 acceder a algunos de los datos de S3 de su cuenta 111122223333.

Paso 1: configuración de una instancia de S3 Access Grants en su cuenta

En primer lugar, debe tener una instancia de S3 Access Grants en su cuenta 111122223333 para administrar el acceso a sus datos de Amazon S3. Debe crear una instancia de S3 Access Grants en cada una de las Región de AWS en las que se almacenen los datos de S3 que desea compartir. Si comparte datos en más de una Región de AWS, repita cada uno de estos pasos de configuración para cada Región de AWS. Si ya tiene una instancia de S3 Access Grants en la Región de AWS en la que se almacenen sus datos de S3, vaya al siguiente paso. Si no ha configurado una instancia de S3 Access Grants, consulte Crear una instancia de S3 Access Grants para completar este paso.

Paso 2: Configure la política de recursos de su instancia de S3 Access Grants para conceder acceso entre cuentas

Después de crear una instancia de S3 Access Grants en su cuenta 111122223333 para el acceso entre cuentas, configure la política basada en recursos para la instancia de S3 Access Grants de su cuenta 111122223333, con el a fin de conceder el acceso entre cuentas. La instancia de S3 Access Grants admite políticas basadas en recursos. Con la política adecuada basada en los recursos, es posible conceder acceso a usuarios o roles de AWS Identity and Access Management (IAM) de otras Cuentas de AWS a su instancia de S3 Access Grants. El acceso entre cuentas solo concede los siguientes permisos (acciones):

  • s3:GetAccessGrantsInstanceForPrefix: el usuario, el rol o la app pueden recuperar la instancia de S3 Access Grants que contiene un prefijo concreto.

  • s3:ListAccessGrants

  • s3:ListAccessLocations

  • s3:GetDataAccess: el usuario, el rol o la app pueden solicitar credenciales temporales en función del acceso que se le concedió a través de S3 Access Grants. Utilice estas credenciales para acceder a los datos de S3 a los que se le ha concedido acceso.

Puede elegir cuáles de estos permisos desea incluir en la política de recursos. Esta política de recursos de la instancia de S3 Access Grants es una política normal basada en recursos y es compatible con todo lo que admite el lenguaje de la política de IAM. En la misma política, puede conceder acceso a identidades de IAM específicas en la cuenta 111122223333, por ejemplo, mediante la condición aws:PrincipalArn, pero no es necesario hacerlo con S3 Access Grants. En su lugar, en su instancia de S3 Access Grants, puede crear concesiones para identidades de IAM individuales de su cuenta, así como para la otra cuenta. Al administrar cada concesión de acceso a través de S3 Access Grants, puede escalar sus permisos.

Si ya usa AWS Resource Access Manager (AWS RAM), puede utilizarlo para compartir sus recursos de s3:AccessGrants con otras cuentas o dentro de su organización. Para obtener más información, consulte Trabajo con recursos compartidos de AWS. Si no utiliza AWS RAM, también puede añadir la política de recursos mediante las operaciones de la API de S3 Access Grants o la AWS Command Line Interface (AWS CLI).

Recomendamos que se use la consola de AWS Resource Access Manager (AWS RAM) para compartir sus recursos de s3:AccessGrants con otras cuentas o dentro de su organización. Para compartir entre cuentas de S3 Access Grants, haga lo siguiente:

Configuración de la política de recursos de la instancia de S3 Access Grants:
  1. Inicie sesión AWS Management Console Management Console y abra la consola de Amazon S3 en https://console.aws.amazon.com/s3/.

  2. Seleccione la Región de AWS en el selector de Región de AWS.

  3. En el panel de navegación izquierdo, seleccione Access Grants (Concesiones de acceso).

  4. En la página de instancias de Access Grants, en la sección Instancia de esta cuenta, seleccione Compartir instancia. Esto le redirige a la consola de AWS RAM.

  5. Seleccione Crear recurso compartido.

  6. Siga los pasos de AWS RAM para crear un recurso compartido. Para obtener más información, consulte Crear un recurso compartido en AWS RAM.

Para instalar AWS CLI, consulte Instalación de AWS CLI en la Guía del usuario de AWS Command Line Interface.

Puede agregar la política de recursos mediante el comando put-access-grants-instance-resource-policy de la CLI.

Si desea conceder acceso entre cuentas a la instancia de S3 Access Grants que se encuentra en su cuenta 111122223333 a la segunda cuenta 444455556666, la política de recursos de la instancia de S3 Access Grants de su cuenta 111122223333 debe dar permiso a la segunda cuenta 444455556666 para realizar las siguientes acciones:

  • s3:ListAccessGrants

  • s3:ListAccessGrantsLocations

  • s3:GetDataAccess

  • s3:GetAccessGrantsInstanceForPrefix

En la política de recursos de la instancia de S3 Access Grants, especifique el ARN de su instancia de S3 Access Grants como Resource y la segunda cuenta 444455556666 como Principal. En el siguiente ejemplo, sustituya los marcadores de posición del usuario con su propia información.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "444455556666" }, "Action": [ "s3:ListAccessGrants", "s3:ListAccessGrantsLocations", "s3:GetDataAccess", "s3:GetAccessGrantsInstanceForPrefix" ], "Resource": "arn:aws:s3:us-east-2:111122223333:access-grants/default" } ] }

Para añadir o actualizar una política de recursos de S3 Access Grants, puede usar el siguiente comando. Al utilizar el comando de ejemplo siguiente, sustituya user input placeholders con su información.

ejemplo Añadir o actualizar una política de recursos de instancia de S3 Access Grants
aws s3control put-access-grants-instance-resource-policy \ --account-id 111122223333 \ --policy file://resourcePolicy.json \ --region us-east-2 { "Policy": "{\n \"Version\": \"2012-10-17\",\n \"Statement\": [{\n \"Effect\": \"Allow\",\n \"Principal\": {\n \"AWS\": \"444455556666\"\n },\n \"Action\": [\n \"s3:ListAccessGrants\",\n \"s3:ListAccessGrantsLocations\",\n \"s3:GetDataAccess\",\n \"s3:GetAccessGrantsInstanceForPrefix\"\n ],\n \"Resource\": \"arn:aws:s3:us-east-2:111122223333:access-grants/default\"\n }\n ]\n }\n", "CreatedAt": "2023-06-16T00:07:47.473000+00:00" }
ejemplo Obtener una política de recursos de S3 Access Grants

También puede utilizar la CLI para obtener o eliminar una política de recursos para una instancia de S3 Access Grants.

Para obtener una política de recursos de S3 Access Grants, use el siguiente comando de ejemplo. Para utilizar este comando de ejemplo, sustituya user input placeholders por su propia información.

aws s3control get-access-grants-instance-resource-policy \ --account-id 111122223333 \ --region us-east-2 { "Policy": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"AWS\":\"arn:aws:iam::111122223333:root\"},\"Action\":[\"s3:ListAccessGrants\",\"s3:ListAccessGrantsLocations\",\"s3:GetDataAccess\"],\"Resource\":\"arn:aws:s3:us-east-2:111122223333:access-grants/default\"}]}", "CreatedAt": "2023-06-16T00:07:47.473000+00:00" }
ejemplo Eliminar una política de recursos de S3 Access Grants

Para eliminar una política de recursos de S3 Access Grants, use el siguiente comando de ejemplo. Para utilizar este comando de ejemplo, sustituya user input placeholders por su propia información.

aws s3control delete-access-grants-instance-resource-policy \ --account-id 111122223333 \ --region us-east-2 // No response body

Puede agregar la política de recursos mediante la API PutAccessGrantsInstanceResourcePolicy.

Si desea conceder acceso entre cuentas a la instancia de S3 Access Grants que se encuentra en su cuenta 111122223333 a la segunda cuenta 444455556666, la política de recursos de la instancia de S3 Access Grants de su cuenta 111122223333 debe dar permiso a la segunda cuenta 444455556666 para realizar las siguientes acciones:

  • s3:ListAccessGrants

  • s3:ListAccessGrantsLocations

  • s3:GetDataAccess

  • s3:GetAccessGrantsInstanceForPrefix

En la política de recursos de la instancia de S3 Access Grants, especifique el ARN de su instancia de S3 Access Grants como Resource y la segunda cuenta 444455556666 como Principal. Para utilizar el siguiente ejemplo, sustituya los marcadores de posición del usuario con su propia información.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "444455556666" }, "Action": [ "s3:ListAccessGrants", "s3:ListAccessGrantsLocations", "s3:GetDataAccess", "s3:GetAccessGrantsInstanceForPrefix" ], "Resource": "arn:aws:s3:us-east-2:111122223333:access-grants/default" } ] }

A continuación, puede usar la API PutAccessGrantsInstanceResourcePolicy para configurar la política

Para obtener información sobre la compatibilidad con la API de REST para actualizar, obtener o eliminar una política de recursos para una instancia de S3 Access Grants, consulte las siguientes secciones en la Referencia de la API de Amazon Simple Storage Service:

En esta sección, encontrará ejemplos de SDK de AWS sobre cómo configurar su política de recursos de S3 Access Grants para conceder a una segunda cuenta de AWS acceso a algunos de sus datos de S3.

Java

Añada, actualice, obtenga o elimine una política de recursos para administrar el acceso entre cuentas a su instancia de S3 Access Grants.

ejemplo Añadir o actualizar una política de recursos de instancia de S3 Access Grants

Si desea conceder acceso entre cuentas a la instancia de S3 Access Grants que se encuentra en su cuenta 111122223333 a la segunda cuenta 444455556666, la política de recursos de la instancia de S3 Access Grants de su cuenta 111122223333 debe dar permiso a la segunda cuenta 444455556666 para realizar las siguientes acciones:

  • s3:ListAccessGrants

  • s3:ListAccessGrantsLocations

  • s3:GetDataAccess

  • s3:GetAccessGrantsInstanceForPrefix

En la política de recursos de la instancia de S3 Access Grants, especifique el ARN de su instancia de S3 Access Grants como Resource y la segunda cuenta 444455556666 como Principal. Para utilizar el siguiente ejemplo, sustituya los marcadores de posición del usuario con su propia información.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "444455556666" }, "Action": [ "s3:ListAccessGrants", "s3:ListAccessGrantsLocations", "s3:GetDataAccess", "s3:GetAccessGrantsInstanceForPrefix" ], "Resource": "arn:aws:s3:us-east-2:111122223333:access-grants/default" } ] }

Para añadir o actualizar una política de recursos de instancia de S3 Access Grants, use el siguiente código de ejemplo:

public void putAccessGrantsInstanceResourcePolicy() { PutAccessGrantsInstanceResourcePolicyRequest putRequest = PutAccessGrantsInstanceResourcePolicyRequest.builder() .accountId(111122223333) .policy(RESOURCE_POLICY) .build(); PutAccessGrantsInstanceResourcePolicyResponse putResponse = s3Control.putAccessGrantsInstanceResourcePolicy(putRequest); LOGGER.info("PutAccessGrantsInstanceResourcePolicyResponse: " + putResponse); }

Respuesta:

PutAccessGrantsInstanceResourcePolicyResponse( Policy={ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": { "AWS": "444455556666" }, "Action": [ "s3:ListAccessGrants", "s3:ListAccessGrantsLocations", "s3:GetDataAccess", "s3:GetAccessGrantsInstanceForPrefix" ], "Resource": "arn:aws:s3:us-east-2:111122223333:access-grants/default" }] } )
ejemplo Obtener una política de recursos de S3 Access Grants

Para obtener una política de recursos de S3 Access Grants, use el siguiente código de ejemplo. Para utilizar el comando de ejemplo siguiente, sustituya user input placeholders con su información.

public void getAccessGrantsInstanceResourcePolicy() { GetAccessGrantsInstanceResourcePolicyRequest getRequest = GetAccessGrantsInstanceResourcePolicyRequest.builder() .accountId(111122223333) .build(); GetAccessGrantsInstanceResourcePolicyResponse getResponse = s3Control.getAccessGrantsInstanceResourcePolicy(getRequest); LOGGER.info("GetAccessGrantsInstanceResourcePolicyResponse: " + getResponse); }

Respuesta:

GetAccessGrantsInstanceResourcePolicyResponse( Policy={"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"AWS":"arn:aws:iam::444455556666:root"},"Action":["s3:ListAccessGrants","s3:ListAccessGrantsLocations","s3:GetDataAccess"],"Resource":"arn:aws:s3:us-east-2:111122223333:access-grants/default"}]}, CreatedAt=2023-06-15T22:54:44.319Z )
ejemplo Eliminar una política de recursos de S3 Access Grants

Para eliminar una política de recursos de S3 Access Grants, use el siguiente código de ejemplo. Para utilizar el comando de ejemplo siguiente, sustituya user input placeholders con su información.

public void deleteAccessGrantsInstanceResourcePolicy() { DeleteAccessGrantsInstanceResourcePolicyRequest deleteRequest = DeleteAccessGrantsInstanceResourcePolicyRequest.builder() .accountId(111122223333) .build(); DeleteAccessGrantsInstanceResourcePolicyResponse deleteResponse = s3Control.putAccessGrantsInstanceResourcePolicy(deleteRequest); LOGGER.info("DeleteAccessGrantsInstanceResourcePolicyResponse: " + deleteResponse); }

Respuesta:

DeleteAccessGrantsInstanceResourcePolicyResponse()

Paso 3: concesión de permiso a las identidades de IAM de una segunda cuenta para llamar a la instancia de S3 Access Grants de su cuenta

Una vez que el propietario de los datos de Amazon S3 haya configurado la política multicuenta para la instancia de S3 Access Grants de la cuenta 111122223333, el propietario de la segunda cuenta 444455556666 debe crear una política basada en identidades para sus usuarios o funciones de IAM y el propietario debe darles acceso a la instancia de S3 Access Grants. En la política basada en identidades, incluya una o más de las siguientes acciones, en función de lo que se conceda en la política de recursos de instancia de S3 Access Grants y de los permisos que quiera conceder:

  • s3:ListAccessGrants

  • s3:ListAccessGrantsLocations

  • s3:GetDataAccess

  • s3:GetAccessGrantsInstanceForPrefix

Siguiendo el patrón de acceso entre cuentas de AWS, los usuarios o roles de IAM de la segunda cuenta 444455556666 deben tener de forma explícita uno o varios de estos permisos. Por ejemplo, conceda el permiso s3:GetDataAccess para que el usuario o rol de IAM pueda llamar a la instancia de S3 Access Grants de la cuenta 111122223333 para solicitar credenciales.

Para utilizar este comando de ejemplo, sustituya user input placeholders por su propia información.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetDataAccess", ], "Resource": "arn:aws:s3:us-east-2:111122223333:access-grants/default" } ] }

Para obtener más información acerca de la edición de la política de IAM basada en identidades, consulte Edición de políticas de IAM en la Guía de AWS Identity and Access Management.

Paso 4: Cree una concesión en la instancia de S3 Access Grants de su cuenta que dé a la identidad IAM de la segunda cuenta acceso a algunos de los datos de S3

Para el paso de configuración final, puede crear una concesión en la instancia de S3 Access Grants de su cuenta 111122223333 que dé a la identidad IAM de la segunda cuenta 444455556666 acceso a algunos de los datos de S3 de su cuenta. Puede hacerlo mediante la consola de Amazon S3, la CLI, la API y los SDK. Para obtener más información, consulte Crear concesiones.

En la concesión, especifique el ARN de AWS de la identidad de IAM de la segunda cuenta y especifique la ubicación de los datos de S3 (un bucket, un prefijo u objeto) a la que va a conceder acceso. Esta ubicación ya debe estar registrada en su instancia de S3 Access Grants. Para obtener más información, consulte Registrar una ubicación. Opcionalmente, puede especificar un subprefijo. Por ejemplo, si la ubicación a la que va a conceder el acceso es un bucket y desea limitar aún más el acceso a un objeto específico de ese bucket, introduzca el nombre de la clave del objeto en el campo S3SubPrefix. O bien, si quiere limitar el acceso a los objetos del bucket con nombres de clave que comiencen con un prefijo concreto, por ejemplo, 2024-03-research-results/, introduzca S3SubPrefix=2024-03-research-results/.

El siguiente es un ejemplo de comando de CLI para crear una concesión de acceso para una identidad en la segunda cuenta. Para obtener más información, consulte Crear concesiones. Para utilizar este comando de ejemplo, sustituya user input placeholders por su propia información.

aws s3control create-access-grant \ --account-id 111122223333 \ --access-grants-location-id default \ --access-grants-location-configuration S3SubPrefix=prefixA* \ --permission READ \ --grantee GranteeType=IAM,GranteeIdentifier=arn:aws:iam::444455556666:role/data-consumer-1

Tras configurar el acceso entre cuentas, el usuario o rol de la segunda cuenta puede hacer lo siguiente: