Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Passaggio 1: creazione di una destinazione
Importante
Tutte le fasi di questa procedura devono essere eseguite nell'account del destinatario dei dati di log.
Per questo esempio, l'account del destinatario dei dati di registro ha un ID AWS account di 9999, mentre l'ID dell'account mittente AWS dei dati di registro è 1111.
Questo esempio crea una destinazione utilizzando un flusso Kinesis Data RecipientStream Streams chiamato e un ruolo CloudWatch che consente a Logs di scrivere dati su di esso.
Quando viene creata la destinazione, CloudWatch Logs invia un messaggio di prova alla destinazione per conto dell'account del destinatario. Quando il filtro di sottoscrizione è attivo in un secondo momento, CloudWatch Logs invia gli eventi di registro alla destinazione per conto dell'account di origine.
Creazione di una destinazione
-
Nell'account del destinatario, crea un flusso di destinazione in Kinesis Data Streams. Al prompt dei comandi, digita:
aws kinesis create-stream --stream-name "RecipientStream" --shard-count 1
-
Attendi finché il flusso non diventa attivo. Puoi usare il comando aws kinesis describe-stream per controllare. StreamDescription StreamStatusproprietà. Inoltre, prendi nota del valore StreamDescription.StreamArn perché lo passerai a Logs in un secondo CloudWatch momento:
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" } } ] } }
Potrebbero essere necessari uno o due minuti perché il flusso sia in stato attivo.
-
Crea il ruolo IAM che concede a CloudWatch Logs l'autorizzazione a inserire dati nel tuo stream. Per prima cosa, devi creare una politica di fiducia in un file TrustPolicyFor~/ CWL.json. Utilizza un editor di testo per creare questo file di policy, non utilizzare la console IAM.
Questa policy include una chiave di contesto della condizione globale
aws:SourceArn
che specifica ilsourceAccountId
per prevenire il problema di sicurezza noto come "confused deputy". Se non conosci ancora l'ID dell'account di origine nella prima chiamata, consigliamo di inserire l'ARN di destinazione nel campo ARN di origine. Nelle chiamate successive, è necessario impostare l'ARN di origine come l'ARN di origine effettivo raccolto dalla prima chiamata. Per ulteriori informazioni, consulta Prevenzione del "confused deputy".{ "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" } } -
Utilizza il comando aws iam create-role per creare il ruolo IAM, specificando il file della policy di attendibilità. Prendi nota del valore Role.Arn restituito perché verrà passato anche a Logs in un secondo momento: 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": "2015-05-29T13:46:29.431Z", "RoleName": "CWLtoKinesisRole", "Path": "/", "Arn": "arn:aws:iam::999999999999:role/CWLtoKinesisRole" } } -
Crea una politica di autorizzazioni per definire quali azioni i CloudWatch log possono eseguire sul tuo account. Innanzitutto, usa un editor di testo per creare una politica di autorizzazioni in un file ~/ CWL.json: PermissionsFor
{ "Statement": [ { "Effect": "Allow", "Action": "kinesis:PutRecord", "Resource": "arn:aws:kinesis:
region
:999999999999:stream/RecipientStream" } ] } -
Associa la politica delle autorizzazioni al ruolo utilizzando il 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
-
Dopo che lo stream è nello stato attivo e hai creato il ruolo IAM, puoi creare la destinazione CloudWatch Logs.
-
In questa fase alla tua destinazione non si associa una policy d'accesso predefinita e costituisce solo la prima delle due fasi necessarie per completare la creazione della destinazione. Prendi nota di DestinationArnciò che viene restituito nel payload:
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" }
-
Dopo aver completato la fase 7, nell'account del destinatario dei dati di log associa alla destinazione una policy d'accesso predefinita. Questa politica deve specificare i log: PutSubscriptionFilter action e concede l'autorizzazione all'account mittente di accedere alla destinazione.
La politica concede l'autorizzazione all' AWS account che invia i log. Puoi specificare solo questo account nella policy oppure, se l'account del mittente è membro di un'organizzazione, la policy può specificare l'ID dell'organizzazione. In questo modo, puoi creare una sola policy per consentire a più account di un'organizzazione di inviare log a questo account di destinazione.
Utilizza un editor di testo per creare un file denominato
~/AccessPolicy.json
con una delle seguenti istruzioni di policy.Questa prima policy di esempio consente a tutti gli account dell'organizzazione che hanno un ID di
o-1234567890
di inviare log all'account del destinatario.{ "Version" : "2012-10-17", "Statement" : [ { "Sid" : "", "Effect" : "Allow", "Principal" : "*", "Action" : "logs:PutSubscriptionFilter", "Resource" : "arn:aws:logs:region:999999999999:destination:testDestination", "Condition": { "StringEquals" : { "aws:PrincipalOrgID" : ["o-1234567890"] } } } ] }
Nell'esempio seguente, solo l'account del mittente dei dati di log (111111111111) può inviare log all'account del destinatario dei dati di log.
{ "Version" : "2012-10-17", "Statement" : [ { "Sid" : "", "Effect" : "Allow", "Principal" : { "AWS" : "111111111111" }, "Action" : "logs:PutSubscriptionFilter", "Resource" : "arn:aws:logs:
region
:999999999999:destination:testDestination" } ] } -
Collega la policy creata nel passaggio precedente alla destinazione.
aws logs put-destination-policy \ --destination-name "testDestination" \ --access-policy file://~/AccessPolicy.json
Questa politica di accesso consente agli utenti dell' AWS account con ID 1111 di effettuare chiamate PutSubscriptionFilterverso la destinazione con ARN arn:aws:logs ::9999:destination:testDestination.
region
Qualsiasi tentativo di chiamata di un altro utente verso questa destinazione verrà rifiutato. PutSubscriptionFilterPer convalidare i privilegi di un utente su una policy d'accesso predefinita, consulta Utilizzo dello strumento di validazione delle policy nella guida per l'utente IAM.
-
Al termine, se utilizzi le autorizzazioni AWS Organizations per più account, segui la procedura riportata di seguito. Fase 2: creazione di un ruolo IAM (solo se si utilizza un'organizzazione) Se le autorizzazioni vengono concesse direttamente all'altro account anziché utilizzare Organizations, puoi saltare tale passaggio e procedere alla sezione Passaggio 4: creazione di un filtro di sottoscrizione.