Compartir archivos de registro de CloudTrail entre cuentas de AWS - AWS CloudTrail

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Compartir archivos de registro de CloudTrail entre cuentas de AWS

En esta sección se explica cómo compartir archivos de registro de CloudTrail entre varias cuentas de AWS. El enfoque que utilice para compartir los registros entre Cuentas de AWS depende de la configuración del bucket de S3. Estas son las opciones para compartir archivos de registro:

  • Configuración impuesta por el propietario del bucket: S3 Object Ownership es una configuración de nivel de bucket de Amazon S3 que puede usar para controlar la propiedad de los objetos que se cargan en el bucket y para habilitar o deshabilitar las listas de control de acceso (ACL). De forma predeterminada, Object Ownership se establece en la configuración impuesta por el propietario del bucket y todas las ACL están deshabilitadas. Cuando las ACL están deshabilitadas, el propietario del bucket posee todos los objetos del bucket y administra el acceso a los datos de forma exclusiva mediante políticas de administración de acceso. Cuando se establece la opción impuesta por el propietario del bucket, el acceso se administra con la política del bucket, lo que elimina la necesidad de que los usuarios asuman un rol.

  • Asumir un rol para compartir los archivos de registro: si no ha elegido la configuración impuesta por el propietario del bucket, los usuarios deberán asumir un rol para acceder a los archivos de registro de su bucket de S3.

Comparta archivos de registros entre cuentas asumiendo un rol

nota

Esta sección se aplica únicamente a los buckets de Amazon S3 que no utilizan la configuración impuesta por el propietario del bucket.

En esta sección, se explica cómo compartir archivos de registro de CloudTrail entre varias Cuentas de AWS mediante la adopción de un rol y se describen los escenarios para compartir archivos de registro.

  • Escenario 1: conceder acceso de solo lectura a las cuentas que han generado los archivos de registro ubicados en el bucket de Amazon S3.

  • Escenario 2: conceder acceso a todos los archivos de registro de su bucket de Amazon S3 a una cuenta de terceros que pueda analizar los archivos de registro por usted.

Para conceder acceso de solo lectura a los archivos de registro del bucket de Amazon S3
  1. Cree un rol de IAM para cada cuenta con la que desea compartir archivos de registro. Debe ser administrador para conceder el permiso.

    Al crear el rol, haga lo siguiente:

    • Elija la opción Otra Cuenta de AWS.

    • Escriba el ID de 12 dígitos de la cuenta para conceder acceso.

    • Marque la casilla Require MFA si desea que el usuario proporcione autenticación multifactor antes de asumir el rol.

    • Elija la política AmazonS3ReadOnlyAccess.

      nota

      De forma predeterminada, la política AmazonS3ReadOnlyAccess garantiza la recuperación y enumera los derechos a todos los buckets de Amazon S3 en su cuenta.

    A fin de obtener más información sobre la administración de permisos para los roles de IAM, consulte la sección roles de IAM en la Guía del usuario de IAM.

  2. Cree una política de acceso que conceda acceso de solo lectura a la cuenta con la que quiere compartir los archivos de registro.

  3. Indique a cada cuenta que asuma un rol para recuperar los archivos de registro.

Conceder acceso de solo lectura a los archivos de registro con una cuenta de terceros
  1. Cree un rol de IAM para la cuenta de terceros con la que desea compartir archivos de registro. Debe ser administrador para conceder el permiso.

    Al crear el rol, haga lo siguiente:

    • Elija la opción Otra Cuenta de AWS.

    • Escriba el ID de 12 dígitos de la cuenta para conceder acceso.

    • Escriba un ID externo que proporcione más control sobre quién puede asumir el rol. Para obtener más información, consulte Cómo utilizar un ID externo al conceder acceso a los recursos de AWS a terceros en la Guía del usuario de IAM.

    • Elija la política AmazonS3ReadOnlyAccess.

      nota

      De forma predeterminada, la política AmazonS3ReadOnlyAccess garantiza la recuperación y enumera los derechos a todos los buckets de Amazon S3 en su cuenta.

  2. Cree una política de acceso que conceda acceso de solo lectura a la cuenta de terceros con la que quiere compartir los archivos de registro.

  3. Indique a la cuenta de terceros que asuma el rol de recuperar los archivos de registro.

En las secciones siguientes, se proporcionan más detalles sobre estos pasos.

Crear una política de acceso para conceder acceso a las cuentas de su propiedad

Como propietario del bucket de Amazon S3, tiene control completo sobre el bucket de Amazon S3 en el que CloudTrail escribe archivos de registro para las demás cuentas. Debe compartir los archivos de registro de cada unidad de negocio con la unidad de negocio que los creó. pero no desea que una unidad pueda leer los archivos de registro de las demás unidades.

Por ejemplo, para compartir archivos de registros de la cuenta B con la cuenta B, pero no con la cuenta C, debe crear un nuevo rol de IAM en su cuenta que especifique que la cuenta B es de confianza. Esta política de confianza de rol especifica que se puede confiar en la Cuenta B para que asuma el rol creado por su cuenta y debe ser similar al siguiente ejemplo. La política de confianza se crea automáticamente si crea el rol mediante la consola. Si utiliza el SDK para crear el rol, debe indicar la política de confianza como un parámetro de la API CreateRole. Si utiliza la CLI para crear el rol, debe especificar la política de confianza en el comando de CLI create-role.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::account-B-id:root" }, "Action": "sts:AssumeRole" } ] }

Asimismo, debe crear una política de acceso para especificar que la Cuenta B pueda leer desde solo la ubicación en la que la Cuenta B escribió sus archivos de registro. La política de acceso debe tener un aspecto similar al siguiente. Tenga en cuenta que el recurso de ARN incluye el ID de cuenta de doce dígitos de la cuenta B y el prefijo especificado, si hay alguno, cuando activó CloudTrail para la cuenta B durante el proceso de agregación. Para obtener más información sobre cómo especificar un prefijo, consulte Crea registros de seguimiento en cuentas adicionales.

importante

Debe asegurarse de que el prefijo de la política de acceso sea exactamente igual al prefijo especificado cuando activó CloudTrail para la cuenta B. En caso contrario, debe editar la política de acceso del rol de IAM de su cuenta a fin de incorporar el prefijo real de la cuenta B. Si el prefijo de la política de acceso del rol no es exactamente el mismo que el prefijo que especificó cuando activó CloudTrail en la cuenta B, esta no tendrá acceso a sus archivos de registros.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:Get*", "s3:List*" ], "Resource": "arn:aws:s3:::bucket-name/prefix/AWSLogs/account-B-id/*" }, { "Effect": "Allow", "Action": [ "s3:Get*", "s3:List*" ], "Resource": "arn:aws:s3:::bucket-name" } ] }

Utilice el proceso anterior para todas las demás cuentas adicionales.

Una vez creados los roles de cada cuenta y especificadas las políticas de acceso y de confianza correspondientes y cuando el administrador haya concedido acceso a un usuario de IAM de cada cuenta, un usuario de IAM de las cuentas B o C puede adoptar el rol mediante programación.

Para obtener más información, consulte Adopción de un rol.

Crear una política de acceso para conceder acceso a un tercero

Debe crear un rol de IAM independiente para una cuenta de terceros. Al crear el rol, AWS crea automáticamente la relación de confianza, que especifica que se puede confiar en la cuenta de terceros para que asuma el rol. La política de acceso del rol especifica qué acciones puede realizar esa cuenta. Para obtener más información acerca de cómo crear roles, consulte Creación de un rol de IAM.

Por ejemplo, la relación de confianza creada por AWS especifica que se confía en que la cuenta de terceros (cuenta Z en este ejemplo) asuma el rol que usted creó. A continuación, se muestra un ejemplo de una política de confianza:

{ "Version": "2012-10-17", "Statement": [{ "Sid": "", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::account-Z-id:root"}, "Action": "sts:AssumeRole" }] }

Si ha especificado un ID externo al crear el rol para la cuenta de terceros, su política de acceso contiene un elemento Condition adicional que comprueba el ID exclusivo asignado por esa cuenta. La prueba se realiza cuando se asume el rol. La siguiente política de acceso de ejemplo contiene un elemento Condition.

Para obtener más información, consulte Cómo utilizar un ID externo al conceder acceso a los recursos de AWS a terceros en la Guía del usuario de IAM.

{ "Version": "2012-10-17", "Statement": [{ "Sid": "", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::account-Z-id:root"}, "Action": "sts:AssumeRole", "Condition": {"StringEquals": {"sts:ExternalId": "external-ID-issued-by-account-Z"}} }] }

También debe crear una política de acceso para su cuenta para especificar que la cuenta de terceros pueda leer todos los registros del bucket de Amazon S3. La política de acceso tendrá un aspecto similar a la del siguiente ejemplo. El carácter comodín (*) al final del valor de Resource indica que la cuenta de terceros puede tener acceso a cualquier archivo de registro del bucket de S3 para el que se le ha concedido acceso.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:Get*", "s3:List*" ], "Resource": "arn:aws:s3:::bucket-name/*" }, { "Effect": "Allow", "Action": [ "s3:Get*", "s3:List*" ], "Resource": "arn:aws:s3:::bucket-name" } ] }

Después de crear un rol para la cuenta de terceros y especificar la relación de confianza y la política de acceso correspondientes, un usuario de IAM de la cuenta de terceros debe adoptar el rol mediante programación a fin de poder leer archivos de registro del bucket. Para obtener más información, consulte Adopción de un rol.

Adopción de un rol

Debe designar un usuario de IAM independiente para que asuma cada rol que cree en cada cuenta. A continuación, debe asegurarse de que cada usuario de IAM tenga los permisos adecuados.

Usuarios y roles de IAM

Después de crear los roles y las políticas necesarias, debe designar un usuario de IAM en cada una de las cuentas con las que desea compartir archivos. Cada usuario de IAM asume mediante programación el rol apropiado para acceder a los archivos de registro. Cuando un usuario asume un rol, AWS devuelve las credenciales de seguridad temporales a ese usuario. A continuación, pueden hacer solicitudes para enumerar, recuperar, copiar o eliminar archivos de registro en función de los permisos concedidos por la política de acceso asociada al rol.

Para obtener más información acerca de cómo trabajar con las identidades de IAM, consulte Identidades de IAM (usuarios, grupos de usuarios y roles).

La principal diferencia en la política de acceso que crea para cada rol de IAM en cada escenario.

Creación de políticas de permisos para usuarios de IAM

Con el fin de llevar a cabo las acciones que permiten un rol, el usuario de IAM debe tener permiso para llamar a la API de AWS STS AssumeRole. Debe editar la política para cada usuario con el fin concederles los permisos pertinentes. Para ello, debe establecer un elemento de recurso en la política que vincule al usuario de IAM. En el ejemplo siguiente, se muestra una política para un usuario de IAM en otra cuenta que permite a este usuario adoptar un rol denominado Test creado anteriormente por la cuenta A.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["sts:AssumeRole"], "Resource": "arn:aws:iam::account-A-id:role/Test" } ] }
Para editar una política administrada por el cliente (consola)
  1. Inicie sesión en la AWS Management Console y abra la consola de IAM en https://console.aws.amazon.com/iam/.

  2. En el panel de navegación, seleccione Policies (Políticas).

  3. En la lista de políticas, elija el nombre de la política que desea editar. Puede utilizar el cuadro de búsqueda para filtrar la lista de políticas.

  4. Seleccione la pestaña Permisos y, a continuación, Editar.

  5. Haga una de las acciones siguientes:

    • Seleccione la opción Visual para cambiar la política sin conocer la sintaxis JSON. Puede realizar cambios en el servicio, acciones, recursos o condiciones opcionales para cada bloque de permisos en su política. También puede importar una política para añadir permisos adicionales en la parte inferior de la política. Cuando haya terminado con los cambios, seleccione Siguiente para continuar.

    • Seleccione la opción JSON para modificar la política escribiendo o pegando texto en el cuadro de texto JSON. También puede importar una política para añadir permisos adicionales en la parte inferior de la política. Resuelva las advertencias de seguridad, errores o advertencias generales generadas durante la validación de política y luego elija Next.

      nota

      Puede alternar entre las opciones Visual y JSON del editor en todo momento. No obstante, si realiza cambios o selecciona Siguiente en la opción Visual del editor, es posible que IAM reestructure la política, con el fin de optimizarla para el editor visual. Para obtener más información, consulte Reestructuración de política en la Guía del usuario de IAM.

  6. En la página Revisar y guardar, revise los Permisos definidos en esta política y, a continuación, seleccione Guardar cambios para guardar su trabajo.

  7. Si la política administrada ya tiene el máximo de cinco versiones, al seleccionar Guardar cambios aparecerá un cuadro de diálogo. Para guardar la nueva versión, se elimina la versión no predeterminada más antigua de la política y se sustituye con esta nueva versión. También puede configurar la nueva versión como versión predeterminada de la política.

    Seleccione Guardar cambios para guardar la nueva versión de la política.

Llamada a AssumeRole

Un usuario puede asumir un rol creando una aplicación que llama a la API AssumeRole de AWS STS y pasa el nombre de la sesión del rol, el número de recurso de Amazon (ARN) del rol a asumir y un ID externo opcional. El nombre de la sesión del rol lo define la cuenta que creó el rol a asumir. El identificador externo, en su caso, lo define la cuenta de terceros y se pasa a la cuenta propietaria para su inclusión durante la creación del rol. Para obtener más información, consulte Cómo utilizar un ID externo al conceder acceso a los recursos de AWS a terceros en la Guía del usuario de IAM. Puede recuperar el ARN de la cuenta A sal abrir la consola de IAM.

Buscar un valor de ARN en la cuenta A con la consola de IAM
  1. Elija Roles

  2. Seleccione el rol que desea examinar.

  3. Busque Role ARN en la sección Summary.

La API AssumeRole devuelve credenciales temporales que se utilizan para acceder a los recursos de la cuenta propietaria. En este ejemplo, los recursos a los que quiere acceder son el bucket de Amazon S3 y los archivos de registro que este contiene. Las credenciales provisionales tienen los permisos que definió en la política de acceso del rol.

El ejemplo siguiente con Python (que utiliza AWS SDK for Python (Boto)) muestra cómo llamar a AssumeRole y cómo utilizar las credenciales de seguridad provisionales que se devuelven para mostrar todos los buckets de Amazon S3 bajo control de la cuenta A.

def list_buckets_from_assumed_role(user_key, assume_role_arn, session_name): """ Assumes a role that grants permission to list the Amazon S3 buckets in the account. Uses the temporary credentials from the role to list the buckets that are owned by the assumed role's account. :param user_key: The access key of a user that has permission to assume the role. :param assume_role_arn: The Amazon Resource Name (ARN) of the role that grants access to list the other account's buckets. :param session_name: The name of the STS session. """ sts_client = boto3.client( "sts", aws_access_key_id=user_key.id, aws_secret_access_key=user_key.secret ) try: response = sts_client.assume_role( RoleArn=assume_role_arn, RoleSessionName=session_name ) temp_credentials = response["Credentials"] print(f"Assumed role {assume_role_arn} and got temporary credentials.") except ClientError as error: print( f"Couldn't assume role {assume_role_arn}. Here's why: " f"{error.response['Error']['Message']}" ) raise # Create an S3 resource that can access the account with the temporary credentials. s3_resource = boto3.resource( "s3", aws_access_key_id=temp_credentials["AccessKeyId"], aws_secret_access_key=temp_credentials["SecretAccessKey"], aws_session_token=temp_credentials["SessionToken"], ) print(f"Listing buckets for the assumed role's account:") try: for bucket in s3_resource.buckets.all(): print(bucket.name) except ClientError as error: print( f"Couldn't list buckets for the account. Here's why: " f"{error.response['Error']['Message']}" ) raise

Dejar de compartir archivos de registros de CloudTrail entre cuentas de AWS

A fin de dejar de compartir archivos de registro con otra Cuenta de AWS, tiene que eliminar el rol que creó para esa cuenta. Para obtener información acerca de cómo eliminar un rol, consulte Eliminación de roles o perfiles de instancia.