Estructura de la política - Amazon Elastic Compute Cloud

Estructura de la política

En los siguientes temas se explica la estructura de una política de IAM.

Sintaxis de la política

Una política de IAM es un documento JSON que contiene una o varias instrucciones. Cada instrucción tiene la estructura siguiente.

{ "Statement":[{ "Effect":"effect", "Action":"action", "Resource":"arn", "Condition":{ "condition":{ "key":"value" } } } ] }

Una instrucción está compuesta por varios elementos:

  • Effect: el valor de effect puede ser Allow o Deny. De forma predeterminada, los usuarios no tienen permiso para utilizar los recursos y las acciones de la API, por lo que se deniegan todas las solicitudes. Si se concede un permiso explícito se anula el valor predeterminado. Una denegación explícita invalida cualquier permiso concedido.

  • Action: el valor de action es la acción de la API para la que concede o deniega permisos. Para obtener más información de cómo especificar el valor de action, consulte Acciones de Amazon EC2.

  • Resource: el recurso al que afecta la acción. Algunas acciones de la API de Amazon EC2 permiten incluir en la política recursos específicos que la acción puede crear o modificar. Especifique un recurso con un nombre de recurso de Amazon (ARN) o utilizando el carácter comodín (*) para indicar que la instrucción se aplica a todos los recursos. Para obtener más información, consulte Permisos de nivel de recurso admitidos para las acciones de la API de Amazon EC2.

  • Condition: las condiciones son opcionales. Se pueden usar para controlar cuándo está en vigor la política. Para obtener más información sobre cómo especificar condiciones para Amazon EC2, consulte Claves de condición de Amazon EC2.

Para obtener más información sobre los requisitos de la política, consulte la Referencia de la política JSON de IAM en la Guía del usuario de IAM. Para obtener ejemplos de instrucciones de política de IAM para Amazon EC2, consulte Políticas de ejemplo para trabajar con la AWS CLI o un SDK de AWS.

Acciones de Amazon EC2

En una instrucción de política de IAM, puede especificar cualquier acción de API de cualquier servicio que sea compatible con IAM. Para Amazon EC2, use el prefijo siguiente con el nombre de la acción de API: ec2:. Por ejemplo: ec2:RunInstances y ec2:CreateImage.

Para especificar varias acciones en una única instrucción, sepárelas con comas del siguiente modo:

"Action": ["ec2:action1", "ec2:action2"]

También puede utilizar caracteres comodín para especificar varias acciones. Por ejemplo, puede especificar todas las acciones cuyo nombre comience por la palabra "Describe" del siguiente modo:

"Action": "ec2:Describe*"
nota

Actualmente, las acciones de la API de Amazon EC2 Describe* no admiten permisos de nivel de recurso. Para obtener más información sobre los permisos de nivel de recursos para Amazon EC2, consulte Políticas de IAM para Amazon EC2.

Para especificar todas las acciones de API de Amazon EC2, use el carácter comodín * del siguiente modo:

"Action": "ec2:*"

Para ver una lista de las acciones de Amazon EC2, consulte Acciones definidas por Amazon EC2 en la referencia de autorizaciones de servicio.

Permisos de nivel de recurso admitidos para las acciones de la API de Amazon EC2

Los permisos de nivel de recursos hacen referencia a la capacidad de especificar en qué recursos los usuarios tienen permitido realizar acciones. Amazon EC2 admite parcialmente los permisos de nivel de recursos. Esto significa que, en algunas acciones de Amazon EC2, puede determinar cuándo se permite utilizarlas a los usuarios en función de si se cumplen una serie de condiciones o de los recursos concretos que pueden utilizar los usuarios. Por ejemplo, puede otorgar permisos a los usuarios para lanzar instancias, pero solo de un tipo específico, y únicamente utilizando una AMI específica.

Para especificar un recurso en la instrucción de política de IAM, se utiliza el nombre de recurso de Amazon (ARN). Para obtener más información sobre cómo especificar el valor de ARN, consulte Nombres de recursos de Amazon (ARN) para Amazon EC2. Si una acción de API no admite ARN individuales, debe utilizar un comodín (*) para especificar que la acción puede afectar a todos los recursos.

Para ver tablas que identifican qué acciones de la API de Amazon EC2 admiten permisos de nivel de recursos, así como los ARN y las claves de condición que puede usar en una política, consulte Acciones, recursos y claves de condición para Amazon EC2.

Tenga en cuenta que puede aplicar permisos de nivel de recurso basados en etiquetas en las políticas de IAM que utiliza para acciones de la API de Amazon EC2. Esto le ofrece un mejor control sobre los recursos que un usuario puede crear, modificar o utilizar. Para obtener más información, consulte Conceder permisos para etiquetar recursos durante la creación.

Nombres de recursos de Amazon (ARN) para Amazon EC2

Cada instrucción de política de IAM se aplica a los recursos especificados utilizando sus ARN.

Un ARN tiene la siguiente sintaxis general:

arn:aws:[service]:[region]:[account-id]:resourceType/resourcePath
service

El servicio (por ejemplo, ec2).

region

La región para el recurso (por ejemplo us-east-1).

account-id

El ID de cuenta de AWS, sin guiones (por ejemplo, 123456789012).

resourceType

El tipo de recurso (por ejemplo, instance).

resourcePath

Una ruta que identifica al recurso. Puede utilizar carácter comodín * en las rutas.

Por ejemplo, puede indicar una instancia específica (i-1234567890abcdef0) en la instrucción usando su ARN de este modo.

"Resource": "arn:aws:ec2:us-east-1:123456789012:instance/i-1234567890abcdef0"

También puede especificar todas las instancias que pertenecen a una cuenta específica mediante el carácter comodín * del modo siguiente.

"Resource": "arn:aws:ec2:us-east-1:123456789012:instance/*"

También puede especificar todos los recursos de Amazon EC2 que pertenecen a una cuenta específica mediante el carácter comodín * del modo siguiente.

"Resource": "arn:aws:ec2:us-east-1:123456789012:*"

Para especificar todos los recursos o cuando una acción de API no admita ARN, utilice el carácter comodín * en el elemento Resource de la siguiente manera.

"Resource": "*"

En muchas acciones de la API de Amazon EC2 se utilizan varios recursos. Por ejemplo, AttachVolume asocia un volumen de Amazon EBS a una instancia, por lo que un usuario debe tener permisos para utilizar el volumen y la instancia. Para especificar varios recursos en una única instrucción, separe sus ARN con comas, tal y como se indica a continuación.

"Resource": ["arn1", "arn2"]

Para obtener una lista de ARN de recursos de Amazon EC2, consulte Tipos de recursos definidos por Amazon EC2.

Claves de condición de Amazon EC2

En la instrucción de una política, tiene la opción de especificar las condiciones que controlan cuando está en vigor. Cada condición contiene uno o varios pares clave-valor. Las claves de condición no distinguen entre mayúsculas y minúsculas. Hemos definido claves de condición globales de AWS y también claves de condición específicas de los servicios.

Para obtener una lista de las claves de condición específicas del servicio para Amazon EC2, consulte Claves de condición para Amazon EC2. Amazon EC2 también implementa las claves de condición globales de AWS. Para obtener más información, consulte Información disponible en todas las solicitudes en la Guía del usuario de IAM.

Para utilizar una clave de condición en la política de IAM, utilice la instrucción Condition. Por ejemplo, la política siguiente concede a los usuarios permiso para agregar y eliminar reglas de entrada y salida para cualquier grupo de seguridad. Utiliza la clave de condición ec2:Vpc para especificar que estas acciones solo se pueden realizar en grupos de seguridad de una VPC específica.

{ "Version": "2012-10-17", "Statement":[{ "Effect":"Allow", "Action": [ "ec2:AuthorizeSecurityGroupIngress", "ec2:AuthorizeSecurityGroupEgress", "ec2:RevokeSecurityGroupIngress", "ec2:RevokeSecurityGroupEgress"], "Resource": "arn:aws:ec2:region:account:security-group/*", "Condition": { "StringEquals": { "ec2:Vpc": "arn:aws:ec2:region:account:vpc/vpc-11223344556677889" } } } ] }

Si especifica varias condiciones o varias claves en una condición, las evaluamos con una operación lógica AND. Si especifica una condición con varios valores para una clave, evaluamos la condición con una operación lógica OR. Para conceder los permisos, es necesario que se cumplan todas las condiciones.

También puede utilizar comodines al especificar las condiciones. Para obtener más información, consulte Elementos de la política de IAM: Variables y etiquetas en la Guía del usuario de IAM.

importante

Muchas claves de condición son específicas de un recurso y algunas acciones de API utilizan varios recursos. Si escribe una política con una clave de condición, use el elemento Resource de la instrucción para especificar el recurso en el que se aplica la clave de condición. Si no lo hace, la política puede impedir que los usuarios ejecuten la acción, ya que la comprobación de la condición dará un error en el caso de los recursos en los que la clave de la condición no se aplica. Si no quiere especificar un recurso o si ha escrito el elemento Action de su política para que contenga varias acciones de API, debe utilizar el tipo de condición ...IfExists para asegurarse de que no se tenga en cuenta la clave de condición en el caso de los recursos que no la utilicen. Para obtener más información, consulte ...IfExists Conditions en la Guía del usuario de IAM.

Todas las acciones de Amazon EC2 admiten las claves de condición aws:RequestedRegion y ec2:Region. Para obtener más información, consulte Ejemplo: Restringir el acceso a una región específica.

Clave de condición de ec2:SourceInstanceARN

La clave de condición ec2:SourceInstanceARN se puede utilizar para condiciones que especifiquen el ARN de la instancia desde la que se realiza una solicitud. Esta es una clave de condición global de AWS y no es específica de un servicio. Para ver ejemplos de políticas, consulte Amazon EC2: asociar o separar volúmenes de una instancia de EC2 y Ejemplo: Permitir que una instancia específica vea los recursos de otros servicios de AWS. La clave ec2:SourceInstanceARN no se puede usar como una variable para rellenar el ARN del elemento Resource en una instrucción.

Para obtener ejemplos de instrucciones de política de Amazon EC2, consulte Políticas de ejemplo para trabajar con la AWS CLI o un SDK de AWS.

Clave de condición de ec2:Attribute

La clave de condición ec2:Attribute se puede utilizar para condiciones que filtran el acceso por un atributo de un recurso. La clave de condición solo admite propiedades que son de un tipo de datos primitivo (como una cadena o un entero), u objetos AttributeValue complejos que tienen solo una propiedad Valor (como los objetos DescripciónImdsSupport de la acción de la API ModifyImageAttribute).

importante

La clave de condición no se puede usar con objetos complejos que tengan varias propiedades, como el objeto LaunchPermission de la acción de la API ModifyImageAttribute.

Por ejemplo, la siguiente política utiliza la clave de condición ec2:Attribute/Description para filtrar el acceso por parte del objeto complejo Descripción de la acción ModifyImageAttribute de la API. La clave de condición solo permite solicitudes que modifican la descripción de una imagen Production o Development.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:ModifyImageAttribute", "Resource": "arn:aws:ec2:us-east-1::image/ami-*", "Condition": { "StringEquals": { "ec2:Attribute/Description": [ "Production", "Development" ] } } } ] }

El ejemplo siguiente de política utiliza la clave de condición ec2:Attribute para filtrar el acceso mediante la propiedad primitiva Attribute (Atributo) de la acción ModifyImageAttribute de la API. La clave de condición deniega todas las solicitudes que intentan modificar la descripción de una imagen.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "ec2:ModifyImageAttribute", "Resource": "arn:aws:ec2:us-east-1::image/ami-*", "Condition": { "StringEquals": { "ec2:Attribute": "Description" } } } ] }

Claves de condición de ec2:ResourceID

Cuando utilice las siguientes claves de condición ec2:ResourceID con las acciones de API especificadas, el valor de la clave de condición se utiliza para especificar el recurso resultante que se crea mediante la acción de la API. Las claves de condición ec2:ResourceID no se pueden usar para especificar un recurso fuente que se especifica en la solicitud de la API. Si usa una de las siguientes claves de condición ec2:ResourceID con una API específica, entonces siempre debe especificar el comodín (*). Si especifica un valor diferente, la condición siempre se resuelve como * durante el tiempo de ejecución. Por ejemplo, para usar la clave de condición ec2:ImageId con la API CopyImage, luego debe especificar la clave de condición de la siguiente manera:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:CopyImage", "Resource": "arn:aws:ec2:us-east-1::image/ami-*", "Condition": { "StringEquals": { ec2:ImageID": "*" } } } ] }
Clave de condición Acción de la API
ec2:DhcpOptionsID
  • CreateDhcpOptions

ec2:ImageID
  • CopyImage

  • CreateImage

  • ImportImage

  • RegisterImage

ec2:InstanceID
  • RunInstances

  • ImportInstance

ec2:InternetGatewayID
  • CreateInternetGateway

ec2:NetworkAclID
  • CreateNetworkAcl

ec2:NetworkInterfaceID
  • CreateNetworkInterface

ec2:PlacementGroupName
  • CreatePlacementGroup

ec2:RouteTableID
  • CreateRouteTable

ec2:SecurityGroupID
  • CreateSecurityGroup

ec2:SnapshotID
  • CopySnapshot

  • CreateSnapshot

  • CreateSnapshots

  • ImportSnapshots

ec2:SubnetID
  • CreateSubnet

ec2:VolumeID
  • CreateVolume

  • ImportVolume

ec2:VpcID
  • CreateVpc

ec2:VpcPeeringConnectionID
  • CreateVpcPeeringConnection

Recomendamos que evite usar las claves de condición ec2:ResourceID con estas acciones de API. En cambio, si necesita filtrar el acceso en función de identificadores de recursos específicos, recomendamos que lo haga mediante el elemento de política Resource, de la siguiente manera:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:CopyImage", "Resource": "arn:aws:ec2:us-east-1::image/ami-01234567890abcdef" } ] }

Comprobar que los usuarios tienen los permisos necesarios

Una vez creada la política de IAM, le recomendamos que compruebe si concede permisos a los usuarios para utilizar las acciones de la API concretas y los recursos necesarios antes de pasar la política a producción.

En primer lugar, cree un usuario para realizar pruebas y, a continuación, asocie la política de IAM que creó al usuario de prueba. A continuación, realice una solicitud como usuario de prueba.

Si la acción de Amazon EC2 que va a probar crea o modifica un recurso, debería efectuar la solicitud mediante el parámetro DryRun (o ejecutar el comando de la AWS CLI con la opción --dry-run). En este caso, la llamada completa la comprobación de autorización, pero no la operación. Por ejemplo, puede comprobar si el usuario puede finalizar una instancia determinada sin finalizarla en realidad. Si el usuario de prueba tiene los permisos necesarios, la solicitud devolverá DryRunOperation; de lo contrario, devolverá UnauthorizedOperation.

Si la política no concede los permisos previstos al usuario o es demasiado permisiva, puede ajustarla según sea necesario y repetir las pruebas hasta obtener el resultado deseado.

importante

Puede que los cambios en la política tarden varios minutos en propagarse y surtir efecto. Por lo tanto, le recomendamos que espere cinco minutos antes de probar las actualizaciones de la misma.

Si se produce un error en la comprobación de autorización, la solicitud devuelve un mensaje codificado con información de diagnóstico. Puede descodificar el mensaje usando la acción DecodeAuthorizationMessage. Para obtener más información, consulte DecodeAuthorizationMessage en la Referencia de la API de AWS Security Token Service y decode-authorization-message en la Referencia de comandos de la AWS CLI.