Gramática da linguagem das políticas de JSON do IAM - AWS Identity and Access Management

Gramática da linguagem das políticas de JSON do IAM

Esta página apresenta uma gramática formal para a linguagem usada para criar políticas de JSON no IAM. Apresentamos essa gramática para que você possa entender como construir e validar políticas.

Para obter exemplos de políticas, consulte os seguintes tópicos:

Para obter exemplos de políticas usadas em outros produtos da AWS, consulte a documentação desses produtos.

A linguagem das políticas e JSON

As políticas são expressas em JSON. Quando você cria ou edita uma política JSON, o IAM pode executar a validação de políticas para ajudar você a criar uma política eficaz. O IAM identifica erros de sintaxe JSON, enquanto o IAM Access Analyzer fornece verificações de políticas adicionais com recomendações para ajudar você a refinar ainda mais suas políticas. Para saber mais sobre validação de política, consulte Validação de políticas do IAM. Para saber mais sobre as verificações de política do IAM Access Analyzer e as recomendações práticas, consulte Validação de política do IAM Access Analyzer.

Neste documento, não fornecemos uma descrição completa dos elementos que constituem o JSON válido. No entanto, veja a seguir algumas regras básicas de JSON:

  • Espaço em branco entre entidades individuais é permitido.

  • Os valores são colocados entre aspas. Aspas são opcionais para valores numéricos e boolianos.

  • Muitos elementos (por exemplo, action_string_list e resource_string_list) podem levar uma matriz JSON como um valor. As matrizes podem levar um ou mais valores. Se mais de um valor for incluído, a matriz será inserida em colchetes ([ e ]) e delimitada por vírgula, como no exemplo a seguir:

    "Action" : ["ec2:Describe*","ec2:List*"]

  • Os tipos de dados JSON básicos (Booliano, número e string) são definidos na RFC 7159.

Convenções usadas nesta gramática

As seguintes convenções são usadas nesta gramática:

  • Os caracteres a seguir são tokens JSON e são incluídos nas políticas:

    { } [ ] " , :

  • Os caracteres a seguir são caracteres especiais na gramática e não são incluídos nas políticas:

    = < > ( ) |

  • Se um elemento permitir vários valores, ele será indicado com valores repetidos, um delimitador de vírgula e reticências (...). Exemplos:

    [<action_string>, <action_string>, ...]

    <principal_map> = { <principal_map_entry>, <principal_map_entry>, ... }

    Se vários valores forem permitidos, também será válido incluir apenas um valor. Para apenas um valor, a vírgula à direita deve ser omitida. Se o elemento levar uma matriz (marcada com [e]), mas apenas um valor for incluído, os colchetes serão opcionais. Exemplos:

    "Action": [<action_string>]

    "Action": <action_string>

  • Um ponto de interrogação (?) depois de um elemento indica que o elemento é opcional. Exemplo:

    <version_block?>

    No entanto, consulte as notas após a listagem de gramática para obter mais detalhes sobre elementos opcionais.

  • Uma linha vertical (|) entre os elementos indica alternativas. Na gramática, parênteses definem o escopo das alternativas. Exemplo:

    ("Principal" | "NotPrincipal")

  • Elementos que devem ser strings literais são inseridos entre aspas duplas ("). Exemplo:

    <version_block> = "Version" : ("2008-10-17" | "2012-10-17")

Para notas adicionais, consulte Notas sobre a gramática das políticas após a listagem de gramática.

Gramática

A lista a seguir descreve a gramática da linguagem das políticas. Para obter as convenções usadas na lista, consulte a seção anterior. Para obter informações adicionais, consulte as notas que se seguem.

nota

Essa gramática descreve as políticas marcadas com uma versão de 2008-10-17 e 2012-10-17. Um elemento de política Version é diferente de uma versão de política. O elemento de política Version é usado em uma política e define a versão da linguagem da política. A versão da política, por outro lado, é criada quando você faz alterações em uma política gerenciada pelo cliente no IAM. A política alterada não substitui a política existente. Em vez disso, o IAM cria uma nova versão da política gerenciada. Para saber mais sobre o elemento de política Version, consulte Elementos de política JSON do IAM: Version. Para saber mais sobre as versões de política, consulte Versionamento de políticas do IAM.

policy = { <version_block?> <id_block?> <statement_block> } <version_block> = "Version" : ("2008-10-17" | "2012-10-17") <id_block> = "Id" : <policy_id_string> <statement_block> = "Statement" : [ <statement>, <statement>, ... ] <statement> = { <sid_block?>, <principal_block?>, <effect_block>, <action_block>, <resource_block>, <condition_block?> } <sid_block> = "Sid" : <sid_string> <effect_block> = "Effect" : ("Allow" | "Deny") <principal_block> = ("Principal" | "NotPrincipal") : ("*" | <principal_map>) <principal_map> = { <principal_map_entry>, <principal_map_entry>, ... } <principal_map_entry> = ("AWS" | "Federated" | "Service" | "CanonicalUser") : [<principal_id_string>, <principal_id_string>, ...] <action_block> = ("Action" | "NotAction") : ("*" | [<action_string>, <action_string>, ...]) <resource_block> = ("Resource" | "NotResource") : : ("*" | <resource_string> | [<resource_string>, <resource_string>, ...]) <condition_block> = "Condition" : { <condition_map> } <condition_map> = { <condition_type_string> : { <condition_key_string> : <condition_value_list> }, <condition_type_string> : { <condition_key_string> : <condition_value_list> }, ... } <condition_value_list> = [<condition_value>, <condition_value>, ...] <condition_value> = (<condition_value_string> | <condition_value_string> | <condition_value_string>)

Notas sobre a gramática das políticas

  • Uma única política pode conter um conjunto de instruções.

  • As políticas têm um tamanho máximo de 2048 caracteres e 10.240 caracteres, dependendo do elemento ao qual a política está anexada. Para ter mais informações, consulte IAM e cotas do AWS STS. Os cálculos de tamanho da política não incluem caracteres de espaço em branco.

  • Elementos individuais não devem conter várias instâncias da mesma chave. Por exemplo, você não pode incluir o bloco Effect duas vezes na mesma instrução.

  • Os blocos podem aparecer em qualquer ordem. Por exemplo, version_block pode seguir id_block em uma política. Da mesma forma, effect_block, principal_block, action_block podem aparecer em qualquer ordem dentro de uma instrução.

  • O id_block é opcional em políticas baseadas em recursos. Não deve ser incluído em políticas baseadas em identidades.

  • O elemento principal_block é necessário em políticas baseadas em recurso (por exemplo, em políticas de bucket do Amazon S3) e em políticas de confiança para funções do IAM. Não deve ser incluído em políticas baseadas em identidades.

  • O elemento principal_map nas políticas de bucket do Amazon S3 pode incluir o ID CanonicalUser. A maioria das políticas baseadas em recursos não oferece suporte a esse mapeamento. Para saber mais sobre como usar o ID canônico de usuário em uma política de bucket, consulte Como especificar uma entidade principal em uma política no Guia do usuário do Amazon Simple Storage Service.

  • Cada valor de string (policy_id_string, sid_string, principal_id_string, action_string, resource_string, condition_type_string, condition_key_string e a versão de string de condition_value) pode ter suas próprias restrições de tamanho mínimo e máximo, valores permitidos específicos ou o formato interno necessário.

Notas sobre valores de string

Esta seção fornece informações adicionais sobre valores de string que são usados em diferentes elementos em uma política.

action_string

Consiste em um namespace de serviço, dois pontos e o nome de uma ação. Os nomes de ação podem incluir curingas. Exemplos:

"Action":"ec2:StartInstances" "Action":[ "ec2:StartInstances", "ec2:StopInstances" ] "Action":"cloudformation:*" "Action":"*" "Action":[ "s3:Get*", "s3:List*" ]
policy_id_string

Oferece uma maneira de incluir informações sobre a política como um todo. Alguns serviços, como o Amazon SQS e o Amazon SNS, usam o elemento Id de formas reservadas. A menos que isso seja proibido por um serviço individual, policy_id_string pode incluir espaços. Alguns serviços exigem que esse valor seja exclusivo em uma conta da AWS.

nota

O id_block é permitido em políticas baseadas em recursos, mas não em políticas baseadas em identidades.

Não há limite para o tamanho, embora essa string contribua para o comprimento geral da política, que é limitado.

"Id":"Admin_Policy" "Id":"cd3ad3d9-2776-4ef1-a904-4c229d1642ee"
sid_string

Oferece uma maneira de incluir informações sobre uma instrução individual. Para políticas do IAM, caracteres alfanuméricos básicos (A-Z, a-z, 0-9) são os únicos caracteres permitidos no valor Sid. Outros serviços da AWS que oferecem suporte a políticas de recursos podem ter outros requisitos para o valor Sid. Por exemplo, alguns serviços exigem esse valor para serem exclusivos em uma Conta da AWS, e alguns serviços permitem caracteres adicionais, como espaços no valor Sid.

"Sid":"1" "Sid": "ThisStatementProvidesPermissionsForConsoleAccess"
principal_id_string

Fornece uma maneira de especificar uma entidade de segurança usando o nome do recurso da Amazon (ARN) da Conta da AWS do usuário do IAM, do perfil do IAM, do usuário federado ou do usuário de perfil assumido. Para uma Conta da AWS, você também pode usar a forma curta AWS:accountnumber em vez de todo o ARN. Para todas as opções, incluindo serviços da AWS, funções assumidas etc., consulte Especificar um principal.

Você pode usar * apenas para especificar "todos/anônimo". Não é possível usá-lo para especificar parte de um nome ou ARN.

resource_string

Na maioria dos casos, consiste em um nome de recurso da Amazon (ARN).

"Resource":"arn:aws:iam::123456789012:user/Bob" "Resource":"arn:aws:s3:::examplebucket/*"
condition_type_string

Identifica o tipo de condição que está sendo testado, como StringEquals, StringLike, NumericLessThan, DateGreaterThanEquals, Bool, BinaryEquals, IpAddress, ArnEquals, etc. Para obter uma lista completa de tipos de condição, consulte Elementos de política JSON do IAM: operadores de condição.

"Condition": { "NumericLessThanEquals": { "s3:max-keys": "10" } } "Condition": { "Bool": { "aws:SecureTransport": "true" } } "Condition": { "StringEquals": { "s3:x-amz-server-side-encryption": "AES256" } }
condition_key_string

Identifica a chave de condição cujo valor será testado para determinar se a condição foi atendida. A AWS define um conjunto de chaves de condição que estão disponíveis em todos os produtos da AWS, incluindo aws:PrincipalType, aws:SecureTransport e aws:userid.

Para obter uma lista de chaves de condição da AWS, consulte Chaves de contexto de condição globais da AWS. Para chaves de condição que são específicas a um serviço, consulte a documentação do serviço, como o seguinte:

"Condition":{ "Bool": { "aws:SecureTransport": "true" } } "Condition": { "StringNotEquals": { "s3:x-amz-server-side-encryption": "AES256" } } "Condition": { "StringEquals": { "aws:ResourceTag/purpose": "test" } }
condition_value_string

Identifica o valor de condition_key_string que determina se a condição foi atendida. Para obter uma lista completa de valores válidos para um tipo de condição, consulte Elementos de política JSON do IAM: operadores de condição.

"Condition":{ "ForAnyValue:StringEquals": { "dynamodb:Attributes": [ "ID", "PostDateTime" ] } }