Criar uma tabela com uma política baseada em recursos - Amazon DynamoDB

Criar uma tabela com uma política baseada em recursos

É possível adicionar uma política baseada em recursos ao criar uma tabela usando o console do DynamoDB, a API CreateTable, a AWS CLI, o SDK da AWS ou um modelo do AWS CloudFormation.

O exemplo a seguir cria uma tabela chamada MusicCollection usando o comando create-table da AWS CLI. Esse comando também inclui o parâmetro resource-policy que adiciona uma política baseada em recursos à tabela. Essa política possibilita que o usuário John realize as ações da API RestoreTableToPointInTime, GetItem e PutItem na tabela.

Lembre-se de substituir o texto em itálico pelas informações específicas do recurso.

aws dynamodb create-table \ --table-name MusicCollection \ --attribute-definitions AttributeName=Artist,AttributeType=S AttributeName=SongTitle,AttributeType=S \ --key-schema AttributeName=Artist,KeyType=HASH AttributeName=SongTitle,KeyType=RANGE \ --provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5 \ --resource-policy \ "{ \"Version\": \"2012-10-17\", \"Statement\": [ { \"Effect\": \"Allow\", \"Principal\": { \"AWS\": \"arn:aws:iam::123456789012:user/John\" }, \"Action\": [ \"dynamodb:RestoreTableToPointInTime\", \"dynamodb:GetItem\", \"dynamodb:DescribeTable\" ], \"Resource\": \"arn:aws:dynamodb:us-west-2:123456789012:table/MusicCollection\" } ] }"
  1. Faça login no AWS Management Console e abra o console do DynamoDB em https://console.aws.amazon.com/dynamodb/.

  2. No painel, selecione Criar tabela.

  3. Em Detalhes da tabela, insira o nome da tabela, a chave de partição e os detalhes da chave de classificação.

  4. Em Configurações da tabela, selecione Personalizar configurações.

  5. (Opcional) Especifique as opções para Classe de tabela, Calculadora de capacidade, Configurações de capacidade de leitura/gravação, Índices secundários, Criptografia em repouso e Proteção contra exclusão.

  6. Em Política baseada em recursos, adicione uma política para definir as permissões de acesso para a tabela e seus índices. Nessa política, você especifica quem tem acesso a esses recursos e as ações que podem realizar em cada recurso. Para adicionar uma política, siga um destes procedimentos:

    • Digite ou cole um documento de política JSON. Para ter detalhes sobre a linguagem de política do IAM, consulte Criar políticas usando o editor de JSON no Guia do usuário do IAM.

      dica

      Para ver exemplos de políticas baseadas em recursos no Guia do desenvolvedor do Amazon DynamoDB, selecione Exemplos de políticas.

    • Selecione Adicionar nova declaração para adicionar uma nova declaração e insira as informações nos campos fornecidos. Repita esta etapa para todas as instruções que deseja adicionar.

    Importante

    Solucione avisos de segurança, erros ou sugestões antes de salvar a política.

    O exemplo de política do IAM a seguir possibilita que o usuário John realize as ações da API RestoreTableToPointInTime, GetItem e PutItem na tabela MusicCollection.

    Lembre-se de substituir o texto em itálico pelas informações específicas do recurso.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/John" }, "Action": [ "dynamodb:RestoreTableToPointInTime", "dynamodb:GetItem", "dynamodb:PutItem" ], "Resource": "arn:aws:dynamodb:us-east-1:123456789012:table/MusicCollection" } ] }
  7. (Opcional) Escolha Preview external access (Pré-visualizar o acesso externo) na canto inferior direito para pré-visualizar a forma como sua nova política afetará o acesso público e entre contas ao seu recurso. Antes de salvar sua política, você pode verificar se ela introduz novas descobertas do IAM Access Analyzer ou resolve as descobertas existentes. Se você não vir um analisador ativo, escolha Go to Access Analyzer (Acessar o Access Analyzer) para criar um analisador de contas no IAM Access Analyzer. Para ter mais informações, consulte Acesso de visualização.

  8. Escolha Create table.

Using the AWS::DynamoDB::Table resource

O modelo do CloudFormation a seguir cria uma tabela com um fluxo usando o recurso AWS::DynamoDB::Table. Esse modelo também inclui políticas baseadas em recursos que são associadas à tabela e ao fluxo.

{ "AWSTemplateFormatVersion": "2010-09-09", "Resources": { "MusicCollectionTable": { "Type": "AWS::DynamoDB::Table", "Properties": { "AttributeDefinitions": [ { "AttributeName": "Artist", "AttributeType": "S" } ], "KeySchema": [ { "AttributeName": "Artist", "KeyType": "HASH" } ], "BillingMode": "PROVISIONED", "ProvisionedThroughput": { "ReadCapacityUnits": 5, "WriteCapacityUnits": 5 }, "StreamSpecification": { "StreamViewType": "OLD_IMAGE", "ResourcePolicy": { "PolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Principal": { "AWS": "arn:aws:iam::111122223333:user/John" }, "Effect": "Allow", "Action": [ "dynamodb:GetRecords", "dynamodb:GetShardIterator", "dynamodb:DescribeStream" ], "Resource": "*" } ] } } }, "TableName": "MusicCollection", "ResourcePolicy": { "PolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Principal": { "AWS": [ "arn:aws:iam::111122223333:user/John" ] }, "Effect": "Allow", "Action": "dynamodb:GetItem", "Resource": "*" } ] } } } } } }
Using the AWS::DynamoDB::GlobalTable resource

O modelo do CloudFormation a seguir cria uma tabela com o recurso AWS::DynamoDB::GlobalTable e associa uma política baseada em recursos à tabela e ao seu fluxo.

{ "AWSTemplateFormatVersion": "2010-09-09", "Resources": { "GlobalMusicCollection": { "Type": "AWS::DynamoDB::GlobalTable", "Properties": { "TableName": "MusicCollection", "AttributeDefinitions": [{ "AttributeName": "Artist", "AttributeType": "S" }], "KeySchema": [{ "AttributeName": "Artist", "KeyType": "HASH" }], "BillingMode": "PAY_PER_REQUEST", "StreamSpecification": { "StreamViewType": "NEW_AND_OLD_IMAGES" }, "Replicas": [ { "Region": "us-east-1", "ResourcePolicy": { "PolicyDocument": { "Version": "2012-10-17", "Statement": [{ "Principal": { "AWS": [ "arn:aws:iam::111122223333:user/John" ] }, "Effect": "Allow", "Action": "dynamodb:GetItem", "Resource": "*" }] } }, "ReplicaStreamSpecification": { "ResourcePolicy": { "PolicyDocument": { "Version": "2012-10-17", "Statement": [{ "Principal": { "AWS": "arn:aws:iam::111122223333:user/John" }, "Effect": "Allow", "Action": [ "dynamodb:GetRecords", "dynamodb:GetShardIterator", "dynamodb:DescribeStream" ], "Resource": "*" }] } } } } ] } } } }