View a markdown version of this page

IAM-Berechtigungen für die Datenbereitstellung - Amazon Kinesis Data Streams

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

IAM-Berechtigungen für die Datenbereitstellung

In diesem Thema erfahren Sie mehr über die IAM-Berechtigungen, die für die Erstellung und Verwaltung von Lieferressourcen in Amazon Kinesis Data Streams erforderlich sind, sowie über die Rolle der Serviceausführung, die Data Delivery übernimmt, um Daten an Ihr Ziel zu liefern.

Berechtigungen für das Lebenszyklusmanagement

Um Bereitstellungsressourcen zu erstellen, zu aktualisieren, zu löschen, zu beschreiben und aufzulisten, muss der aufrufende IAM-Prinzipal über die folgenden Berechtigungen verfügen.

Action Ressource Description
kinesis:CreateChannel ARN streamen (arn:aws:kinesis:region:account-id:stream/stream-name) Erstellen Sie eine Lieferung in einem Kinesis Data Streams Streams-Stream.
kinesis:AssociateStreamsWithChannel ARN streamen (arn:aws:kinesis:region:account-id:stream/stream-name) Ordnen Sie einen Stream einer Lieferung zu. Dies ist eine virtuelle Aktion, die dem aufrufenden Prinzipal gewährt werden muss, um eine Lieferung zu erstellen, die aus dem angegebenen Stream liest. Sie ist zusätzlich zu autorisiertkinesis:CreateChannel.
kinesis:UpdateChannel Kanal ARN (arn:aws:kinesis:region:account-id:channel/channel-id) Aktualisieren Sie eine bestehende Versandkonfiguration.
kinesis:DeleteChannel Kanal ARN Löscht eine bestehende Lieferung.
kinesis:DescribeChannel Kanal ARN Rufen Sie die Details einer Lieferung ab.
kinesis:ListChannels Kontoebene (arn:aws:kinesis:region:account-id:stream/*) Listet alle Lieferungen im Konto auf.

Service-Ausführungsrolle

Bei der Datenzustellung wird eine IAM-Dienstausführungsrolle übernommen, um Daten an Ihr Ziel zu liefern. Sie müssen diese Rolle erstellen und sowohl eine Vertrauensrichtlinie als auch eine Berechtigungsrichtlinie anhängen.

Vertrauensrichtlinie

Die Vertrauensrichtlinie ermöglicht es dem Kinesis Data Streams Streams-Dienst, die Rolle zu übernehmen. Fügen Sie Bedingungsschlüssel hinzu, um das Problem mit dem verwirrten Stellvertreter zu vermeiden.

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

Berechtigungsrichtlinie für das Streamen von Tabellen auf Apache Iceberg

Bei der Bereitstellung an Streaming-Tabellen auf Apache Iceberg sind für die Dienstausführungsrolle die folgenden Berechtigungen erforderlich:

{ "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:PutTableEncryptionist nur erforderlich, wenn Sie die Zieltabelle mit einem vom Kunden verwalteten AWS KMS Schlüssel verschlüsseln. Ohne diesen Schlüssel ist es CreateTable erfolgreich, aber die Tabellenverschlüsselung schlägt fehl und die Tabelle wird nie erstellt.

  • s3tables:TagResourceist erforderlich, da der Service die Tabellen, die er erstellt, taggt.

  • Die AllowPutTableDataWithTag Anweisungen AllowCreateTableWithTag und sind optional. Schließen Sie sie nur ein, wenn Sie eine tagbasierte Zugriffskontrolle wünschen, anstatt den Bereich ausschließlich anhand des Tabellen-ARN ARN. Sie beschränken s3tables:CreateTable und beschränken sich auf Ressourcens3tables:PutTableData, die ein entsprechendes Tag tragen. TableName Lassen Sie sie weg, wenn Sie den Bereich nach ARN eingrenzen.

  • glue:GetSchemaVersionWird nur für die Glue Schema Registry benötigt. Es ist sowohl für das als auch für das JSON GSR_JSON Eingabeformat erforderlich.

  • Mit der KMSForCreateTimeValidation Anweisung kann Amazon Kinesis Data Streams Ihren AWS KMS Schlüssel überprüfen, wenn Sie die Lieferung erstellen. Sie ist nur erforderlich, wenn Ihre Zieltabelle oder Ihr Quell-Stream einen vom Kunden verwalteten AWS KMS Schlüssel verwendet.

  • Die KMSForS3TablesEncryption Anweisung gewährt die AWS KMS Operationen, die zum Verschlüsseln der gelieferten Tabellendaten im Ruhezustand verwendet werden. Sie ist nur erforderlich, wenn Ihr Tabellen-Bucket einen vom Kunden verwalteten Schlüssel verwendet.

  • Die KMSForCreateTable Anweisung ermöglicht es Amazon Kinesis Data Streams, die Schlüsselkonfiguration zu lesen, wenn die Zieltabelle erstellt wird. Sie ist nur erforderlich, wenn der Tabellen-Bucket einen vom Kunden verwalteten Schlüssel verwendet.

  • Die KMSForDecryptSourceStreamRecords Anweisung ermöglicht es der Rolle, Datensätze zu entschlüsseln, die aus dem Quellstream gelesen wurden. Sie ist nur erforderlich, wenn Ihr Kinesis Data Streams Streams-Stream mit einem vom Kunden verwalteten Schlüssel verschlüsselt ist.

Genehmigungsrichtlinie für allgemeine Amazon S3 S3-Buckets

Bei der Lieferung an allgemeine Amazon S3 S3-Buckets benötigt die Rolle „Service Execution“ die folgenden Berechtigungen:

{ "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>" } } } ] }
  • Mit der KMSForCreateTimeValidation Anweisung kann Amazon Kinesis Data Streams Ihren AWS KMS Schlüssel überprüfen, wenn Sie die Lieferung erstellen. Sie ist nur erforderlich, wenn Ihr Ziel-Bucket oder Quell-Stream einen vom Kunden verwalteten AWS KMS Schlüssel verwendet.

  • Die KMSForS3BucketEncryption Erklärung gewährt die AWS KMS Operationen, die Amazon S3 verwendet, um gelieferte Objekte im Ruhezustand zu verschlüsseln. Sie ist nur erforderlich, wenn Ihr Ziel-Bucket oder Ihr Bucket für die Warteschlange unzustellbarer Nachrichten SSE-KMS mit einem vom Kunden verwalteten Schlüssel verwendet wird. Die angezeigten kms:EncryptionContext:aws:s3:arn Werte verwenden das Objekt ARN, das gilt, wenn S3 Bucket Keys deaktiviert sind. Wenn Sie S3 Bucket Keys auf dem Ziel-Bucket oder dem Dead-Letter-Queue-Bucket aktivieren, verwendet Amazon S3 den Bucket-ARN als Verschlüsselungskontext anstelle des Objekt-ARN, sodass Sie den entsprechenden Wert in diesen Bucket-ARN ändern müssen (z. B. arn:aws:s3:::delivery-bucket-name oderarn:aws:s3:::dlq-bucket-name). Weitere Informationen finden Sie unter Konfiguration eines S3-Bucket-Keys im Amazon S3 S3-Benutzerhandbuch.

  • Die KMSForDecryptSourceStreamRecords Anweisung ermöglicht es der Rolle, Datensätze zu entschlüsseln, die aus dem Quell-Stream gelesen wurden. Sie ist nur erforderlich, wenn Ihr Kinesis Data Streams Streams-Stream mit einem vom Kunden verwalteten Schlüssel verschlüsselt ist.

Wichtig

Wenn Sie die s3:PutObject Ressource auf ein bestimmtes Präfix beschränken (z. B.arn:aws:s3:::my-bucket/data*), müssen die von Ihrer Ausgabeschlüsselvorlage generierten Objektschlüssel mit demselben Präfix beginnen. Eine Nichtübereinstimmung zwischen dem IAM-Ressourcenpräfix und der Ausgabeschlüsselvorlage führt dazu, dass der Zugriff verweigert wurde und keine Daten übermittelt werden.

Wenn Ihre Richtlinie beispielsweise aktiviert istarn:aws:s3:::my-bucket/data*, muss Ihre Ausgabeschlüsselvorlage mit beginnendata/, z. B. s3:PutObject data/!{yyyy}/!{MM}/!{dd}/!{HH}/ Um dies zu vermeiden, beschränken Sie die Ressource entweder auf den gesamten Bucket (arn:aws:s3:::my-bucket/*) oder stellen Sie sicher, dass die Präfixe exakt übereinstimmen.

Optionale CloudWatch Log-Berechtigungen

Wenn Sie CloudWatch Logs für Ihre Lieferung aktivieren, fügen Sie der Dienstausführungsrolle die folgenden Berechtigungen hinzu:

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