Estructura de instrucciones y operadores integrados para políticas de aprobación automática y denegación de acceso - AWS Systems Manager

Estructura de instrucciones y operadores integrados para políticas de aprobación automática y denegación de acceso

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
when { principal or resource has attribute name };

Componentes de política

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

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

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

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.

Esquema de acceso a los nodos justo a tiempo

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

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.

Operador Tipos y sobrecargas Descripción

!

Booleano → Booleano

Not lógico.

==

any → any

Igualdad. Funciona con argumentos de cualquier tipo, incluso si los tipos no coinciden. Los valores de diferentes tipos nunca son iguales entre sí.

!= any → any

Desigualdad; exactamente lo contrario de la igualdad (ver arriba).

<

(long, long) → Booleano

Entero largo menor que.

<=

(long, long) → Booleano

Entero largo menor que o igual a.

>

(long, long) → Booleano

Entero largo mayor que.

>=

(long, long) → Booleano

Entero largo mayor que o igual a.

in (entity, entity) → Booleano Pertenencia jerárquica (reflexiva: A en A siempre es verdadera).
(entidad, conjunto (entidad)) → Booleano 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.
&& (Boolean, Boolean) → Booleano

Lógico y (cortocircuito).

|| (Boolean, Boolean) → Booleano

Lógico o (cortocircuito).

.exists() entity → Booleano Existencia de la entidad.
has (entity, attribute) → Booleano 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 (string, string) → Booleano 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() (entity, string) → Booleano Comprueba si la entidad tiene aplicada la etiqueta especificada.
.getTag() (entity, string) → Booleano Devuelve el valor de la clave de etiqueta especificada.
.contains() (set, any) → Booleano Establecer pertenencia (es B un elemento de A).
.containsAll() (set, set) → Booleano Comprueba si el conjunto A contiene todos los elementos del conjunto B.
.containsAny() (set, set) → Booleano Comprueba si el conjunto A contiene alguno de los elementos del conjunto B.

Ejemplo de instrucciones de políticas

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