

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.

# Configuración de una nueva suscripción entre cuentas
<a name="Cross-Account-Log_Subscription-New-Account"></a>

Siga los pasos de estas secciones para configurar una nueva suscripción de registro entre cuentas.

**Topics**
+ [Paso 1: crear un destino](CreateDestination-Account.md)
+ [Paso 2: (solo si se utiliza una organización) crear un rol de IAM](CreateSubscriptionFilter-IAMrole-Account.md)
+ [Paso 3: crear una política de filtrado de suscripciones a nivel de cuenta](CreateSubscriptionFilter-Account.md)
+ [Validación del flujo de eventos de registro](ValidateLogEventFlow-Account.md)
+ [Modificación de la suscripción al destino en tiempo de ejecución](ModifyDestinationMembership-Account.md)

# Paso 1: crear un destino
<a name="CreateDestination-Account"></a>

**importante**  
Todos los pasos de este procedimiento deben realizarse en la cuenta del destinatario de los datos de registro.

En este ejemplo, la cuenta receptora de los datos de registro tiene un identificador de AWS cuenta de 10000 9999, mientras que el identificador de la AWS cuenta del remitente de los datos de registro es 1111.

 En este ejemplo, se crea un destino mediante una transmisión de Amazon Kinesis Data Streams RecipientStream llamada y una función que CloudWatch permite a Logs escribir datos en ella. 

Cuando se crea el destino, CloudWatch Logs envía un mensaje de prueba al destino en nombre de la cuenta del destinatario. Cuando el filtro de suscripciones se active más adelante, CloudWatch Logs envía los eventos de registro al destino en nombre de la cuenta de origen.

**Para crear un destino**

1. En la cuenta del destinatario, cree una transmisión de destino en Amazon Kinesis Data Streams. En el símbolo del sistema, escriba:

   ```
   aws kinesis create-stream --stream-name "RecipientStream" --shard-count 1
   ```

1. Espere hasta que el flujo de se active. **Puede utilizar el comando **aws kinesis describe-stream** para comprobar la. StreamDescription StreamStatus**propiedad. Además, tome nota del valor **StreamDescription.streamArn porque** lo pasará a CloudWatch Logs más adelante:

   ```
   aws kinesis describe-stream --stream-name "RecipientStream"
   {
     "StreamDescription": {
       "StreamStatus": "ACTIVE",
       "StreamName": "RecipientStream",
       "StreamARN": "arn:aws:kinesis:us-east-1:999999999999:stream/RecipientStream",
       "Shards": [
         {
           "ShardId": "shardId-000000000000",
           "HashKeyRange": {
             "EndingHashKey": "34028236692093846346337460743176EXAMPLE",
             "StartingHashKey": "0"
           },
           "SequenceNumberRange": {
             "StartingSequenceNumber": "4955113521868881845667950383198145878459135270218EXAMPLE"
           }
         }
       ]
     }
   }
   ```

   El flujo puede tardar un minuto o dos en mostrarse en el estado activo.

1. Crea el rol de IAM que otorga a CloudWatch Logs el permiso para colocar datos en tu transmisión. En primer lugar, tendrás que crear una política de confianza en un archivo **\$1/ TrustPolicyFor** CWL.json. Utilice un editor de texto para crear este archivo de política; no utilice la consola de IAM.

   Esta política incluye una clave de contexto de condición global `aws:SourceArn` que especifica la `sourceAccountId` para ayudar a prevenir el problema de seguridad de suplente confuso. Si aún no conoce el ID de cuenta de origen en la primera llamada, le recomendamos que coloque el ARN de destino en el campo ARN de origen. En las llamadas posteriores, debe configurar el ARN de origen para que sea el ARN de origen real que recopiló desde la primera llamada. Para obtener más información, consulte [Prevención del suplente confuso](Subscriptions-confused-deputy.md). 

   ```
   {
       "Statement": {
           "Effect": "Allow",
           "Principal": {
               "Service": "logs.amazonaws.com"
           },
           "Condition": {
               "StringLike": {
                   "aws:SourceArn": [
                       "arn:aws:logs:region:sourceAccountId:*",
                       "arn:aws:logs:region:recipientAccountId:*"
                   ]
               }
           },
           "Action": "sts:AssumeRole"
       }
   }
   ```

1. Ejecute el comando **aws iam create-role** para crear el rol de IAM y especifique el archivo de política de confianza. Toma nota del valor Role.Arn devuelto porque también se pasará a Logs más adelante: CloudWatch 

   ```
   aws iam create-role \
   --role-name CWLtoKinesisRole \
   --assume-role-policy-document file://~/TrustPolicyForCWL.json
   
   {
       "Role": {
           "AssumeRolePolicyDocument": {
               "Statement": {
                   "Action": "sts:AssumeRole",
                   "Effect": "Allow",
                   "Condition": {
                       "StringLike": {
                           "aws:SourceArn": [
                               "arn:aws:logs:region:sourceAccountId:*",
                               "arn:aws:logs:region:recipientAccountId:*"
                           ]
                       }
                   },
                   "Principal": {
                       "Service": "logs.amazonaws.com"
                   }
               }
           },
           "RoleId": "AAOIIAH450GAB4HC5F431",
           "CreateDate": "2023-05-29T13:46:29.431Z",
           "RoleName": "CWLtoKinesisRole",
           "Path": "/",
           "Arn": "arn:aws:iam::999999999999:role/CWLtoKinesisRole"
       }
   }
   ```

1. Crea una política de permisos para definir qué acciones puede realizar CloudWatch Logs en tu cuenta. Primero, usa un editor de texto para crear una política de permisos en un archivo **\$1/ PermissionsFor CWL.json:**

   ```
   {
     "Statement": [
       {
         "Effect": "Allow",
         "Action": "kinesis:PutRecord",
         "Resource": "arn:aws:kinesis:region:999999999999:stream/RecipientStream"
       }
     ]
   }
   ```

1. Asocie la política de permisos al rol mediante el comando **aws** iam: put-role-policy

   ```
   aws iam put-role-policy \
       --role-name CWLtoKinesisRole \
       --policy-name Permissions-Policy-For-CWL \
       --policy-document file://~/PermissionsForCWL.json
   ```

1. Una vez que la transmisión esté en estado activo y haya creado el rol de IAM, puede crear el destino de los CloudWatch registros.

   1. Este paso no asocia una política de acceso a su destino y solo es el primer paso de los dos que completan la creación de un destino. Anote el valor de **DestinationArn** que se devuelve en la carga:

      ```
      aws logs put-destination \
          --destination-name "testDestination" \
          --target-arn "arn:aws:kinesis:region:999999999999:stream/RecipientStream" \
          --role-arn "arn:aws:iam::999999999999:role/CWLtoKinesisRole"
      
      {
        "DestinationName" : "testDestination",
        "RoleArn" : "arn:aws:iam::999999999999:role/CWLtoKinesisRole",
        "DestinationArn" : "arn:aws:logs:us-east-1:999999999999:destination:testDestination",
        "TargetArn" : "arn:aws:kinesis:us-east-1:999999999999:stream/RecipientStream"
      }
      ```

   1. Una vez que se haya completado el paso 7a, en la cuenta del destinatario de los datos de registro, asocie una política de acceso con el destino. Esta política debe especificar los **registros:** la PutSubscriptionFilter acción y otorga permiso a la cuenta del remitente para acceder al destino.

      La política concede permiso a la AWS cuenta que envía los registros. Puede especificar solo esta cuenta en la política o, si la cuenta de remitente es miembro de una organización, la política puede especificar el ID de organización de la organización. De esta forma, puede crear una sola política para permitir que varias cuentas de una organización envíen registros a esta cuenta de destino.

      Utilice un editor de texto para crear un archivo denominado `~/AccessPolicy.json` con una de las siguientes declaraciones de política.

      Este primer ejemplo de política permite a todas las cuentas de la organización que tienen un ID de `o-1234567890` enviar registros a la cuenta de destinatario.

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Sid": "",
                  "Effect": "Allow",
                  "Principal": "*",
                  "Action": [
                      "logs:PutSubscriptionFilter",
                      "logs:PutAccountPolicy"
                  ],
                  "Resource": "arn:aws:logs:us-east-1:999999999999:destination:testDestination",
                  "Condition": {
                      "StringEquals": {
                          "aws:PrincipalOrgID": [
                              "o-1234567890"
                          ]
                      }
                  }
              }
          ]
      }
      ```

------

      En el siguiente ejemplo, solo se permite que la cuenta del remitente de los datos de registro (111111111111) envíe los registros a la cuenta del destinatario de los datos de registro.

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Sid": "",
                  "Effect": "Allow",
                  "Principal": {
                      "AWS": "111111111111"
                  },
                  "Action": [
                      "logs:PutSubscriptionFilter",
                      "logs:PutAccountPolicy"
                  ],
                  "Resource": "arn:aws:logs:us-east-1:999999999999:destination:testDestination"
              }
          ]
      }
      ```

------

   1. Adjunte la política que creó en el paso anterior al destino.

      ```
      aws logs put-destination-policy \
          --destination-name "testDestination" \
          --access-policy file://~/AccessPolicy.json
      ```

      Esta política de acceso permite a los usuarios de la AWS cuenta con el ID 1111 llamar al destino con el ARN arn:aws:logs **PutSubscriptionFilter**::55559999:Destination:TestDestination. *region* Se PutSubscriptionFilter rechazará cualquier intento de otro usuario de llamar a este destino.

      Para validar los privilegios de un usuario con una política de acceso, consulte [Uso del validador de políticas](https://docs.aws.amazon.com/IAM/latest/UserGuide/policies_policy-validator.html) en la *Guía del usuario de IAM*.

Cuando hayas terminado, si los estás utilizando AWS Organizations para tus permisos multicuenta, sigue los pasos que se indican. [Paso 2: (solo si se utiliza una organización) crear un rol de IAM](CreateSubscriptionFilter-IAMrole-Account.md) Si está concediendo permisos directamente a la otra cuenta en lugar de utilizar Organizations, puede omitir ese paso y continuar con [Paso 3: crear una política de filtrado de suscripciones a nivel de cuenta](CreateSubscriptionFilter-Account.md).

# Paso 2: (solo si se utiliza una organización) crear un rol de IAM
<a name="CreateSubscriptionFilter-IAMrole-Account"></a>

En la sección anterior, si ha creado el destino mediante una política de acceso que otorga permisos a la organización en la que está esa cuenta `111111111111`, en lugar de conceder permisos directamente a la cuenta `111111111111`, siga los pasos de esta sección. De lo contrario, puede ir directamente a [Paso 3: crear una política de filtrado de suscripciones a nivel de cuenta](CreateSubscriptionFilter-Account.md).

Los pasos de esta sección crean un rol de IAM, que CloudWatch puede asumir y validar si la cuenta del remitente tiene permiso para crear un filtro de suscripción para el destino del destinatario. 

Realice los pasos de esta sección en la cuenta del remitente. El rol debe existir en la cuenta del remitente y usted especifica el ARN de este rol en el filtro de suscripción. En este ejemplo, la cuenta del remitente es `111111111111`.

**Para crear la función de IAM necesaria para las suscripciones de registros multicuenta, utilice AWS Organizations**

1. Cree la siguiente política de confianza en un archivo `/TrustPolicyForCWLSubscriptionFilter.json`. Utilice un editor de texto para crear este archivo de política; no utilice la consola de IAM.

   ```
   {
     "Statement": {
       "Effect": "Allow",
       "Principal": { "Service": "logs.amazonaws.com" },
       "Action": "sts:AssumeRole"
     }
   }
   ```

1. Cree un rol de IAM que utilice la política. Anote el valor `Arn` que devuelve el comando, ya que lo necesitará más tarde en este procedimiento. En este ejemplo, usaremos `CWLtoSubscriptionFilterRole` para el nombre del rol que estamos creando.

   ```
   aws iam create-role \ 
        --role-name CWLtoSubscriptionFilterRole \ 
        --assume-role-policy-document file://~/TrustPolicyForCWLSubscriptionFilter.json
   ```

1. Cree una política de permisos para definir las acciones que CloudWatch Logs puede realizar en su cuenta.

   1. En primer lugar, utilice un editor de texto para crear la siguiente política de permisos en un archivo denominado: `~/PermissionsForCWLSubscriptionFilter.json`.

      ```
      { 
          "Statement": [ 
              { 
                  "Effect": "Allow", 
                  "Action": "logs:PutLogEvents", 
                  "Resource": "arn:aws:logs:region:111111111111:log-group:LogGroupOnWhichSubscriptionFilterIsCreated:*" 
              } 
          ] 
      }
      ```

   1. Ingrese el siguiente comando para asociar la política de permisos que acaba de crear con el rol que creó en el paso 2.

      ```
      aws iam put-role-policy  
          --role-name CWLtoSubscriptionFilterRole  
          --policy-name Permissions-Policy-For-CWL-Subscription-filter 
          --policy-document file://~/PermissionsForCWLSubscriptionFilter.json
      ```

Cuando haya terminado, puede proceder a [Paso 3: crear una política de filtrado de suscripciones a nivel de cuenta](CreateSubscriptionFilter-Account.md).

# Paso 3: crear una política de filtrado de suscripciones a nivel de cuenta
<a name="CreateSubscriptionFilter-Account"></a>

Después de crear un destino, la cuenta del destinatario de los datos de registro puede compartir el ARN de destino (arn:aws:logs:us-east-1:999999999999:destination:testDestination) con otras cuentas de AWS para que puedan enviar eventos de registro al mismo destino. A continuación, los usuarios de estas otras cuentas remitentes crean un filtro de suscripción en sus grupos de registro respectivos frente a este destino. El filtro de suscripción inicia de inmediato el flujo de datos de registro en tiempo real desde el grupo de registro elegido al destino especificado.

**nota**  
Si concede permisos para el filtro de suscripción a toda una organización, tendrá que usar el ARN del rol de IAM en el que creó [Paso 2: (solo si se utiliza una organización) crear un rol de IAM](CreateSubscriptionFilter-IAMrole-Account.md).

En el siguiente ejemplo, se crea una política de filtrado de suscripciones a nivel de cuenta en una cuenta de envío. El filtro se asocia a la cuenta `111111111111` del remitente para que cada evento de registro que coincida con el filtro y los criterios de selección se envíe al destino creado anteriormente. Ese destino encapsula una transmisión llamada "». RecipientStream

El campo `selection-criteria` es opcional, pero es importante usarlo si quiere excluir de un filtro de suscripción los grupos de registro que pueden provocar una recursión infinita de registros. Para obtener más información sobre este problema y determinar qué grupos de registro excluir, consulte [Prevención de recursión de registros](Subscriptions-recursion-prevention.md). Actualmente, NOT IN es el único operador compatible para `selection-criteria`.

```
aws logs put-account-policy \
    --policy-name "CrossAccountStreamsExamplePolicy" \
    --policy-type "SUBSCRIPTION_FILTER_POLICY" \
    --policy-document '{"DestinationArn":"arn:aws:logs:region:999999999999:destination:testDestination", "FilterPattern": "", "Distribution": "Random"}' \
    --selection-criteria 'LogGroupName NOT IN ["LogGroupToExclude1", "LogGroupToExclude2"]' \
    --scope "ALL"
```

Los grupos de registro y el destino de la cuenta del remitente deben estar en la misma región de AWS . Sin embargo, el destino puede apuntar a un AWS recurso, como una transmisión de Amazon Kinesis Data Streams, que se encuentre en una región diferente.

# Validación del flujo de eventos de registro
<a name="ValidateLogEventFlow-Account"></a>

Tras crear la política de filtrado de suscripciones a nivel de cuenta, CloudWatch Logs reenvía todos los eventos de registro entrantes que coincidan con el patrón de filtrado y los criterios de selección a la transmisión encapsulada en la transmisión de destino denominada «». **RecipientStream** El propietario del destino puede comprobar que esto está ocurriendo utilizando el get-shard-iterator comando **aws kinesis** para capturar un fragmento de Amazon Kinesis Data Streams y utilizando **el comando aws kinesis** get-records para obtener algunos registros de Amazon Kinesis Data Streams:

```
aws kinesis get-shard-iterator \
      --stream-name RecipientStream \
      --shard-id shardId-000000000000 \
      --shard-iterator-type TRIM_HORIZON

{
    "ShardIterator":
    "AAAAAAAAAAFGU/kLvNggvndHq2UIFOw5PZc6F01s3e3afsSscRM70JSbjIefg2ub07nk1y6CDxYR1UoGHJNP4m4NFUetzfL+wev+e2P4djJg4L9wmXKvQYoE+rMUiFq+p4Cn3IgvqOb5dRA0yybNdRcdzvnC35KQANoHzzahKdRGb9v4scv+3vaq+f+OIK8zM5My8ID+g6rMo7UKWeI4+IWiKEXAMPLE"
}

aws kinesis get-records \
      --limit 10 \
      --shard-iterator
      "AAAAAAAAAAFGU/kLvNggvndHq2UIFOw5PZc6F01s3e3afsSscRM70JSbjIefg2ub07nk1y6CDxYR1UoGHJNP4m4NFUetzfL+wev+e2P4djJg4L9wmXKvQYoE+rMUiFq+p4Cn3IgvqOb5dRA0yybNdRcdzvnC35KQANoHzzahKdRGb9v4scv+3vaq+f+OIK8zM5My8ID+g6rMo7UKWeI4+IWiKEXAMPLE"
```

**nota**  
Puede que tenga que volver a ejecutar el `get-records` comando varias veces antes de que Amazon Kinesis Data Streams comience a devolver datos.

Debería ver una respuesta con una serie de registros de Amazon Kinesis Data Streams. El atributo de datos del registro de Amazon Kinesis Data Streams se comprime en formato gzip y, a continuación, se codifica en base64. Puede examinar los datos sin procesar desde la línea de comando utilizando el siguiente comando de Unix:

```
echo -n "<Content of Data>" | base64 -d | zcat
```

Los datos descodificados y descomprimidos en base64 se formatean como JSON con la siguiente estructura:

```
{
    "owner": "111111111111",
    "logGroup": "CloudTrail/logs",
    "logStream": "111111111111_CloudTrail/logs_us-east-1",
    "subscriptionFilters": [
        "RecipientStream"
    ],
    "messageType": "DATA_MESSAGE",
    "logEvents": [
        {
            "id": "3195310660696698337880902507980421114328961542429EXAMPLE",
            "timestamp": 1432826855000,
            "message": "{\"eventVersion\":\"1.03\",\"userIdentity\":{\"type\":\"Root\"}"
        },
        {
            "id": "3195310660696698337880902507980421114328961542429EXAMPLE",
            "timestamp": 1432826855000,
            "message": "{\"eventVersion\":\"1.03\",\"userIdentity\":{\"type\":\"Root\"}"
        },
        {
            "id": "3195310660696698337880902507980421114328961542429EXAMPLE",
            "timestamp": 1432826855000,
            "message": "{\"eventVersion\":\"1.03\",\"userIdentity\":{\"type\":\"Root\"}"
        }
    ]
}
```

Los elementos clave en la estructura de datos anterior son los siguientes:

**messageType**  
Los mensajes de datos utilizarán el tipo “DATA\$1MESSAGE”. A veces, CloudWatch los registros pueden emitir registros de Amazon Kinesis Data Streams del tipo «CONTROL\$1MESSAGE», principalmente para comprobar si se puede acceder al destino.

**owner**  
El ID de AWS cuenta de los datos de registro originarios.

**logGroup**  
El nombre del grupo de registro de los datos de registro de origen.

**logStream**  
El nombre del flujo de registros de los datos de registro de origen.

**subscriptionFilters**  
La lista de nombres de filtros de suscripción que coincide con los datos de registro de origen.

**logEvents**  
Los datos de registro reales, representados como un conjunto de registros de eventos de registro. La propiedad “id” es un identificador único de cada evento de registro.

**policyLevel**  
Es el nivel en el que se aplicó la política. “ACCOUNT\$1LEVEL\$1POLICY” es el `policyLevel` de la política de filtrado de suscripciones a nivel de cuenta.

# Modificación de la suscripción al destino en tiempo de ejecución
<a name="ModifyDestinationMembership-Account"></a>

Puede encontrar situaciones en las que tenga que añadir o eliminar la pertenencia de algunos usuarios de un destino de su propiedad. Puede utilizar el comando `put-destination-policy` en su destino con la nueva política de acceso. En el siguiente ejemplo, una cuenta **111111111111** añadida anteriormente deja de enviar más datos de registro y se habilita la cuenta **222222222222**.

1. Busca la política que está asociada actualmente con el destino **TestDestination** y anota lo siguiente: **AccessPolicy**

   ```
   aws logs describe-destinations \
       --destination-name-prefix "testDestination"
   
   {
    "Destinations": [
      {
        "DestinationName": "testDestination",
        "RoleArn": "arn:aws:iam::999999999999:role/CWLtoKinesisRole",
        "DestinationArn": "arn:aws:logs:region:999999999999:destination:testDestination",
        "TargetArn": "arn:aws:kinesis:region:999999999999:stream/RecipientStream",
        "AccessPolicy": "{\"Version\": \"2012-10-17\", \"Statement\": [{\"Sid\": \"\", \"Effect\": \"Allow\", \"Principal\": {\"AWS\": \"111111111111\"}, \"Action\": \"logs:PutSubscriptionFilter\", \"Resource\": \"arn:aws:logs:region:999999999999:destination:testDestination\"}] }"
      }
    ]
   }
   ```

1. Actualice la política para reflejar que la cuenta **111111111111** está detenida y que la cuenta **222222222222** está habilitada. Coloca esta política en el archivo **\$1/ .json: NewAccessPolicy**

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "",
               "Effect": "Allow",
               "Principal": {
                   "AWS": "222222222222"
               },
               "Action": [
                   "logs:PutSubscriptionFilter",
                   "logs:PutAccountPolicy"
               ],
               "Resource": "arn:aws:logs:us-east-1:999999999999:destination:testDestination"
           }
       ]
   }
   ```

------

1. Llame **PutDestinationPolicy**para asociar la política definida en el **NewAccessPolicyarchivo.json** con el destino:

   ```
   aws logs put-destination-policy \
   --destination-name "testDestination" \
   --access-policy file://~/NewAccessPolicy.json
   ```

   Esto finalmente deshabilitará los eventos de registro del ID de cuenta **111111111111**. Los eventos de registro del ID de cuenta **222222222222** empiezan a fluir al destino en cuanto el propietario de la cuenta **222222222222** crea un filtro de suscripción.