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.
Paso 1: crear un destino
importante
Todos los pasos de este procedimiento deben realizarse en la cuenta del destinatario de los datos de registro.
En este ejemplo, la cuenta del destinatario de los datos de registro tiene un ID de cuenta de AWS de 999999999999, mientras que el ID de cuenta de AWS del remitente de los datos de registro es 111111111111.
En este ejemplo, se crea un destino mediante un flujo de Kinesis Data Streams denominado RecipientStream y un rol que permite a Registros de CloudWatch escribir datos en él.
Cuando se crea el destino, Registros de CloudWatch envía un mensaje de prueba al destino en nombre de la cuenta de destinatario. Cuando el filtro de suscripción está activo más tarde, Registros de CloudWatch envía eventos de registro al destino en nombre de la cuenta de origen.
Para crear un destino
-
En la cuenta de destinatario, cree un flujo de destino en Kinesis Data Streams. En el símbolo del sistema, escriba:
aws kinesis create-stream --stream-name "RecipientStream" --shard-count 1
-
Espere hasta que el flujo de se active. Puede utilizar el comando aws kinesis describe-stream para comprobar la propiedad StreamDescription.StreamStatus. Además, anote el valor StreamDescription.StreamARN, ya que se transferirá a Registros de CloudWatch posteriormente:
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.
-
Cree el rol de IAM que concede el permiso necesario a Registros de CloudWatch para incluir datos en su flujo. En primer lugar, deberá crear una política de confianza en un archivo ~/TrustPolicyForCWL.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 lasourceAccountId
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.{ "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" } } -
Ejecute el comando aws iam create-role para crear el rol de IAM y especifique el archivo de política de confianza. Anote el valor Role.Arn devuelto porque también se transferirá a Registros de CloudWatch posteriormente:
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" } } -
Cree una política de permisos para definir qué acciones puede llevar a cabo Registros de CloudWatch en su cuenta. En primer lugar, utilice un editor de texto para crear una política de permisos en un archivo ~/PermissionsForCWL.json:
{ "Statement": [ { "Effect": "Allow", "Action": "kinesis:PutRecord", "Resource": "arn:aws:kinesis:
region
:999999999999:stream/RecipientStream" } ] } -
Asocie la política de permisos con el 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
-
Después de que el flujo esté en estado activo y haya creado el rol de IAM, puede crear el destino de Registros de CloudWatch.
-
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" }
-
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 la acción logs:PutSubscriptionFilter para otorgar permiso a la cuenta remitente para que acceda al destino.
La política concede permiso a la cuenta AWS que envía 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.{ "Version" : "2012-10-17", "Statement" : [ { "Sid" : "", "Effect" : "Allow", "Principal" : "*", "Action" : ["logs:PutSubscriptionFilter","logs:PutAccountPolicy"], "Resource" : "arn:aws:logs:region: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.
{ "Version" : "2012-10-17", "Statement" : [ { "Sid" : "", "Effect" : "Allow", "Principal" : { "AWS" : "111111111111" }, "Action" : ["logs:PutSubscriptionFilter","logs:PutAccountPolicy"], "Resource" : "arn:aws:logs:
region
:999999999999:destination:testDestination" } ] } -
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 cuenta de AWS con el ID 111111111111 llamar a PutSubscriptionFilter en el destino con el ARN arn:aws:logs:
region
:999999999999:destination:testDestination. Cualquier otro intento de usuario de llamar a PutSubscriptionFilter en este destino se rechazará.Para validar los privilegios de un usuario con una política de acceso, consulte Uso del validador de políticas en la Guía del usuario de IAM.
-
Cuando haya terminado, si está usando AWS Organizations para obtener los permisos entre cuentas, siga los pasos de Paso 2: (solo si se utiliza una organización) crear un rol de IAM. 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.