View a markdown version of this page

データ配信の IAM アクセス許可 - Amazon Kinesis Data Streams

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

データ配信の IAM アクセス許可

このトピックでは、Amazon Kinesis Data Streams で配信リソースを作成および管理するために必要な IAM アクセス許可と、データ配信が送信先にデータを配信するために引き受けるサービス実行ロールについて説明します。

ライフサイクル管理のアクセス許可

配信リソースを作成、更新、削除、説明、一覧表示するには、呼び出し元の IAM プリンシパルに次のアクセス許可が必要です。

配信ライフサイクルのアクセス許可
アクション [リソース] 説明
kinesis:CreateChannel ストリーム ARN (arn:aws:kinesis:region:account-id:stream/stream-name) Kinesis Data Streams ストリームで配信を作成します。
kinesis:AssociateStreamsWithChannel ストリーム ARN (arn:aws:kinesis:region:account-id:stream/stream-name) ストリームを配信に関連付けます。これは、指定されたストリームから読み取る配信を作成するために呼び出し元プリンシパルに付与する必要がある仮想アクションです。これは、 に加えて承認されていますkinesis:CreateChannel。
kinesis:UpdateChannel チャネル ARN (arn:aws:kinesis:region:account-id:channel/channel-id) 既存の配信設定を更新します。
kinesis:DeleteChannel チャネル ARN 既存の配信を削除します。
kinesis:DescribeChannel チャネル ARN 配信の詳細を取得します。
kinesis:ListChannels アカウントレベル (arn:aws:kinesis:region:account-id:stream/*) アカウント内のすべての配信を一覧表示します。

サービス実行のロール

データ配信は、送信先にデータを配信するための IAM サービス実行ロールを引き受けます。このロールを作成し、信頼ポリシーとアクセス許可ポリシーの両方をアタッチする必要があります。

信頼ポリシー

信頼ポリシーは、Kinesis Data Streams サービスがロールを引き受けることを許可します。混乱した代理問題を防ぐための条件キーを含めます。

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

Apache Iceberg でテーブルをストリーミングするためのアクセス許可ポリシー

Apache Iceberg のストリーミングテーブルに配信する場合、サービス実行ロールには次のアクセス許可が必要です。

{ "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 は、カスタマーマネージド AWS KMS キーを使用して送信先テーブルを暗号化する場合にのみ必要です。これがないと、 はCreateTable成功しますが、テーブルの暗号化は失敗し、テーブルは作成されません。

  • s3tables:TagResource サービスは作成するテーブルにタグを付けるため、 は必須です。

  • AllowCreateTableWithTag および AllowPutTableDataWithTagステートメントはオプションです。テーブル ARN のみを対象とするのではなく、タグベースのアクセスコントロールが必要な場合にのみ含めます。s3tables:CreateTable および s3tables:PutTableDataは、一致するTableNameタグを持つリソースに制限されます。ARN でスコープする場合は省略します。

  • Glue スキーマレジストリにのみglue:GetSchemaVersion必要です。これは、 JSONと の両方GSR_JSONの入力形式に必要です。

  • KMSForCreateTimeValidation ステートメントを使用すると、配信の作成時に Amazon Kinesis Data Streams が AWS KMS キーを検証できます。これは、送信先テーブルまたはソースストリームがカスタマーマネージド AWS KMS キーを使用する場合にのみ必要です。

  • KMSForS3TablesEncryption ステートメントは、 AWS KMS 配信されたテーブルデータの保管時の暗号化に使用されるオペレーションを付与します。これは、テーブルバケットがカスタマーマネージドキーを使用する場合にのみ必要です。

  • KMSForCreateTable ステートメントにより、Amazon Kinesis Data Streams は送信先テーブルの作成時にキー設定を読み取ることができます。これは、テーブルバケットがカスタマーマネージドキーを使用する場合にのみ必要です。

  • KMSForDecryptSourceStreamRecords ステートメントを使用すると、ロールはソースストリームから読み取られたレコードを復号できます。これは、Kinesis Data Streams ストリームがカスタマーマネージドキーで暗号化されている場合にのみ必要です。

汎用 Amazon S3 バケットのアクセス許可ポリシー

汎用 Amazon S3 バケットに配信する場合、サービス実行ロールには次のアクセス許可が必要です。

{ "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>" } } } ] }
  • KMSForCreateTimeValidation ステートメントを使用すると、配信の作成時に Amazon Kinesis Data Streams が AWS KMS キーを検証できます。これは、送信先バケットまたはソースストリームがカスタマーマネージド AWS KMS キーを使用する場合にのみ必要です。

  • KMSForS3BucketEncryption ステートメントは、 AWS KMS Amazon S3 が配信されたオブジェクトを保管中に暗号化するために使用するオペレーションを付与します。これは、送信先バケットまたはデッドレターキューバケットがカスタマーマネージドキーで SSE-KMS を使用する場合にのみ必要です。表示されるkms:EncryptionContext:aws:s3:arn値は、オブジェクト ARN を使用します。これは、S3 バケットキーが無効になっている場合に適用されます。レプリケート先バケットまたはデッドレターキューバケットで S3 バケットキーを有効にすると、Amazon S3 はオブジェクト ARN の代わりにバケット ARN を暗号化コンテキストとして使用するため、対応する値をそのバケット ARN (例: arn:aws:s3:::delivery-bucket-nameまたは ) に変更する必要がありますarn:aws:s3:::dlq-bucket-name。詳細については、「Amazon S3 ユーザーガイド」の「S3 バケットキーの設定」を参照してください。 Amazon S3

  • KMSForDecryptSourceStreamRecords ステートメントを使用すると、ロールはソースストリームから読み取られたレコードを復号できます。これは、Kinesis Data Streams ストリームがカスタマーマネージドキーで暗号化されている場合にのみ必要です。

重要

s3:PutObject リソースを特定のプレフィックス ( などarn:aws:s3:::my-bucket/data*) に制限する場合、出力キーテンプレートによって生成されたオブジェクトキーは、同じプレフィックスで始まる必要があります。IAM リソースプレフィックスと出力キーテンプレートが一致しない場合、アクセス拒否エラーが発生し、データは配信されません。

たとえば、ポリシーが s3:PutObjectに を付与する場合arn:aws:s3:::my-bucket/data*、出力キーテンプレートは data/などの で始まる必要がありますdata/!{yyyy}/!{MM}/!{dd}/!{HH}/。これを回避するには、リソースをバケット全体 (arn:aws:s3:::my-bucket/*) にスコープするか、プレフィックスが完全に一致することを確認します。

オプションの CloudWatch Logs アクセス許可

配信で CloudWatch Logs を有効にする場合は、サービス実行ロールに次のアクセス許可を追加します。

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