本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
資料交付的 IAM 許可
使用本主題來了解在 Amazon Kinesis Data Streams 中建立和管理交付資源所需的 IAM 許可,以及資料交付將資料交付至目的地所擔任的服務執行角色。
生命週期管理許可
若要建立、更新、刪除、描述和列出交付資源,呼叫的 IAM 主體必須具有下列許可:
| Action | 資源 | 說明 |
|---|---|---|
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>:*" } ] }