View a markdown version of this page

Autorisations IAM pour la fourniture de données - Amazon Kinesis Data Streams

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Autorisations IAM pour la fourniture de données

Consultez cette rubrique pour en savoir plus sur les autorisations IAM requises pour créer et gérer des ressources de diffusion dans Amazon Kinesis Data Streams, ainsi que sur le rôle d'exécution du service assumé par la diffusion des données pour acheminer les données vers votre destination.

autorisations de gestion du cycle de vie

Pour créer, mettre à jour, supprimer, décrire et répertorier les ressources de diffusion, le principal IAM appelant doit disposer des autorisations suivantes :

Autorisations relatives au cycle de vie
Action Ressource Description
kinesis:CreateChannel ARN du flux (arn:aws:kinesis:region:account-id:stream/stream-name) Créez une diffusion sur un flux Kinesis Data Streams.
kinesis:AssociateStreamsWithChannel ARN du flux (arn:aws:kinesis:region:account-id:stream/stream-name) Associez un flux à une diffusion. Il s'agit d'une action virtuelle que le principal appelant doit recevoir pour créer une diffusion qui lit le flux spécifié. Il est autorisé en complément dekinesis:CreateChannel.
kinesis:UpdateChannel ARN du canal (arn:aws:kinesis:region:account-id:channel/channel-id) Mettez à jour une configuration de livraison existante.
kinesis:DeleteChannel Chaîne ARN Supprimez une livraison existante.
kinesis:DescribeChannel Chaîne ARN Récupérez les détails d'une livraison.
kinesis:ListChannels Niveau du compte (arn:aws:kinesis:region:account-id:stream/*) Répertoriez toutes les livraisons sur le compte.

Rôle d’exécution de service

La diffusion des données suppose un rôle d'exécution du service IAM pour acheminer les données vers votre destination. Vous devez créer ce rôle et y associer à la fois une politique de confiance et une politique d'autorisation.

Politique d’approbation

La politique de confiance permet au service Kinesis Data Streams d'assumer ce rôle. Incluez des clés de condition pour éviter le problème de confusion entre les sous-ministres.

{ "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/*" } } } ] }

Politique d'autorisation pour les tables de streaming sur Apache Iceberg

Lors de la diffusion vers des tables de streaming sur Apache Iceberg, le rôle d'exécution du service nécessite les autorisations suivantes :

{ "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:PutTableEncryptionest obligatoire uniquement lorsque vous chiffrez la table de destination avec une AWS KMS clé gérée par le client. Sans cela, il CreateTable réussit mais le chiffrement de la table échoue et la table n'est jamais créée.

  • s3tables:TagResourceest obligatoire car le service étiquette les tables qu'il crée.

  • Les AllowPutTableDataWithTag instructions AllowCreateTableWithTag et sont facultatives. Incluez-les uniquement si vous souhaitez un contrôle d'accès basé sur des balises au lieu d'une portée uniquement par l'ARN de la table. Ils limitent s3tables:CreateTable et s3tables:PutTableData aux ressources portant une TableName étiquette correspondante. Omettez-les si vous définissez la portée par ARN.

  • Seul glue:GetSchemaVersion est requis pour le registre Glue Schema. Il est requis à la fois pour le format JSON et pour le format GSR_JSON d'entrée.

  • La KMSForCreateTimeValidation déclaration permet à Amazon Kinesis Data Streams de valider votre AWS KMS clé lorsque vous créez la diffusion. Elle n'est requise que lorsque votre table de destination ou votre flux source utilise une AWS KMS clé gérée par le client.

  • L'KMSForS3TablesEncryptioninstruction autorise les AWS KMS opérations utilisées pour chiffrer les données de table fournies au repos. Elle n'est requise que lorsque votre bucket de tables utilise une clé gérée par le client.

  • L'KMSForCreateTableinstruction permet à Amazon Kinesis Data Streams de lire la configuration clé lors de la création de la table de destination. Elle n'est requise que lorsque le bucket de tables utilise une clé gérée par le client.

  • L'KMSForDecryptSourceStreamRecordsinstruction permet au rôle de déchiffrer les enregistrements lus depuis le flux source. Elle n'est requise que lorsque votre flux Kinesis Data Streams est chiffré à l'aide d'une clé gérée par le client.

Politique d'autorisation pour les compartiments Amazon S3 à usage général

Lors de la diffusion vers des compartiments Amazon S3 à usage général, le rôle d'exécution du service nécessite les autorisations suivantes :

{ "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 déclaration permet à Amazon Kinesis Data Streams de valider votre AWS KMS clé lorsque vous créez la diffusion. Elle n'est requise que lorsque votre bucket de destination ou votre flux source utilise une AWS KMS clé gérée par le client.

  • La KMSForS3BucketEncryption déclaration indique les AWS KMS opérations utilisées par Amazon S3 pour chiffrer les objets livrés au repos. Elle n'est requise que lorsque votre compartiment de destination ou votre compartiment de file d'attente de lettres mortes est utilisé SSE-KMS avec une clé gérée par le client. Les kms:EncryptionContext:aws:s3:arn valeurs affichées utilisent l'ARN de l'objet, qui s'applique lorsque les clés de compartiment S3 sont désactivées. Si vous activez les clés de compartiment S3 dans le compartiment de destination ou dans le compartiment de file d'attente contenant des lettres mortes, Amazon S3 utilise l'ARN du compartiment comme contexte de chiffrement au lieu de l'ARN de l'objet. Vous devez donc modifier la valeur correspondante pour l'ARN de ce compartiment (par exemple, arn:aws:s3:::delivery-bucket-name ouarn:aws:s3:::dlq-bucket-name). Pour plus d'informations, consultez la section Configuration d'une clé de compartiment S3 dans le guide de l'utilisateur Amazon S3.

  • L'KMSForDecryptSourceStreamRecordsinstruction permet au rôle de déchiffrer les enregistrements lus depuis le flux source. Elle n'est requise que lorsque votre flux Kinesis Data Streams est chiffré à l'aide d'une clé gérée par le client.

Important

Si vous limitez la s3:PutObject ressource à un préfixe spécifique (par exemplearn:aws:s3:::my-bucket/data*), les clés d'objet générées par votre modèle de clé de sortie doivent commencer par ce même préfixe. Une incompatibilité entre le préfixe de ressource IAM et le modèle de clé de sortie entraîne des erreurs d'accès refusé et aucune donnée n'est délivrée.

Par exemple, si votre politique accorde s3:PutObjectarn:aws:s3:::my-bucket/data*, votre modèle de clé de sortie doit commencer pardata/, par exempledata/!{yyyy}/!{MM}/!{dd}/!{HH}/. Pour éviter cela, étendez la ressource à l'ensemble du bucket (arn:aws:s3:::my-bucket/*) ou assurez-vous que les préfixes correspondent exactement.

Autorisations facultatives pour les CloudWatch journaux

Si vous activez CloudWatch les journaux pour votre diffusion, ajoutez les autorisations suivantes au rôle d'exécution du service :

{ "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>:*" } ] }