View a markdown version of this page

Permissões do IAM para entrega de dados - Amazon Kinesis Data Streams

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Permissões do IAM para entrega de dados

Use este tópico para saber mais sobre as permissões do IAM necessárias para criar e gerenciar recursos de entrega no Amazon Kinesis Data Streams, bem como a função de execução do serviço que a entrega de dados assume para entregar dados ao seu destino.

Permissões de gerenciamento do ciclo de vida

Para criar, atualizar, excluir, descrever e listar recursos de entrega, o principal do IAM que está chamando deve ter as seguintes permissões:

Permissões de ciclo de vida de entrega
Ação Recurso Description
kinesis:CreateChannel Transmita ARN () arn:aws:kinesis:region:account-id:stream/stream-name Crie uma entrega em um stream do Kinesis Data Streams.
kinesis:AssociateStreamsWithChannel Transmita ARN () arn:aws:kinesis:region:account-id:stream/stream-name Associe um stream a uma entrega. Essa é uma ação virtual que o principal chamador deve receber para criar uma entrega que leia o fluxo especificado. É autorizado além dekinesis:CreateChannel.
kinesis:UpdateChannel Canal ARN () arn:aws:kinesis:region:account-id:channel/channel-id Atualize uma configuração de entrega existente.
kinesis:DeleteChannel Canal ARN Exclua uma entrega existente.
kinesis:DescribeChannel Canal ARN Recupere os detalhes de uma entrega.
kinesis:ListChannels Nível da conta (arn:aws:kinesis:region:account-id:stream/*) Liste todas as entregas na conta.

Perfil de execução do serviço

A entrega de dados pressupõe uma função de execução do serviço IAM para entregar dados ao seu destino. Você deve criar essa função e anexar uma política de confiança e uma política de permissão.

Política de confiança

A política de confiança permite que o serviço Kinesis Data Streams assuma a função. Inclua chaves de condição para evitar o problema confuso do delegado.

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

Política de permissão para streaming de tabelas no Apache Iceberg

Ao entregar para tabelas de streaming no Apache Iceberg, a função de execução do serviço exige as seguintes permissões:

{ "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é necessário somente quando você criptografa a tabela de destino com uma chave gerenciada pelo AWS KMS cliente. Sem ela, é CreateTable bem-sucedida, mas a criptografia da tabela falha e a tabela nunca é criada.

  • s3tables:TagResourceé necessário porque o serviço marca as tabelas que ele cria.

  • As AllowPutTableDataWithTag declarações AllowCreateTableWithTag e são opcionais. Inclua-os somente se quiser controle de acesso baseado em tags em vez de definir o escopo apenas pelo ARN da tabela. Eles restringem s3tables:CreateTable e s3tables:PutTableData aos recursos que carregam uma TableName etiqueta correspondente. Omita-os se você definir o escopo por ARN.

  • Só glue:GetSchemaVersion é necessário para o Glue Schema Registry. É necessário para os formatos JSON e GSR_JSON de entrada.

  • A KMSForCreateTimeValidation declaração permite que o Amazon Kinesis Data Streams valide sua AWS KMS chave ao criar a entrega. É necessário somente quando sua tabela de destino ou fluxo de origem usa uma AWS KMS chave gerenciada pelo cliente.

  • A KMSForS3TablesEncryption declaração concede as AWS KMS operações usadas para criptografar os dados da tabela entregue em repouso. É necessário somente quando seu bucket de mesa usa uma chave gerenciada pelo cliente.

  • A KMSForCreateTable declaração permite que o Amazon Kinesis Data Streams leia a configuração da chave ao criar a tabela de destino. É necessário somente quando o bucket de tabela usa uma chave gerenciada pelo cliente.

  • A KMSForDecryptSourceStreamRecords instrução permite que a função decodifique os registros lidos do fluxo de origem. É necessário somente quando seu stream do Kinesis Data Streams é criptografado com uma chave gerenciada pelo cliente.

Política de permissão para buckets Amazon S3 de uso geral

Ao entregar para buckets Amazon S3 de uso geral, a função de execução do serviço exige as seguintes permissões:

{ "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>" } } } ] }
  • A KMSForCreateTimeValidation declaração permite que o Amazon Kinesis Data Streams valide sua AWS KMS chave ao criar a entrega. É necessário somente quando seu bucket de destino ou fluxo de origem usa uma AWS KMS chave gerenciada pelo cliente.

  • A KMSForS3BucketEncryption declaração concede as AWS KMS operações que o Amazon S3 usa para criptografar objetos entregues em repouso. É necessário somente quando seu bucket de destino ou bucket de fila de cartas mortas é usado SSE-KMS com uma chave gerenciada pelo cliente. Os kms:EncryptionContext:aws:s3:arn valores mostrados usam o objeto ARN, que se aplica quando as chaves de bucket do S3 estão desativadas. Se você habilitar as chaves de bucket do S3 no bucket de destino ou no bucket de fila de letras mortas, o Amazon S3 usa o ARN do bucket como contexto de criptografia em vez do ARN do objeto, então você deve alterar o valor correspondente ao ARN desse bucket (por exemplo, ou). arn:aws:s3:::delivery-bucket-name arn:aws:s3:::dlq-bucket-name Para obter mais informações, consulte Configurando uma chave de bucket do S3 no Guia do usuário do Amazon S3.

  • A KMSForDecryptSourceStreamRecords instrução permite que a função decodifique os registros lidos do fluxo de origem. É necessário somente quando seu stream do Kinesis Data Streams é criptografado com uma chave gerenciada pelo cliente.

Importante

Se você restringir o s3:PutObject recurso a um prefixo específico (por exemplo,arn:aws:s3:::my-bucket/data*), as chaves de objeto geradas pelo seu modelo de chave de saída devem começar com esse mesmo prefixo. Uma incompatibilidade entre o prefixo do recurso IAM e o modelo da chave de saída resulta em erros de acesso negado e nenhum dado é entregue.

Por exemplo, se sua política ceder s3:PutObjectarn:aws:s3:::my-bucket/data*, seu modelo de chave de saída deverá começar comdata/, comodata/!{yyyy}/!{MM}/!{dd}/!{HH}/. Para evitar isso, defina o escopo do recurso para todo o bucket (arn:aws:s3:::my-bucket/*) ou garanta que os prefixos correspondam exatamente.

Permissões CloudWatch de registros opcionais

Se você habilitar o CloudWatch Logs para sua entrega, adicione as seguintes permissões à função de execução do serviço:

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