View a markdown version of this page

Autorizzazioni IAM per la distribuzione dei dati - Flusso di dati Amazon Kinesis

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à.

Autorizzazioni IAM per la distribuzione dei dati

Usa questo argomento per conoscere le autorizzazioni IAM necessarie per creare e gestire le risorse di distribuzione in Amazon Kinesis Data Streams e il ruolo di esecuzione del servizio che la distribuzione dei dati assume per consegnare i dati a destinazione.

Autorizzazioni di gestione del ciclo di vita

Per creare, aggiornare, eliminare, descrivere ed elencare le risorse di distribuzione, il responsabile IAM chiamante deve disporre delle seguenti autorizzazioni:

Autorizzazioni relative al ciclo di vita della consegna
Azione Risorsa Description
kinesis:CreateChannel Stream ARN () arn:aws:kinesis:region:account-id:stream/stream-name Crea una distribuzione su uno stream Kinesis Data Streams.
kinesis:AssociateStreamsWithChannel Streaming ARN () arn:aws:kinesis:region:account-id:stream/stream-name Associa uno stream a una consegna. Si tratta di un'azione virtuale che deve essere concessa al mittente chiamante per creare una consegna che legga dal flusso specificato. È autorizzato in aggiunta akinesis:CreateChannel.
kinesis:UpdateChannel Canale ARN () arn:aws:kinesis:region:account-id:channel/channel-id Aggiorna una configurazione di consegna esistente.
kinesis:DeleteChannel Canale ARN Elimina una spedizione esistente.
kinesis:DescribeChannel Canale ARN Recupera i dettagli di una consegna.
kinesis:ListChannels Livello di account () arn:aws:kinesis:region:account-id:stream/* Elenca tutte le consegne nell'account.

Ruolo di esecuzione del servizio

La consegna dei dati presuppone un ruolo di esecuzione del servizio IAM per la consegna dei dati a destinazione. È necessario creare questo ruolo e allegare sia una politica di fiducia che una politica di autorizzazione.

Policy di attendibilità

La politica di fiducia consente al servizio Kinesis Data Streams di assumere il ruolo. Includi le chiavi di condizione per evitare che si crei un problema confuso come sostituto.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "kinesis.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": "<account-id>" }, "ArnLike": { "aws:SourceArn": "arn:aws:kinesis:<region>:<account-id>:channel/*" } } } ] }

Politica di autorizzazione per lo streaming di tabelle su Apache Iceberg

Quando si esegue la distribuzione alle tabelle di streaming su Apache Iceberg, il ruolo di esecuzione del servizio richiede le seguenti autorizzazioni:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "S3TablesAccess", "Effect": "Allow", "Action": [ "s3tables:GetTable", "s3tables:GetTableBucket", "s3tables:GetTableMetadataLocation", "s3tables:UpdateTableMetadataLocation", "s3tables:CreateTable", "s3tables:CreateNamespace", "s3tables:PutTableData", "s3tables:GetTableData", "s3tables:TagResource", "s3tables:PutTableRecordExpirationConfiguration", "s3tables:PutTableEncryption" ], "Resource": [ "arn:aws:s3tables:<region>:<account-id>:bucket/<table-bucket-name>", "arn:aws:s3tables:<region>:<account-id>:bucket/<table-bucket-name>/table/*" ] }, { "Sid": "AllowCreateTableWithTag", "Effect": "Allow", "Action": "s3tables:CreateTable", "Resource": [ "arn:aws:s3tables:<region>:<account-id>:bucket/<table-bucket-name>/table/*", "arn:aws:s3tables:<region>:<account-id>:bucket/<table-bucket-name>" ], "Condition": { "StringEquals": { "aws:RequestTag/TableName": "<table-name>" } } }, { "Sid": "AllowPutTableDataWithTag", "Effect": "Allow", "Action": "s3tables:PutTableData", "Resource": "arn:aws:s3tables:<region>:<account-id>:bucket/<table-bucket-name>/table/*", "Condition": { "StringEquals": { "aws:ResourceTag/TableName": "<table-name>" } } }, { "Sid": "DLQBucketAccess", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:ListBucket", "s3:ListBucketMultipartUploads" ], "Resource": [ "arn:aws:s3:::<dlq-bucket-name>", "arn:aws:s3:::<dlq-bucket-name>/*" ], "Condition": { "StringEquals": { "aws:ResourceAccount": "<dlq-account-id>" } } }, { "Sid": "GlueSchemaRegistryAccess", "Effect": "Allow", "Action": [ "glue:GetSchemaVersion" ], "Resource": [ "arn:aws:glue:<region>:<account-id>:registry/<registry-name>", "arn:aws:glue:<region>:<account-id>:schema/<registry-name>/<schema-name>" ] }, { "Sid": "KMSForCreateTimeValidation", "Effect": "Allow", "Action": ["kms:Decrypt", "kms:GenerateDataKey"], "Resource": ["arn:aws:kms:<region>:<account-id>:key/<key-id>"], "Condition": { "StringEqualsIfExists": { "kms:ViaService": "kinesis.<region>.amazonaws.com" } } }, { "Sid": "KMSForS3TablesEncryption", "Effect": "Allow", "Action": ["kms:Decrypt", "kms:GenerateDataKey"], "Resource": ["arn:aws:kms:<region>:<account-id>:key/<key-id>"], "Condition": { "StringEquals": { "kms:ViaService": "s3.<region>.amazonaws.com" }, "StringLike": { "kms:EncryptionContext:aws:s3:arn": [ "arn:aws:s3tables:<region>:<account-id>:bucket/<table-bucket-name>/*", "arn:aws:s3:::<dlq-bucket-name>/*" ] } } }, { "Sid": "KMSForCreateTable", "Effect": "Allow", "Action": ["kms:DescribeKey"], "Resource": ["arn:aws:kms:<region>:<account-id>:key/<key-id>"], "Condition": { "StringEquals": { "kms:ViaService": "s3tables.<region>.amazonaws.com" } } }, { "Sid": "KMSForDecryptSourceStreamRecords", "Effect": "Allow", "Action": "kms:Decrypt", "Resource": ["arn:aws:kms:<region>:<account-id>:key/<stream-key-id>"], "Condition": { "StringEqualsIfExists": { "kms:ViaService": "kinesis.<region>.amazonaws.com" }, "StringEquals": { "kms:EncryptionContext:aws:kinesis:arn": "arn:aws:kinesis:<region>:<account-id>:stream/<stream-name>" } } } ] }
  • s3tables:PutTableEncryptionè richiesto solo quando si crittografa la tabella di destinazione con una chiave gestita dal cliente. AWS KMS Senza di essa, CreateTable ha successo, ma la crittografia della tabella ha esito negativo e la tabella non viene mai creata.

  • s3tables:TagResourceè necessario perché il servizio etichetta le tabelle che crea.

  • Le AllowPutTableDataWithTag istruzioni AllowCreateTableWithTag and sono opzionali. Includile solo se desideri un controllo degli accessi basato su tag anziché limitarti all'ARN della tabella. Limitano s3tables:CreateTable e limitano s3tables:PutTableData le risorse con un tag corrispondente. TableName Omettili se utilizzi l'ambito per ARN.

  • glue:GetSchemaVersionÈ richiesto solo per il Glue Schema Registry. È richiesto sia per i formati di input che per quelli GSR_JSON di input. JSON

  • La KMSForCreateTimeValidation dichiarazione consente ad Amazon Kinesis Data Streams di convalidare la AWS KMS chiave al momento della creazione della consegna. È richiesta solo quando la tabella di destinazione o lo stream di origine utilizza una chiave gestita dal cliente. AWS KMS

  • L'KMSForS3TablesEncryptionistruzione concede le AWS KMS operazioni utilizzate per crittografare i dati della tabella consegnata a riposo. È richiesta solo quando il bucket della tabella utilizza una chiave gestita dal cliente.

  • L'KMSForCreateTableistruzione consente ad Amazon Kinesis Data Streams di leggere la configurazione della chiave quando crea la tabella di destinazione. È richiesta solo quando il table bucket utilizza una chiave gestita dal cliente.

  • L'KMSForDecryptSourceStreamRecordsistruzione consente al ruolo di decrittografare i record letti dal flusso di origine. È necessario solo quando lo stream di Kinesis Data Streams è crittografato con una chiave gestita dal cliente.

Politica di autorizzazione per bucket Amazon S3 per uso generico

In caso di distribuzione a bucket Amazon S3 per uso generico, il ruolo di esecuzione del servizio richiede le seguenti autorizzazioni:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DeliveryBucketList", "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:ListBucketMultipartUploads" ], "Resource": [ "arn:aws:s3:::<delivery-bucket-name>", "arn:aws:s3:::<delivery-bucket-name>/*" ] }, { "Sid": "DeliveryBucketWrite", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:CreateMultipartUpload", "s3:UploadPart", "s3:CompleteMultipartUpload", "s3:ListMultipartUploads", "s3:ListMultipartUploadParts" ], "Resource": [ "arn:aws:s3:::<delivery-bucket-name>/*" ] }, { "Sid": "DLQBucketAccess", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:ListBucket", "s3:ListBucketMultipartUploads" ], "Resource": [ "arn:aws:s3:::<dlq-bucket-name>", "arn:aws:s3:::<dlq-bucket-name>/*" ], "Condition": { "StringEquals": { "aws:ResourceAccount": "<dlq-account-id>" } } }, { "Sid": "KMSForCreateTimeValidation", "Effect": "Allow", "Action": ["kms:Decrypt", "kms:GenerateDataKey"], "Resource": ["arn:aws:kms:<region>:<account-id>:key/<key-id>"], "Condition": { "StringEqualsIfExists": { "kms:ViaService": "kinesis.<region>.amazonaws.com" } } }, { "Sid": "KMSForS3BucketEncryption", "Effect": "Allow", "Action": ["kms:Decrypt", "kms:GenerateDataKey"], "Resource": ["arn:aws:kms:<region>:<account-id>:key/<key-id>"], "Condition": { "StringEquals": { "kms:ViaService": "s3.<region>.amazonaws.com" }, "StringLike": { "kms:EncryptionContext:aws:s3:arn": [ "arn:aws:s3:::<delivery-bucket-name>/*", "arn:aws:s3:::<dlq-bucket-name>/*" ] } } }, { "Sid": "KMSForDecryptSourceStreamRecords", "Effect": "Allow", "Action": "kms:Decrypt", "Resource": ["arn:aws:kms:<region>:<account-id>:key/<stream-key-id>"], "Condition": { "StringEqualsIfExists": { "kms:ViaService": "kinesis.<region>.amazonaws.com" }, "StringEquals": { "kms:EncryptionContext:aws:kinesis:arn": "arn:aws:kinesis:<region>:<account-id>:stream/<stream-name>" } } } ] }
  • La KMSForCreateTimeValidation dichiarazione consente ad Amazon Kinesis Data Streams di convalidare la AWS KMS chiave al momento della creazione della consegna. È richiesta solo quando il bucket di destinazione o lo stream di origine utilizza una chiave gestita dal cliente. AWS KMS

  • La KMSForS3BucketEncryption dichiarazione concede le AWS KMS operazioni utilizzate da Amazon S3 per crittografare gli oggetti consegnati inattivi. È necessario solo quando il bucket di destinazione o il bucket di coda a lettere morte utilizza una chiave gestita dal cliente. SSE-KMS I kms:EncryptionContext:aws:s3:arn valori mostrati utilizzano l'oggetto ARN, che si applica quando le chiavi S3 Bucket sono disabilitate. Se abiliti S3 Bucket Keys nel bucket di destinazione o nel bucket di coda di lettere morte, Amazon S3 utilizza l'ARN del bucket come contesto di crittografia anziché l'ARN dell'oggetto, quindi devi modificare il valore corrispondente a quel bucket ARN (ad esempio, or). arn:aws:s3:::delivery-bucket-name arn:aws:s3:::dlq-bucket-name Per ulteriori informazioni, consulta Configurazione di una chiave bucket S3 nella Amazon S3 User Guide. https://docs.aws.amazon.com/AmazonS3/latest/userguide/configuring-bucket-key.html

  • L'KMSForDecryptSourceStreamRecordsistruzione consente al ruolo di decrittografare i record letti dallo stream sorgente. È necessario solo quando lo stream di Kinesis Data Streams è crittografato con una chiave gestita dal cliente.

Importante

Se si limita la s3:PutObject risorsa a un prefisso specifico (ad esempio,arn:aws:s3:::my-bucket/data*), le chiavi oggetto generate dal modello di chiave di output devono iniziare con lo stesso prefisso. Una mancata corrispondenza tra il prefisso della risorsa IAM e il modello di chiave di output comporta errori di accesso negato e nessuna consegna di dati.

Ad esempio, se la tua policy è validaarn:aws:s3:::my-bucket/data*, s3:PutObject il modello di chiave di output deve iniziare condata/, ad esempio. data/!{yyyy}/!{MM}/!{dd}/!{HH}/ Per evitare ciò, limitate la risorsa all'intero bucket (arn:aws:s3:::my-bucket/*) o assicuratevi che i prefissi corrispondano esattamente.

Autorizzazioni opzionali per i log CloudWatch

Se abiliti CloudWatch i log per la consegna, aggiungi le seguenti autorizzazioni al ruolo di esecuzione del servizio:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "CloudWatchLogsAccess", "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "arn:aws:logs:<region>:<account-id>:log-group:<log-group-name>:*" } ] }