Estrutura de instruções e operadores integrados para políticas de aprovação automática e negação de acesso - AWS Systems Manager

Estrutura de instruções e operadores integrados para políticas de aprovação automática e negação de acesso

A tabela a seguir mostra a estrutura das políticas de aprovação automática e negação de acesso.

Componente Sintaxe
efeito;

permit | forbid

scope

(principal, action, resource)

Cláusula de condição
when { principal or resource has attribute name };

Componentes da política

Uma política de aprovação automática ou negação de acesso contém os seguintes componentes:

  • Efeito: permite (permit) ou nega (forbid) o acesso.

  • Escopo: a entidade principal, as ações e os recursos aos quais o efeito se aplica. Você pode deixar o escopo no Cedar indefinido ao não identificar entidades principais, ações ou recursos específicos. Nesse caso, a política se aplica a todos os principais, ações e recursos possíveis. Para acesso a nós just-in-time, o action é sempre AWS::SSM::Action::"getTokenForInstanceAccess".

  • Cláusula de condição: o contexto no qual o efeito se aplica.

Comentários

Você pode incluir comentários nas políticas do . Os comentários são definidos como uma linha que começa com // e termina com um caractere de nova linha.

O exemplo a seguir mostra comentários em uma 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últiplas

Você pode usar mais de uma cláusula de condição em uma declaração de política usando o 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

O exemplo a seguir mostra como escrever uma política se uma propriedade de contexto usar : (ponto e vírgula), que é um caractere reservado na linguagem da 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 obter exemplos adicionais, consulte Exemplo de instruções de políticas.

Esquema de acesso a nós just-in-time

Confira abaixo o esquema Cedar para acesso a nós just-in-time.

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

Ao criar o contexto de uma política de aprovação automática ou negação de acesso usando várias condições, você pode usar o operador && para adicionar outras condições. Há também muitos outros operadores integrados que você pode usar para adicionar mais poder expressivo às condições da sua política. A tabela a seguir contém todos os operadores integrados para referência.

Operador Tipos e sobrecargas Descrição

!

Booleano → Booleano

Lógico que não.

==

qualquer → qualquer

Igualdade. Funciona com argumentos de qualquer tipo, mesmo que os tipos não correspondam. Valores de tipos diferentes nunca são iguais entre si.

!= qualquer → qualquer

Desigualdade; o inverso exato da igualdade (veja acima).

<

(longo, longo) → Booleano

Número inteiro longo menor que.

<=

(longo, longo) → Booleano

Número inteiro longo menor ou igual a.

>

(longo, longo) → Booleano

Número inteiro longo maior que.

>=

(longo, longo) → Booleano

Número inteiro longo maior que ou igual a.

em (entidade, entidade) → Booleano Associação hierárquica (reflexiva: A em A é sempre verdadeiro).
(entidade, conjunto (entidade)) → Booleano Associação à hierarquia: A em [B, C,...] é verdadeiro se (A e B) || (A em C) ||... erro se o conjunto não contiver uma entidade.
&& (Booleano, Booleano) → Booleano

Lógico e (curto-circuito).

|| (Booleano, Booleano) → Booleano

Lógico ou (curto-circuito).

.exists() entidade→ Booleano Existência de entidades.
tem (entidade, atributo) → Booleano Operador infixo. e has f testa se o registro ou a entidade e tem uma associação para o atributo f. Retorna false se e não existe ou se e existe, mas não tem o atributo f. Os atributos podem ser expressos como identificadores ou literais de sequência de caracteres.
como (string, string) → Booleano Operador infixo. t like pverifica se o texto t corresponde ao padrão p, que pode incluir caracteres curinga * que correspondam a 0 ou mais de qualquer caractere. Para combinar literalmente um caractere estrela t, você pode usar a sequência \* especial de caracteres escapados em p.
.hasTag() (entity, string) → Boolean Verifica se a entidade tem a tag especificada aplicada.
.getTag() (entity, string) → Boolean Retorna o valor na chave de tag especificada.
.contém() (conjunto, todos) → Booleano Defina a associação (B é um elemento de A).
.contém tudo() (conjunto, conjunto) → Booleano Testa se o conjunto A contém todos os elementos do conjunto B.
.contém qualquer() (conjunto, conjunto) → Booleano Testa se o conjunto A contém algum dos elementos do conjunto B.

Exemplo de instruções de políticas

Confira abaixo exemplos de instruções de política.

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