View a markdown version of this page

Izin IAM untuk pengiriman data - Amazon Kinesis Data Streams

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Izin IAM untuk pengiriman data

Gunakan topik ini untuk mempelajari tentang izin IAM yang diperlukan untuk membuat dan mengelola sumber daya pengiriman di Amazon Kinesis Data Streams, serta peran eksekusi layanan yang diasumsikan oleh pengiriman data untuk mengirimkan data ke tujuan Anda.

Izin manajemen siklus hidup

Untuk membuat, memperbarui, menghapus, mendeskripsikan, dan mencantumkan sumber daya pengiriman, prinsipal IAM pemanggil harus memiliki izin berikut.

Tindakan Sumber daya Deskripsi
kinesis:CreateChannel Aliran ARN () arn:aws:kinesis:region:account-id:stream/stream-name Buat pengiriman di aliran Kinesis Data Streams.
kinesis:AssociateStreamsWithChannel Aliran ARN () arn:aws:kinesis:region:account-id:stream/stream-name Kaitkan aliran dengan pengiriman. Ini adalah tindakan virtual yang harus diberikan oleh prinsipal pemanggil untuk membuat pengiriman yang dibaca dari aliran yang ditentukan. Ini diizinkan sebagai tambahan untukkinesis:CreateChannel.
kinesis:UpdateChannel Saluran ARN () arn:aws:kinesis:region:account-id:channel/channel-id Perbarui konfigurasi pengiriman yang ada.
kinesis:DeleteChannel Saluran ARN Hapus pengiriman yang ada.
kinesis:DescribeChannel Saluran ARN Ambil detail pengiriman.
kinesis:ListChannels Tingkat akun (arn:aws:kinesis:region:account-id:stream/*) Buat daftar semua pengiriman di akun.

Peran eksekusi layanan

Pengiriman data mengasumsikan peran eksekusi layanan IAM untuk mengirimkan data ke tujuan Anda. Anda harus membuat peran ini dan melampirkan kebijakan kepercayaan dan kebijakan izin.

Kebijakan kepercayaan

Kebijakan kepercayaan memungkinkan layanan Kinesis Data Streams untuk mengambil peran tersebut. Sertakan kunci kondisi untuk mencegah masalah wakil yang membingungkan.

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

Kebijakan izin untuk tabel streaming di Apache Iceberg

Saat mengirimkan ke tabel streaming di Apache Iceberg, peran eksekusi layanan memerlukan izin berikut:

{ "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:PutTableEncryptiondiperlukan hanya ketika Anda mengenkripsi tabel tujuan dengan AWS KMS kunci yang dikelola pelanggan. Tanpa itu, CreateTable berhasil tetapi enkripsi tabel gagal dan tabel tidak pernah dibuat.

  • s3tables:TagResourcediperlukan karena layanan menandai tabel yang dibuatnya.

  • AllowPutTableDataWithTagPernyataan AllowCreateTableWithTag dan bersifat opsional. Sertakan mereka hanya jika Anda menginginkan kontrol akses berbasis tag alih-alih pelingkupan hanya dengan tabel ARN. Mereka membatasi s3tables:CreateTable dan sumber daya s3tables:PutTableData yang membawa TableName tag yang cocok. Abaikan mereka jika Anda lingkup oleh ARN.

  • Hanya glue:GetSchemaVersion diperlukan untuk Glue Schema Registry. Hal ini diperlukan untuk kedua format JSON dan GSR_JSON input.

  • KMSForCreateTimeValidationPernyataan ini memungkinkan Amazon Kinesis Data Streams AWS KMS memvalidasi kunci Anda saat Anda membuat pengiriman. Ini diperlukan hanya ketika tabel tujuan atau aliran sumber Anda menggunakan AWS KMS kunci yang dikelola pelanggan.

  • KMSForS3TablesEncryptionPernyataan tersebut memberikan AWS KMS operasi yang digunakan untuk mengenkripsi data tabel yang dikirimkan saat istirahat. Ini diperlukan hanya jika bucket meja Anda menggunakan kunci yang dikelola pelanggan.

  • KMSForCreateTablePernyataan ini memungkinkan Amazon Kinesis Data Streams membaca konfigurasi kunci saat membuat tabel tujuan. Ini diperlukan hanya ketika bucket meja menggunakan kunci yang dikelola pelanggan.

  • KMSForDecryptSourceStreamRecordsPernyataan ini memungkinkan peran mendekripsi catatan yang dibaca dari aliran sumber. Ini diperlukan hanya jika aliran Kinesis Data Streams Anda dienkripsi dengan kunci yang dikelola pelanggan.

Kebijakan izin untuk bucket Amazon S3 tujuan umum

Saat mengirimkan ke bucket Amazon S3 tujuan umum, peran eksekusi layanan memerlukan izin berikut:

{ "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>" } } } ] }
  • KMSForCreateTimeValidationPernyataan ini memungkinkan Amazon Kinesis Data Streams AWS KMS memvalidasi kunci Anda saat Anda membuat pengiriman. Ini diperlukan hanya jika bucket tujuan atau aliran sumber Anda menggunakan AWS KMS kunci yang dikelola pelanggan.

  • KMSForS3BucketEncryptionPernyataan tersebut memberikan AWS KMS operasi yang digunakan Amazon S3 untuk mengenkripsi objek yang dikirim saat istirahat. Ini diperlukan hanya jika bucket tujuan atau bucket antrean dead-letter Anda digunakan SSE-KMS dengan kunci yang dikelola pelanggan. kms:EncryptionContext:aws:s3:arnNilai yang ditampilkan menggunakan objek ARN, yang berlaku saat S3 Bucket Keys dinonaktifkan. Jika Anda mengaktifkan Kunci Bucket S3 di bucket tujuan atau bucket antrian huruf mati, Amazon S3 menggunakan bucket ARN sebagai konteks enkripsi, bukan ARN objek, jadi Anda harus mengubah nilai yang sesuai ke ARN bucket tersebut (misalnya, atau). arn:aws:s3:::delivery-bucket-name arn:aws:s3:::dlq-bucket-name Untuk informasi selengkapnya, lihat Mengonfigurasi Kunci Bucket S3 di Panduan Pengguna Amazon S3.

  • KMSForDecryptSourceStreamRecordsPernyataan ini memungkinkan peran mendekripsi catatan yang dibaca dari aliran sumber. Ini diperlukan hanya jika aliran Kinesis Data Streams Anda dienkripsi dengan kunci yang dikelola pelanggan.

penting

Jika Anda membatasi s3:PutObject sumber daya ke awalan tertentu (misalnya,arn:aws:s3:::my-bucket/data*), kunci objek yang dihasilkan oleh template kunci keluaran Anda harus dimulai dengan awalan yang sama. Ketidakcocokan antara awalan sumber daya IAM dan template kunci keluaran menghasilkan kesalahan akses ditolak dan tidak ada data yang dikirim.

Misalnya, jika kebijakan Anda mengabulkan s3:PutObjectarn:aws:s3:::my-bucket/data*, templat kunci keluaran Anda harus dimulai dengandata/, sepertidata/!{yyyy}/!{MM}/!{dd}/!{HH}/. Untuk menghindari hal ini, lingkup sumber daya ke seluruh bucket (arn:aws:s3:::my-bucket/*) atau pastikan awalan sama persis.

Izin CloudWatch Log Opsional

Jika Anda mengaktifkan CloudWatch Log untuk pengiriman, tambahkan izin berikut ke peran eksekusi layanan:

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