

• El panel de AWS Systems Manager CloudWatch dejará de estar disponible después del 30 de abril de 2026. Los clientes pueden seguir utilizando la consola de Amazon CloudWatch para ver, crear y administrar sus paneles de Amazon CloudWatch, tal y como lo hacen actualmente. Para obtener más información, consulte la [documentación del panel de Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html). 

# Estructura de instrucciones y operadores integrados para políticas de aprobación automática y denegación de acceso
<a name="auto-approval-deny-access-policy-statement-structure"></a>

En la siguiente tabla, se muestra la estructura de las políticas de aprobación automática y denegación de acceso.


| Componente | Sintaxis | 
| --- | --- | 
| effect | `permit \| forbid` | 
| scope | `(principal, action, resource)` | 
| cláusula de condición |  <pre>when {<br />    {{principal or resource}} has {{attribute name}}             <br />};</pre>  | 

## Componentes de política
<a name="policy-components"></a>

Una política de aprobación automática o denegación de acceso contiene los siguientes componentes:
+ **Efecto**: `permit` (permitir) o `forbid` (denegar) el acceso.
+ **Alcance**: las entidades principales, las acciones y los recursos a los que se aplica el efecto. Puede dejar el alcance de Cedar sin definir si no identifica entidades principales, acciones o recursos específicos. En este caso, la política se aplica a todas las entidades principales, acciones y recursos posibles. Para el acceso a los nodos justo a tiempo, `action` siempre es `AWS::SSM::Action::"getTokenForInstanceAccess"`.
+ **Cláusula de condición**: el contexto en el que se aplica el efecto.

## Comentarios
<a name="auth-policies-policy-comments"></a>

Puede incluir comentarios en sus políticas de . Los comentarios se definen como una línea que comienza por `//` y termina con un carácter de nueva línea.

En el siguiente ejemplo se muestran comentarios en una política.

```
// Allows users in the Engineering group from the Platform org to automatically connect to nodes tagged with Engineering and Production keys. 
permit (
    principal in AWS::IdentityStore::Group::"d4q81745-r081-7079-d789-14da1EXAMPLE",
    action == AWS::SSM::Action::"getTokenForInstanceAccess",
    resource
)
when {
    principal has organization && resource.hasTag("Engineering") && resource.hasTag("Production") && principal.organization == "Platform"
};
```

## Cláusulas múltiples
<a name="multiple-clauses"></a>

Puede utilizar más de una cláusula de condición en una declaración de política mediante el operador `&&`.

```
// Allow access if node has tag where the tag key is Environment 
// & tag value is Development 

permit(principal, action == AWS::SSM::getTokenForInstanceAccess, resource)
when {
    resource.hasTag("Environment") &&
    resource.getTag("Environment") == "Development"
};
```

## Caracteres reservados
<a name="reserved-characters"></a>

El siguiente ejemplo muestra cómo escribir una política si una propiedad de contexto utiliza un `:` (punto y coma), que es un carácter reservado en el lenguaje de la política.

```
permit (
    principal,
    action == AWS::SSM::Action::"getTokenForInstanceAccess",
    resource
)
when {
    principal has employeeNumber && principal.employeeNumber like "E-1*" && resource.hasTag("Purpose") && resource.getTag("Purpose") == "Testing"
}
```

Para ver otros ejemplos, consulte [Ejemplo de instrucciones de políticas](#policy-statement-examples).

## Esquema de acceso a los nodos justo a tiempo
<a name="auto-approval-deny-access-policy-statement-schema"></a>

A continuación, se muestra el esquema Cedar para el acceso a los nodos justo a tiempo.

```
namespace AWS::EC2 {
    entity Instance tags String;
}


namespace AWS::IdentityStore {
    entity Group;
    
    entity User in [Group] {
    employeeNumber?: String,
    costCenter?: String,
    organization?: String,
    division?: String,
    };

}


namespace AWS::IAM {

    entity Role;
    
    type AuthorizationContext = {
        principalTags: PrincipalTags,
    };
    
    entity PrincipalTags tags String;
}

namespace AWS::SSM {

    entity ManagedInstance tags String;

    action "getTokenForInstanceAccess" appliesTo {
    principal: [AWS::IdentityStore::User],
    resource: [AWS::EC2::Instance, AWS::SSM::ManagedInstance],
    context: {
        "iam": AWS::IAM::AuthorizationContext
        }
    };
}
```

## Operadores integrados
<a name="built-in-policy-operators"></a>

Al crear el contexto de una política de aprobación automática o denegación de acceso con varias condiciones, puede utilizar el operador `&&` para añadir condiciones adicionales. También hay muchos otros operadores integrados que puede utilizar para añadir un poder de expresión adicional a las condiciones de su política. La siguiente tabla contiene todos los operadores integrados como referencia.



- ** \! **
  - **Tipos y sobrecargas:** Booleano → Booleano
  - **Descripción:** Not lógico.

- ** == **
  - **Tipos y sobrecargas:** any → any
  - **Descripción:** Igualdad. Funciona con argumentos de cualquier tipo, incluso si los tipos no coinciden. Los valores de diferentes tipos nunca son iguales entre sí.

- **\!=**
  - **Tipos y sobrecargas:** any → any
  - **Descripción:** Desigualdad; exactamente lo contrario de la igualdad (ver arriba).

- ** < **
  - **Tipos y sobrecargas:** (long, long) → Booleano
  - **Descripción:** Entero largo menor que.

- ** <= **
  - **Tipos y sobrecargas:** (long, long) → Booleano
  - **Descripción:** Entero largo menor que o igual a.

- ** > **
  - **Tipos y sobrecargas:** (long, long) → Booleano
  - **Descripción:** Entero largo mayor que.

- ** >= **
  - **Tipos y sobrecargas:** (long, long) → Booleano
  - **Descripción:** Entero largo mayor que o igual a.

- **in**
  - **Tipos y sobrecargas:** (entity, entity) → Booleano / **Descripción:** Pertenencia jerárquica (reflexiva: A en A siempre es verdadera).
  - **Tipos y sobrecargas:** (entidad, conjunto (entidad)) → Booleano / **Descripción:** Pertenencia jerárquica: A en [B, C, ...] es verdadero si (A y B) \|\| (A en C) \|\| ... es un error si el conjunto no contiene una entidad.

- **&&**
  - **Tipos y sobrecargas:** (Boolean, Boolean) → Booleano
  - **Descripción:** Lógico y (cortocircuito).

- **\|\|**
  - **Tipos y sobrecargas:** (Boolean, Boolean) → Booleano
  - **Descripción:** Lógico o (cortocircuito).

- **.exists()**
  - **Tipos y sobrecargas:** entity → Booleano
  - **Descripción:** Existencia de la entidad.

- **has**
  - **Tipos y sobrecargas:** (entity, attribute) → Booleano
  - **Descripción:** Operador de infijo. e has f comprueba si el registro o la entidad e tienen un enlace para el atributo f. Devuelve false si e no existe o si e existe pero no tiene el atributo f. Los atributos se pueden expresar como identificadores o cadenas literales.

- **like**
  - **Tipos y sobrecargas:** (string, string) → Booleano
  - **Descripción:** Operador de infijo. t like p comprueba si el texto t coincide con el patrón p, que puede incluir caracteres comodín \* que coincidan con 0 o más caracteres. Para que coincida con un carácter estrella literal en t, puede utilizar la secuencia especial de caracteres de escape \\\* en p.

- **.hasTag()**
  - **Tipos y sobrecargas:** (entity, string) → Booleano
  - **Descripción:** Comprueba si la entidad tiene aplicada la etiqueta especificada.

- **.getTag()**
  - **Tipos y sobrecargas:** (entity, string) → Booleano
  - **Descripción:** Devuelve el valor de la clave de etiqueta especificada.

- **.contains()**
  - **Tipos y sobrecargas:** (set, any) → Booleano
  - **Descripción:** Establecer pertenencia (es B un elemento de A).

- **.containsAll()**
  - **Tipos y sobrecargas:** (set, set) → Booleano
  - **Descripción:** Comprueba si el conjunto A contiene todos los elementos del conjunto B.

- **.containsAny()**
  - **Tipos y sobrecargas:** (set, set) → Booleano
  - **Descripción:** Comprueba si el conjunto A contiene alguno de los elementos del conjunto B.



## Ejemplo de instrucciones de políticas
<a name="policy-statement-examples"></a>

A continuación, se muestran ejemplos de instrucciones de políticas.

```
// Users assuming IAM roles with a principal tag of "Elevated" can automatically access nodes tagged with the "Environment" key when the value equals "prod"
permit(principal, action == AWS::SSM::getTokenForInstanceAccess, resource)
when {
    // Verify IAM role principal tag
    context.iam.principalTags.getTag("AccessLevel") == "Elevated" &&
    
    // Verify the node has a tag with "Environment" tag key and a tag value of "prod"
    resource.hasTag("Environment") &&
    resource.getTag("Environment") == "prod"
};
```

```
// Identity Center users in the "Contractor" division can automatically access nodes tagged with the "Environment" key when the value equals "dev"
permit(principal, action == AWS::SSM::getTokenForInstanceAccess, resource)
when {
    // Verify that the user is part of the "Contractor" division
    principal.division == "Contractor" &&
    
    // Verify the node has a tag with "Environment" tag key and a tag value of "dev"
    resource.hasTag("Environment") &&
    resource.getTag("Environment") == "dev"
};
```

```
// Identity Center users in a specified group can automatically access nodes tagged with the "Environment" key when the value equals "Production"
permit(principal in AWS::IdentityStore::Group::"d4q81745-r081-7079-d789-14da1EXAMPLE",
    action == AWS::SSM::getTokenForInstanceAccess,
    resource)
when {
    resource.hasTag("Environment") &&
    resource.getTag("Environment") == "Production"
};
```