View a markdown version of this page

Autorisations IAM pour la livraison 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 livraison 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 des services assumé par la livraison 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.

Action Ressource Description
kinesis:CreateChannel Diffusez l'ARN (arn:aws:kinesis:region:account-id:stream/stream-name) Créez une diffusion sur un flux Kinesis Data Streams.
kinesis:AssociateStreamsWithChannel Diffusez l'ARN (arn:aws:kinesis:region:account-id:stream/stream-name) Associez un flux à une diffusion. Il s'agit d'une action virtuelle qui doit être accordée au principal appelant pour créer une diffusion qui lit à partir du flux spécifié. Il est autorisé en plus 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 ARN du canal Supprimez une livraison existante.
kinesis:DescribeChannel ARN du canal 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 dans le compte.

Rôle d’exécution de service

La livraison des données suppose un rôle d'exécution du service IAM pour livrer les données à 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 des adjoints.

{ "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:PutTableEncryptionn'est obligatoire que 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 balise 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 délimitation 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 votre champ d'application par ARN.

  • Uniquement glue:GetSchemaVersion requis pour le Glue Schema Registry. 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 AWS KMS votre 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 livrées au repos. Cela n'est nécessaire que lorsque votre compartiment de table 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 table utilise une clé gérée par le client.

  • L'KMSForDecryptSourceStreamRecordsinstruction permet au rôle de déchiffrer les enregistrements lus dans le flux source. Cela n'est nécessaire 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 livraison 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 AWS KMS votre clé lorsque vous créez la diffusion. Elle n'est requise que lorsque votre compartiment de destination ou votre flux source utilise une AWS KMS clé gérée par le client.

  • La KMSForS3BucketEncryption déclaration autorise les AWS KMS opérations qu'Amazon S3 utilise pour chiffrer les objets livrés au repos. Cela n'est nécessaire que lorsque votre compartiment de destination ou votre compartiment de file d'attente contenant des 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 sur le compartiment de destination ou sur 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 cet ARN de 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 dans le flux source. Cela n'est nécessaire 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 exemple,arn: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 de refus d'accès et aucune donnée n'est remise.

Par exemple, si votre politique l'autorise 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 compartiment (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 livraison, 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>:*" } ] }