Controlar o acesso aos recursos do Amazon Kinesis Data Streams usando o IAM - Amazon Kinesis Data Streams

Controlar o acesso aos recursos do Amazon Kinesis Data Streams usando o IAM

O AWS Identity and Access Management (IAM) permite:

  • Criar usuários e grupos na conta da AWS

  • Atribuir credenciais de segurança exclusivas a cada usuário em sua conta da AWS

  • Controlar as permissões de cada usuário para executar tarefas usando recursos da AWS

  • Permitir que os usuários em outra conta da AWS compartilhem seus recursos da AWS

  • Criar funções para sua conta da AWS e defina os usuários ou os serviços que podem assumi-las

  • Usar identidades existentes em sua empresa a fim de conceder permissões para executar tarefas usando recursos da AWS

Ao usar o IAM com o Kinesis Data Streams, é possível controlar se os usuários de sua organização podem executar uma tarefa usando ações específicas da API do Kinesis Data Streams e se podem usar recursos específicos da AWS.

Ao desenvolver uma aplicação usando a Kinesis Client Library (KCL), a política precisará incluir permissões para o Amazon DynamoDB e o Amazon CloudWatch. A KCL usa o DynamoDB para rastrear informações de estado da aplicação e o CloudWatch para enviar métricas da KCL ao CloudWatch em seu nome. Para obter mais informações sobre o recurso KCL, consulte Desenvolver aplicações de consumo da KCL 1.x.

Para mais informações sobre IAM, consulte o seguinte:

Para obter mais informações sobre o IAM e o DynamoDB, consulte Usar o IAM para controlar o acesso a recursos do Amazon DynamoDB no Guia do desenvolvedor do Amazon DynamoDB.

Para obter mais informações sobre o IAM e o Amazon CloudWatch, consulte Controlar o acesso do usuário à sua conta da AWS no Guia do usuário do Amazon CloudWatch.

Sintaxe da política

A política do IAM é um documento JSON que consiste em uma ou mais declarações. Cada instrução é estruturada da seguinte maneira:

{ "Statement":[{ "Effect":"effect", "Action":"action", "Resource":"arn", "Condition":{ "condition":{ "key":"value" } } } ] }

Existem vários elementos que compõem uma instrução:

  • Effect: o efeito pode ser Allow ou Deny. Por padrão, os usuários do IAM não têm permissão para usar recursos e ações da API. Por isso, todas as solicitações são negadas. Uma permissão explícita substitui o padrão. Uma negação explícita substitui todas as permissões.

  • Ação: é a ação de API específica para a qual a permissão esteja sendo concedida ou negada.

  • Recurso: o recurso afetado pela ação. Para especificar um recurso na declaração, é necessário usar o nome do recurso da Amazon (ARN).

  • Condição: condições são opcionais. Elas podem ser usadas para controlar quando as políticas entrarão em vigor.

Ao criar e gerenciar políticas do IAM, pode ser conveniente usar o gerador de políticas do IAM e o simulador de políticas do IAM.

Ações para o Kinesis Data Streams

Em uma declaração de política do IAM, é possível especificar qualquer ação de API de qualquer serviço que dê suporte ao IAM. Para o Kinesis Data Streams, use o seguinte prefixo com o nome da ação da API: kinesis:. Por exemplo: kinesis:CreateStream, kinesis:ListStreams e kinesis:DescribeStreamSummary.

Para especificar várias ações em uma única instrução, separe-as com vírgulas, como segue:

"Action": ["kinesis:action1", "kinesis:action2"]

Também é possível especificar várias ações usando asteriscos. Por exemplo, é possível especificar todas as ações cujo nome começa com a palavra "Obter", conforme o seguinte:

"Action": "kinesis:Get*"

Para especificar todas as operações do Kinesis Data Streams, use o curinga *, como a seguir:

"Action": "kinesis:*"

Para obter a lista completa das ações da API do Kinesis Data Streams, consulte a Referência de API do Amazon Kinesis.

Nomes de recursos da Amazon (ARNs) para o Kinesis Data Streams

Cada declaração de política do IAM se aplica aos recursos especificados usando os ARNs.

Use o seguinte formato de recursos do ARN para os fluxos de dados do Kinesis:

arn:aws:kinesis:region:account-id:stream/stream-name

Por exemplo:

"Resource": arn:aws:kinesis:*:111122223333:stream/my-stream

Exemplo de políticas para o Kinesis Data Streams

As políticas de exemplo a seguir demonstram como é possível controlar o acesso do usuário aos fluxos de dados do Kinesis.

Example 1: Allow users to get data from a stream

Esta política permite que um usuário ou grupo execute as operações DescribeStreamSummary, GetShardIterator e GetRecords no fluxo especificado e ListStreams em qualquer stream. Esta política pode ser aplicada a usuários que devem conseguir obter dados de um fluxo específico.

JSON
JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kinesis:Get*", "kinesis:DescribeStreamSummary" ], "Resource": [ "arn:aws:kinesis:us-east-1:111122223333:stream/stream1" ] }, { "Effect": "Allow", "Action": [ "kinesis:ListStreams" ], "Resource": [ "*" ] } ] }
Example 2: Allow users to add data to any stream in the account

Esta política permite que um usuário ou grupo use a operação PutRecord com qualquer um dos streams da conta. Esta política pode ser aplicada a usuários que devem conseguir adicionar registros de dados a todos os streams em uma conta.

JSON
JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kinesis:PutRecord" ], "Resource": [ "arn:aws:kinesis:us-east-1:111122223333:stream/*" ] } ] }
Example 3: Allow any Kinesis Data Streams action on a specific stream

Esta política permite que um usuário ou grupo use qualquer operação do Kinesis Data Streams no fluxo especificado. Esta política poderia ser aplicada a usuários que devem ter controle administrativo por meio de um fluxo específico.

JSON
JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "kinesis:*", "Resource": [ "arn:aws:kinesis:us-east-1:111122223333:stream/stream1" ] } ] }
Example 4: Allow any Kinesis Data Streams action on any stream

Esta política permite que um usuário ou grupo use qualquer operação do Kinesis Data Streams em qualquer fluxo em uma conta. Como esta política concede acesso total a todos os fluxos, deve-se restringi-la somente aos administradores.

JSON
JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "kinesis:*", "Resource": [ "arn:aws:kinesis:*:111122223333:stream/*" ] } ] }

Compartilhamento do fluxo de dados com outra conta

nota

Atualmente, a Kinesis Producer Library não suporta a especificação de um ARN de fluxo ao gravar em um fluxo de dados. Use o SDK da AWS se quiser gravar em um fluxo de dados entre contas.

Anexe uma política baseada em recursos ao fluxo de dados para conceder acesso a outra conta, a um usuário do IAM ou a um perfil do IAM. As políticas baseadas em recursos são documentos de política JSON anexadas a um recurso, como um fluxo de dados. Essas políticas concedem permissão para a entidade principal especificada executar ações específicas nesse recurso e definem sob quais condições isso se aplica. Uma política pode ter várias declarações. É necessário especificar um principal em uma política baseada em recursos. Os principais podem incluir contas, usuários, funções, usuários federados ou serviços da AWS. É possível configurar políticas no console do Kinesis Data Streams, na API ou no SDK.

Observe que compartilhar o acesso a consumidores registrados, como o Enhanced Fan Out, exige uma política tanto no ARN do fluxo de dados quanto no ARN do consumidor.

Ativação do acesso entre contas

Para permitir o acesso entre contas, é possível especificar uma conta inteira ou as entidades do IAM em outra conta como a entidade principal em uma política baseada em atributo. Adicionar uma entidade principal entre contas à política baseada em recurso é apenas metade da tarefa de estabelecimento da relação de confiança. Quando a entidade principal e o recurso estiverem em contas separadas da AWS, também será necessário usar uma política baseada em identidade para conceder o acesso à entidade principal para o recurso. No entanto, se uma política baseada em recurso conceder acesso a uma entidade principal na mesma conta, nenhuma política baseada em identidade adicional será necessária.

Para obter mais informações sobre como usar políticas baseadas em recursos para acesso entre contas, consulte Acesso a recursos entre contas no IAM.

Os administradores do fluxo de dados podem usar as políticas do AWS Identity and Access Management para especificar quem tem acesso a quê. Ou seja, qual entidade principal pode executar ações em quais recursos e em que condições. O elemento Action de uma política JSON descreve as ações que podem ser usadas para permitir ou negar acesso em uma política. As ações de políticas geralmente têm o mesmo nome que a operação de API da AWS associada.

Ações do Kinesis Data Streams que podem ser compartilhadas:

Ação Nível de acesso
DescribeStreamConsumer Consumidor
DescribeStreamSummary Fluxo de dados
GetRecords Fluxo de dados
GetShardIterator Fluxo de dados
ListShards Fluxo de dados
PutRecord Fluxo de dados
PutRecords Fluxo de dados
SubscribeToShard Consumidor

Veja a seguir exemplos do uso de uma política baseada em recursos para conceder acesso entre contas ao fluxo de dados ou ao consumidor registrado.

Para realizar uma ação entre contas, é necessário especificar o ARN do fluxo para acesso ao fluxo de dados e o ARN do consumidor para o acesso do consumidor registrado.

Exemplo de políticas baseadas em recursos para fluxo de dados do Kinesis

Compartilhar um consumidor registrado envolve uma política de fluxo de dados e uma política de consumidor devido às ações necessárias.

nota

Veja os seguintes exemplos de valores válidos para Principal:

  • {"AWS": "123456789012"}

  • Usuário do IAM: {"AWS": "arn:aws:iam::123456789012:user/user-name"}

  • Perfil do IAM: {"AWS":["arn:aws:iam::123456789012:role/role-name"]}

  • Várias entidades principais (pode ser uma combinação de contas, usuários, perfis): {"AWS":["123456789012", "123456789013", "arn:aws:iam::123456789012:user/user-name"]}

Example 1: Write access to the data stream
JSON
JSON
{ "Version":"2012-10-17", "Id": "__default_write_policy_ID", "Statement": [ { "Sid": "writestatement", "Effect": "Allow", "Principal": { "AWS": "Account12345" }, "Action": [ "kinesis:DescribeStreamSummary", "kinesis:ListShards", "kinesis:PutRecord", "kinesis:PutRecords" ], "Resource": "arn:aws:kinesis:us-east-2:123456789012:stream/datastreamABC" } ] }
Example 2: Read access to the data stream
JSON
JSON
{ "Version":"2012-10-17", "Id": "__default_sharedthroughput_read_policy_ID", "Statement": [ { "Sid": "sharedthroughputreadstatement", "Effect": "Allow", "Principal": { "AWS": "Account12345" }, "Action": [ "kinesis:DescribeStreamSummary", "kinesis:ListShards", "kinesis:GetRecords", "kinesis:GetShardIterator" ], "Resource": "arn:aws:kinesis:us-east-2:123456789012:stream/datastreamABC" } ] }
Example 3: Share enhanced fan-out read access to a registered consumer

Declaração de política de fluxo de dados:

JSON
JSON
{ "Version":"2012-10-17", "Id": "__default_sharedthroughput_read_policy_ID", "Statement": [ { "Sid": "consumerreadstatement", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/role-name" }, "Action": [ "kinesis:DescribeStreamSummary", "kinesis:ListShards" ], "Resource": "arn:aws:kinesis:us-east-2:123456789012:stream/datastreamABC" } ] }

Declaração de política de consumidor:

JSON
JSON
{ "Version":"2012-10-17", "Id": "__default_efo_read_policy_ID", "Statement": [ { "Sid": "eforeadstatement", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/role-name" }, "Action": [ "kinesis:DescribeStreamConsumer", "kinesis:SubscribeToShard" ], "Resource": "arn:aws:kinesis:us-east-2:123456789012:stream/datastreamABC/consumer/consumerDEF:1674696300" } ] }

Não há suporte para o caractere curinga (*) no campo de ações ou entidade principal, a fim de manter o princípio do privilégio mínimo.

Gerenciamento da política para o fluxo de dados de forma programática

Além do Console de gerenciamento da AWS, o Kinesis Data Streams tem três APIS para gerenciar sua política de fluxo de dados:

Use PutResourePolicy para anexar ou substituir uma política de um fluxo de dados ou consumidor. Use GetResourcePolicy para verificar e visualizar uma política do fluxo de dados ou consumidor especificado. Use DeleteResourcePolicy para excluir uma política do fluxo de dados ou consumidor especificado.

Limites de políticas

As políticas de recursos do Kinesis Data Streams têm as restrições a seguir.

  • Curingas (*) não são aceitos para ajudar a impedir que o acesso amplo seja concedido por meio de políticas de recursos diretamente vinculadas a um fluxo de dados ou consumidor registrado. Além disso inspecione com cuidado as seguintes políticas para garantir que elas não concedam acesso amplo:

    • Políticas baseadas em identidade vinculadas a entidades principais da AWS associadas (por exemplo, perfis do IAM).

    • Políticas baseadas em recursos vinculadas a recursos da AWS associados (por exemplo, chaves do KMS AWS Key Management Service)

  • Não há suporte para as entidades principais de serviço da AWS para que as mesmas possam evitar potenciais problemas de confused deputies.

  • Não há suporte para entidades principais federadas.

  • Não há suporte para IDs de usuário canônicos.

  • O tamanho da política não pode exceder 20 kB.

Compartilhamento de acesso a dados criptografados

Se for habilitada a criptografia no lado do servidor para um fluxo de dados com a chave gerenciada do KMS da AWS e for necessário compartilhar o acesso por meio de uma política de recursos, deve-se passar a usar a chave gerenciada pelo cliente (CMK). Para obter mais informações, consulte O que é criptografia no lado do servidor para o Kinesis Data Streams?. Além disso, deve-se permitir que as entidades principais de compartilhamento tenham acesso à sua CMK, usando os recursos de compartilhamento entre contas do KMS. Certifique-se também de fazer a alteração nas políticas do IAM para as entidades principais de compartilhamento. Para ter mais informações, consulte o tópico sobre como Permitir que usuários de outras contas utilizem uma chave do KMS.

Configuração de uma função do AWS Lambda para ler do Kinesis Data Streams em outra conta

Para ver um exemplo de como configurar uma função do Lambda para ler do Kinesis Data Streams em outra conta, consulte Compartilhamento de acesso com funções do AWS Lambda entre contas.