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 |
|
scope |
|
cláusula de condición |
|
Componentes de política
Una política de aprobación automática o denegación de acceso contiene los siguientes componentes:
-
Efecto:
permit
(permitir) oforbid
(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 esAWS::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"
};