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; |
|
scope |
|
Cláusula de condição |
|
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
é sempreAWS::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 p verifica 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"
};