Crear una integración para registrar eventos externos a AWS con la AWS CLI - AWS CloudTrail

Crear una integración para registrar eventos externos a AWS con la AWS CLI

En esta sección se describe cómo puede usar la AWS CLI para crear una integración de CloudTrail Lake para registrar eventos externos a AWS.

En la AWS CLI, puede crear una integración en cuatro comandos (tres si ya dispone de un almacén de datos de eventos que cumple con los criterios). Los almacenes de datos de eventos que utilice como destinos de una integración deben ser para una sola región y una sola cuenta; no pueden ser multirregionales, no pueden registrar eventos para organizaciones en AWS Organizations y solo pueden incluir eventos de actividad. El tipo de evento en la consola debe ser Events from integrations (Eventos de integraciones). En la API, el valor eventCategory debe ser ActivityAuditLog. Para obtener más información acerca de las integraciones, consulte Creación de una integración con un origen de eventos externo a AWS.

  1. Ejecute create-event-data-store para crear un almacén de datos de eventos si aún no tiene uno o varios almacenes de datos de eventos que pueda utilizar para la integración.

    El siguiente comando de la AWS CLI de ejemplo crea un almacén de datos de eventos que registra eventos externos a AWS. Para los eventos de actividad, el valor del selector de campo eventCategory es ActivityAuditLog. El almacén de datos de eventos tiene establecido un periodo de retención de 90 días. El almacén de datos de eventos recopila eventos de todas las regiones de forma predeterminada, pero como recopila eventos que no son de AWS, configúrelo para una sola región mediante la opción --no-multi-region-enabled. La protección contra la terminación está habilitada de forma predeterminada y el almacén de datos de eventos no recopila eventos para cuentas de una organización.

    aws cloudtrail create-event-data-store \ --name my-event-data-store \ --no-multi-region-enabled \ --retention-period 90 \ --advanced-event-selectors '[ { "Name": "Select all external events", "FieldSelectors": [ { "Field": "eventCategory", "Equals": ["ActivityAuditLog"] } ] } ]'

    A continuación, se muestra un ejemplo de respuesta.

    { "EventDataStoreArn": "arn:aws:cloudtrail:us-east-1:123456789012:eventdatastore/EXAMPLEf852-4e8f-8bd1-bcf6cEXAMPLE", "Name": "my-event-data-store", "AdvancedEventSelectors": [ { "Name": "Select all external events", "FieldSelectors": [ { "Field": "eventCategory", "Equals": [ "ActivityAuditLog" ] } ] } ], "MultiRegionEnabled": true, "OrganizationEnabled": false, "BillingMode": "EXTENDABLE_RETENTION_PRICING", "RetentionPeriod": 90, "TerminationProtectionEnabled": true, "CreatedTimestamp": "2023-10-27T10:55:55.384000-04:00", "UpdatedTimestamp": "2023-10-27T10:57:05.549000-04:00" }

    Necesitará el ID del almacén de datos de eventos (el sufijo del ARN o EXAMPLEf852-4e8f-8bd1-bcf6cEXAMPLE en el ejemplo de respuesta anterior) para continuar con el siguiente paso y crear el canal.

  2. Ejecute el comando create-channel para crear un canal que permita a una aplicación asociada o de origen enviar eventos a un almacén de datos de eventos en CloudTrail.

    Un canal tiene los siguientes componentes:

    Origen

    CloudTrail utiliza esta información para determinar los socios que envían datos de eventos a CloudTrail en su nombre. Se requiere un origen, que puede ser Custom para todos los eventos válidos que no son de AWS, o el nombre de un origen de eventos asociado. Se permite un máximo de un canal por origen.

    Para obtener más información sobre los valores Source para socios disponibles, consulte Información adicional acerca de los socios de integración.

    Estado de la ingesta

    El estado del canal muestra cuándo se recibieron los últimos eventos de un origen de canal.

    Destinos

    Los destinos son los almacenes de datos de eventos de CloudTrail Lake que reciben los eventos del canal. Puede cambiar los almacenes de datos de eventos de destino de un canal.

    Para dejar de recibir eventos de un origen, elimine el canal.

    Necesita el ID de al menos un almacén de datos de eventos de destino para ejecutar este comando. El tipo de destino válido es EVENT_DATA_STORE. Puede enviar los eventos ingeridos a más de un almacén de datos de eventos. El siguiente comando de ejemplo crea un canal que envía eventos a dos almacenes de datos de eventos, representados por sus ID en el atributo Location del parámetro --destinations. Los parámetros --destinations, --name y --source son obligatorios. Para ingerir los eventos de un socio de CloudTrail, especifique el nombre del socio como el valor de --source. Para ingerir los eventos de sus aplicaciones externas a AWS, especifique Custom como el valor de --source.

    aws cloudtrail create-channel \ --region us-east-1 \ --destinations '[{"Type": "EVENT_DATA_STORE", "Location": "EXAMPLEf852-4e8f-8bd1-bcf6cEXAMPLE"}, {"Type": "EVENT_DATA_STORE", "Location": "EXAMPLEg922-5n2l-3vz1- apqw8EXAMPLE"}]' --name my-partner-channel \ --source $partnerSourceName \

    En la respuesta al comando create-channel, copie el ARN del canal nuevo. Necesitará el ARN para ejecutar los comandos put-resource-policy y put-audit-events en los siguientes pasos.

  3. Ejecute el comando put-resource-policy para asociar una política de recursos al canal. Las políticas de recursos son documentos de política JSON que especifican qué acciones puede realizar una entidad principal especificada en el recurso y bajo qué condiciones. Las cuentas definidas como entidades principales en la política de recursos del canal pueden llamar a la API PutAuditEvents para enviar eventos.

    nota

    Si no se crea una política de recursos para el canal, solo el propietario del canal puede llamar a la API PutAuditEvents del canal.

    La información necesaria para la política está determinada por el tipo de integración.

    • Para una integración directa, CloudTrail exige que la política contenga los ID de la cuenta de AWS del socio y requiere que ingrese el ID externo único proporcionado por el socio. CloudTrail agrega de forma automática los ID de la cuenta de AWS del socio a la política de recursos cuando se crea una integración mediante la consola de CloudTrail. Consulte la documentación de socios para obtener información sobre cómo obtener los números de cuenta de AWS necesarios para la política.

    • Para la integración de una solución, debe especificar al menos un ID de cuenta de AWS como entidad principal y, si lo desea, puede ingresar un ID externo para evitar un suplente confuso.

    A continuación, se enumeran los requisitos de la política de recursos:

    • El ARN del recurso definido en la política debe coincidir con el ARN del canal al que está asociada la política.

    • La política contiene solo una acción: cloudtrail-data:PutAuditEvents.

    • La política contiene como mínimo una instrucción. La política puede tener como máximo 20 instrucciones.

    • Cada instrucción contiene como mínimo una entidad principal. Una instrucción puede tener como máximo 50 entidades principales.

    aws cloudtrail put-resource-policy \ --resource-arn "channelARN" \ --policy "{ "Version": "2012-10-17", "Statement": [ { "Sid": "ChannelPolicy", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:root", "arn:aws:iam::444455556666:root", "arn:aws:iam::123456789012:root" ] }, "Action": "cloudtrail-data:PutAuditEvents", "Resource": "arn:aws:cloudtrail:us-east-1:777788889999:channel/EXAMPLE-80b5-40a7-ae65-6e099392355b", "Condition": { "StringEquals": { "cloudtrail:ExternalId": "UniqueExternalIDFromPartner" } } } ] }"

    Para obtener más información sobre las políticas de recursos, consulte AWS CloudTrailEjemplos de políticas basadas en recursos de .

  4. Ejecute la API PutAuditEvents para ingerir los eventos de actividad en CloudTrail. Necesitará la carga útil de los eventos que desea que agregue CloudTrail. Asegúrese de que no haya información confidencial o de identificación personal en la carga útil del evento antes de incorporarla en CloudTrail. Tenga en cuenta que la API PutAuditEvents utiliza el punto de conexión cloudtrail-data de la CLI, no el punto de conexión cloudtrail.

    Los siguientes ejemplos muestran cómo utilizar el comando put-audit-events de la CLI. Los parámetros --audit-events y --channel-arn son obligatorios. El parámetro --external-id es obligatorio si se define un ID externo en la política de recursos. Necesita el ARN del canal que creó en el paso anterior. El valor de --audit-events es una matriz JSON de objetos de eventos. --audit-events incluye un ID obligatorio del evento, la carga útil requerida del evento como el valor de EventData y una suma de comprobación opcional para ayudar a validar la integridad del evento una vez ingerido en CloudTrail.

    aws cloudtrail-data put-audit-events \ --channel-arn $ChannelArn \ --external-id $UniqueExternalIDFromPartner \ --audit-events \ id="event_ID",eventData='"{event_payload}"' \ id="event_ID",eventData='"{event_payload}"',eventDataChecksum="optional_checksum"

    A continuación, se muestra un comando de ejemplo con dos ejemplos de eventos.

    aws cloudtrail-data put-audit-events \ --channel-arn arn:aws:cloudtrail:us-east-1:123456789012:channel/EXAMPLE8-0558-4f7e-a06a-43969EXAMPLE \ --external-id UniqueExternalIDFromPartner \ --audit-events \ id="EXAMPLE3-0f1f-4a85-9664-d50a3EXAMPLE",eventData='"{\"eventVersion\":\0.01\",\"eventSource\":\"custom1.domain.com\", ... \}"' \ id="EXAMPLE7-a999-486d-b241-b33a1EXAMPLE",eventData='"{\"eventVersion\":\0.02\",\"eventSource\":\"custom2.domain.com\", ... \}"',eventDataChecksum="EXAMPLE6e7dd61f3ead...93a691d8EXAMPLE"

    El siguiente comando de ejemplo agrega el parámetro --cli-input-json para especificar un archivo JSON (custom-events.json) de la carga útil del evento.

    aws cloudtrail-data put-audit-events --channel-arn $channelArn --external-id $UniqueExternalIDFromPartner --cli-input-json file://custom-events.json --region us-east-1

    A continuación, se presenta el contenido de muestra del archivo JSON de ejemplo, custom-events.json.

    { "auditEvents": [ { "eventData": "{\"version\":\"eventData.version\",\"UID\":\"UID\", \"userIdentity\":{\"type\":\"CustomUserIdentity\",\"principalId\":\"principalId\", \"details\":{\"key\":\"value\"}},\"eventTime\":\"2021-10-27T12:13:14Z\",\"eventName\":\"eventName\", \"userAgent\":\"userAgent\",\"eventSource\":\"eventSource\", \"requestParameters\":{\"key\":\"value\"},\"responseElements\":{\"key\":\"value\"}, \"additionalEventData\":{\"key\":\"value\"}, \"sourceIPAddress\":\"12.34.56.78\",\"recipientAccountId\":\"152089810396\"}", "id": "1" } ] }

Puede comprobar que la integración funciona y que CloudTrail está ingiriendo eventos del origen de forma correcta mediante la ejecución del comando get-channel. El resultado de get-channel muestra la marca de tiempo más reciente en la que CloudTrail recibió eventos.

aws cloudtrail get-channel --channel arn:aws:cloudtrail:us-east-1:01234567890:channel/EXAMPLE8-0558-4f7e-a06a-43969EXAMPLE

(Opcional) Cálculo de un valor de la suma de comprobación

La suma de comprobación que se especifica como valor de EventDataChecksum en una solicitud PutAuditEvents ayuda a verificar que CloudTrail recibe el evento que coincide con la suma de comprobación y ayuda a verificar la integridad de los eventos. El valor de la suma de comprobación es un algoritmo base64-SHA256 que se calcula mediante la ejecución del siguiente comando.

printf %s "{"eventData": "{\"version\":\"eventData.version\",\"UID\":\"UID\", \"userIdentity\":{\"type\":\"CustomUserIdentity\",\"principalId\":\"principalId\", \"details\":{\"key\":\"value\"}},\"eventTime\":\"2021-10-27T12:13:14Z\",\"eventName\":\"eventName\", \"userAgent\":\"userAgent\",\"eventSource\":\"eventSource\", \"requestParameters\":{\"key\":\"value\"},\"responseElements\":{\"key\":\"value\"}, \"additionalEventData\":{\"key\":\"value\"}, \"sourceIPAddress\":\"source_IP_address\", \"recipientAccountId\":\"recipient_account_ID\"}", "id": "1"}" \ | openssl dgst -binary -sha256 | base64

El comando devuelve la suma de comprobación. A continuación se muestra un ejemplo.

EXAMPLEDHjkI8iehvCUCWTIAbNYkOgO/t0YNw+7rrQE=

El valor de la suma de comprobación se convierte en el valor de EventDataChecksum en la solicitud PutAuditEvents. Si la suma de comprobación no coincide con la del evento proporcionado, CloudTrail rechaza el evento y se produce un error InvalidChecksum.