翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
データ配信の IAM アクセス許可
このトピックでは、Amazon Kinesis Data Streams で配信リソースを作成および管理するために必要な IAM アクセス許可と、データ配信が送信先にデータを配信するために引き受けるサービス実行ロールについて説明します。
ライフサイクル管理のアクセス許可
配信リソースを作成、更新、削除、説明、一覧表示するには、呼び出し元の IAM プリンシパルに次のアクセス許可が必要です。
| アクション | [リソース] | 説明 |
|---|---|---|
kinesis:CreateChannel |
ストリーム ARN (arn:aws:kinesis:) |
Kinesis Data Streams ストリームで配信を作成します。 |
kinesis:AssociateStreamsWithChannel |
ストリーム ARN (arn:aws:kinesis:) |
ストリームを配信に関連付けます。これは、指定されたストリームから読み取る配信を作成するために呼び出し元プリンシパルに付与する必要がある仮想アクションです。これは、 に加えて承認されていますkinesis:CreateChannel。 |
kinesis:UpdateChannel |
チャネル ARN (arn:aws:kinesis:) |
既存の配信設定を更新します。 |
kinesis:DeleteChannel |
チャネル ARN | 既存の配信を削除します。 |
kinesis:DescribeChannel |
チャネル ARN | 配信の詳細を取得します。 |
kinesis:ListChannels |
アカウントレベル (arn:aws:kinesis:) |
アカウント内のすべての配信を一覧表示します。 |
サービス実行のロール
データ配信は、送信先にデータを配信するための 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-namearn:aws:s3:::。詳細については、「Amazon S3 ユーザーガイド」の「S3 バケットキーの設定」を参照してください。 Amazon S3dlq-bucket-name -
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>:*" } ] }