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:
-
Políticas e permissões no AWS Identity and Access Management
-
Políticas de exemplo para trabalhar no console do Amazon EC2 e Políticas de exemplo para trabalhar com a AWS CLI, a CLI do Amazon EC2ou um AWS SDK no Guia do usuário do Amazon EC2.
-
Exemplos de políticas de bucket e Exemplos de política de usuário no Guia do usuário do Amazon Simple Storage Service.
Para obter exemplos de políticas usadas em outros produtos da AWS, consulte a documentação desses produtos.
Tópicos
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ítica 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
eresource_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 seguirid_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 IDCanonicalUser
. 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 decondition_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 valorSid
. 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 valorSid
."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:
em vez de todo o ARN. Para todas as opções, incluindo serviços da AWS, funções assumidas etc., consulte Como especificar uma entidade principal.accountnumber
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:::amzn-s3-demo-bucket/*"
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
eaws: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:
-
Como especificar condições em uma política no Guia do usuário do Amazon Simple Storage Service
-
Políticas do IAM para o Amazon EC2 no Guia do usuário do Amazon EC2.
"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
" ] } }