Gramática del lenguaje de la política JSON de IAM - AWS Identity and Access Management

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:

Para ver ejemplos de políticas utilizadas en otros servicios de AWS, consulte la documentación de dichos servicios.

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 y resource_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 de id_block en una política. Del mismo modo, effect_block, principal_block y action_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 ID CanonicalUser. 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 de condition_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 valor Sid. 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 valor Sid.

"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:accountnumber 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.

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, y aws: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:

"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" ] } }