Gramática del lenguaje de la política JSON de IAM
En esta página se presenta una gramática formal del lenguaje que se utiliza para crear políticas JSON en IAM. Presentamos esta gramática para que pueda comprender cómo diseñar y validar políticas.
Para ver políticas de ejemplo, consulte los siguientes temas:
-
Políticas de ejemplo para trabajar en la consola de Amazon EC2 y políticas de ejemplo para trabajar con la CLI de AWS, la CLI de Amazon EC2 o un AWS SDK en la Guía del usuario de Amazon EC2.
-
Ejemplos de política de bucket y Ejemplos de políticas de usuario en la Guía del usuario de Amazon Simple Storage Service.
Para ver ejemplos de políticas utilizadas en otros servicios de AWS, consulte la documentación de dichos servicios.
Temas
El lenguaje de la política y JSON
Las políticas se expresan en JSON. Cuando usted crea o edita una política JSON, IAM puede realizar la validación de políticas para ayudarle a crear una política eficaz. IAM identifica errores de sintaxis JSON, mientras que Analizador de acceso de IAM proporciona verificaciones de políticas adicionales con recomendaciones para ayudarle a perfeccionar aún más las políticas. Para obtener más información acerca la validación de políticas, consulte Validación de la política de IAM. Para obtener más información acerca de las verificaciones de políticas de IAM Access Analyzer y las recomendaciones procesables, consulte Validación de políticas de IAM Access Analyzer.
En este documento, no podemos proporcionar una descripción completa de lo que constituye un código JSON válido. Sin embargo, presentamos algunas reglas de JSON básicas:
-
Se permiten espacios en blanco entre entidades individuales.
-
Los valores se encierran entre comillas. El uso de las comillas es opcional para los valores numéricos y booleanos.
-
Muchos elementos (por ejemplo,
action_string_list
yresource_string_list
) pueden utilizar una matriz JSON como valor. Las matrices pueden tener uno o varios valores. Si se incluye más de un valor, la matriz se encierra entre corchetes ([
y]
) y los valores se delimitan con comas, como en el siguiente ejemplo:"Action" : ["ec2:Describe*","ec2:List*"]
-
Los tipos de datos JSON básicos (booleanos, número y cadena) se definen en RFC 7159
.
Convenciones utilizadas en esta gramática
En esta gramática se utilizan las siguientes convenciones:
-
Los siguientes caracteres son tokens de JSON y se incluyen en las políticas:
{ } [ ] " , :
-
Los siguientes caracteres son caracteres especiales de la gramática y no se incluyen en las políticas:
= < > ( ) |
-
Si un elemento permite varios valores, se indicará mediante valores repetidos, un delimitador por comas y puntos suspensivos (
...
). Ejemplos:[<action_string>, <action_string>, ...]
<principal_map> = { <principal_map_entry>, <principal_map_entry>, ... }
Si se permiten múltiples valores, también se podrá incluir un solo valor. En el caso de un solo valor, se omite la coma final. Si el elemento tiene una matriz (marcada con [ y ]), pero solo incluye un valor, los paréntesis son opcionales. Ejemplos:
"Action": [<action_string>]
"Action": <action_string>
-
Un signo de interrogación (
?
) detrás de un elemento indica que dicho elemento es opcional. Ejemplo:<
version_block?>
Sin embargo, consulte las notas relativas a la gramática que se muestran a continuación para obtener más información acerca de los elementos opcionales.
-
Una línea vertical (
|
) entre elementos indica alternativas. En la gramática, los paréntesis definen el alcance de las alternativas. Ejemplo:("Principal" | "NotPrincipal")
-
Los elementos que deben ser cadenas literales se encierran entre comillas dobles (
"
). Ejemplo:<version_block> = "Version" : ("2008-10-17" | "2012-10-17")
Para notas adicionales, consulte la sección Notas sobre la gramática de la política que se presenta tras la descripción de la gramática.
Gramática
En la siguiente lista se describe la gramática del lenguaje de la política. Para obtener más información sobre las convenciones utilizada aquí, consulte la sección anterior. Para obtener información adicional, consulte las siguientes notas.
nota
Esta gramática describe las políticas marcadas con una versión del 2008-10-17
y 2012-10-17
. El elemento de política Version
es diferente de la versión de una política. El elemento de política Version
se utiliza en una política y define la versión del lenguaje de la política. Una versión de política, por otro lado, se crea al realizar cambios en una política administrada por el cliente en IAM. La política modificada no anula la política existente. En cambio, IAM crea una nueva versión de la política administrada. Para obtener más información sobre el elemento de política Version
, consulte Elementos de política JSON de IAM: Version. Para obtener más información sobre las versiones de política, consulte Control de versiones de políticas de 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 la gramática de la política
-
Una única política puede contener una matriz de instrucciones.
-
Las políticas tienen un tamaño máximo de entre 2 048 caracteres y 10 240 caracteres, dependiendo de a qué entidad está asociada la política. Para obtener más información, consulte IAM y cuotas de AWS STS. Los cálculos del tamaño de la política no incluyen los espacios en blanco.
-
Los elementos individuales no deben contener varias instancias de la misma clave. Por ejemplo, no puede incluir el bloque
Effect
dos veces en la misma instrucción. -
Los bloques pueden seguir cualquier orden. Por ejemplo,
version_block
puede ir detrás deid_block
en una política. Del mismo modo,effect_block
,principal_block
yaction_block
pueden aparecer en cualquier orden dentro de una instrucción. -
El
id_block
es opcional en políticas basadas en recursos. No debe incluirse en políticas basadas en la identidad. -
El elemento
principal_block
es necesario en las políticas basadas en recursos (por ejemplo, en las políticas de bucket de Amazon S3) y en las políticas de confianza para los roles de IAM. No debe incluirse en políticas basadas en la identidad. -
El elemento
principal_map
de las políticas de bucket de Amazon S3 puede incluir el IDCanonicalUser
. La mayoría de las políticas basadas en recursos no admiten este mapeo. Para obtener más información sobre el uso del ID de usuario canónico en una política de bucket, consulte Especificación de una entidad principal en una política en la Guía del usuario de Amazon Simple Storage Service. -
Cada valor de cadena (
policy_id_string
,sid_string
,principal_id_string
,action_string
,resource_string
,condition_type_string
,condition_key_string
y la versión de cadena decondition_value
) puede tener sus propias restricciones de longitud mínima y máxima, permitir unos valores específicos o exigir un formato interno.
Notas acerca de los valores de cadena
En esta sección se proporciona información adicional sobre los valores de cadena que se utilizan en diferentes elementos de una política.
action_string
-
Consta de un espacio de nombres del servicio, dos puntos y el nombre de una acción. Los nombres de acción pueden incluir comodines. Ejemplos:
"Action":"ec2:StartInstances" "Action":[ "ec2:StartInstances", "ec2:StopInstances" ] "Action":"cloudformation:*" "Action":"*" "Action":[ "s3:Get*", "s3:List*" ]
policy_id_string
-
Ofrece una forma de incluir información acerca de la política como conjunto. Algunos servicios, como Amazon SQS y Amazon SNS, utilizan el elemento
Id
como reserva. A menos que lo limite un servicio individual, policy_id_string puede incluir espacios. Algunos servicios requieren este valor para ser exclusivos dentro de una cuenta de AWS.nota
El
id_block
está permitido en políticas basadas en recursos, pero no en políticas basadas en la identidad.No existe ningún límite respecto a la longitud, aunque esta cadena contribuye a la longitud total de la política, que está limitada.
"Id":"Admin_Policy" "Id":"cd3ad3d9-2776-4ef1-a904-4c229d1642ee"
sid_string
-
Ofrece una forma de incluir información acerca de una instrucción individual. Para las políticas de IAM, los caracteres alfanuméricos básicos (A-Z, a-z, 0-9) son los únicos caracteres permitidos en el valor
Sid
. Otros servicios de AWS que admiten las políticas de recursos pueden tener otros requisitos para el valorSid
. Por ejemplo, algunos servicios requieren este valor para ser únicos dentro de una Cuenta de AWS y algunos servicios permiten caracteres adicionales como espacios en el valorSid
."Sid":"1" "Sid": "ThisStatementProvidesPermissionsForConsoleAccess"
principal_id_string
-
Proporciona una forma de especificar una entidad principal utilizando el Nombre de recurso de Amazon (ARN) de la Cuenta de AWS, el usuario de IAM, el rol de IAM, el usuario federado o el usuario del rol asumido. Si se trata de una Cuenta de AWS, también puede utilizar el formulario abreviado
AWS:
en lugar de todo el ARN. Para todas las opciones, incluidos los servicios de AWS, los roles asumidos, etc., consulte Cómo especificar una entidad principal.accountnumber
Tenga en cuenta que puede utilizar * solo para especificar "todo el mundo/anónimo". No puede utilizarlo para especificar parte de un nombre o ARN.
resource_string
-
En la mayoría de los casos, se compone de un Nombre de recurso de Amazon (ARN).
"Resource":"arn:aws:iam::123456789012:user/Bob" "Resource":"arn:aws:s3:::amzn-s3-demo-bucket/*"
condition_type_string
-
Identifica el tipo de condición de prueba, como por ejemplo
StringEquals
,StringLike
,NumericLessThan
,DateGreaterThanEquals
,Bool
,BinaryEquals
,IpAddress
,ArnEquals
, etc. Para obtener una lista completa de los tipos de condición, consulte Elementos de la política de JSON de IAM: operadores de condición."Condition": { "NumericLessThanEquals": { "s3:max-keys": "10" } } "Condition": { "Bool": { "aws:SecureTransport": "true" } } "Condition": { "StringEquals": { "s3:x-amz-server-side-encryption": "AES256" } }
condition_key_string
-
Identifica la clave de condición cuyo valor se prueba para determinar si se cumple la condición. AWS define un conjunto de claves de condición que están disponibles en servicios de AWS, incluyendo
aws:PrincipalType
,aws:SecureTransport
, yaws:userid
.Para obtener una lista de las claves de condición de AWS, consulte Claves de contexto de condición globales de AWS. Para conocer las claves de condición que son específicas de un servicio, consulte la documentación correspondiente a dicho servicio, por ejemplo:
-
Especificación de las condiciones de una política en la Guía del usuario de Amazon Simple Storage Service
-
Políticas de IAM para Amazon EC2 en la Guía del usuario de 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 el valor de la cadena condition_key_string que determina si se cumple la condición. Para obtener una lista completa de los valores válidos para un tipo de condición, consulte Elementos de la política de JSON de IAM: operadores de condición.
"Condition":{ "ForAnyValue:StringEquals": { "dynamodb:Attributes": [ "
ID
", "PostDateTime
" ] } }