Gerenciamento de políticas de acesso por meio de APIs

Uma política de acesso é um conjunto de regras e condições que são avaliadas para determinar a decisão de acesso. É possível criar políticas de acesso customizadas. Todas as políticas de acesso customizadas são exibidas como opções na configuração do aplicativo.

Sobre esta tarefa

Algumas políticas de acesso padrão são fornecidas para uso imediato e não podem ser modificadas. Os locatários podem incluir políticas de acesso customizadas de acordo com suas necessidades.

  • As regras são avaliadas de acordo com a primeira correspondência. Quando uma correspondência de todas as condições em uma regra é avaliada como true, o resultado da regra é retornado como a decisão de avaliação. Nenhum processamento adicional é concluído.
  • Um parâmetro opcional, alwaysRun: true, pode ser incluído em uma regra individual. Esse parâmetro faz com que a regra seja avaliada, além do primeiro conjunto de regras correspondido. O resultado da primeira correspondência e o parâmetro alwaysRun são combinados e a ação mais restritiva é aplicada como o resultado da política. Várias regras alwaysRun podem ser incluídas em uma política.
  • Quando uma política requer uma assinatura específica para uma condição, como gerenciamento de dispositivo, e o locatário não está autorizado para essa assinatura no momento, a política é ignorada. Uma decisão de autenticação de diversos fatores (MFA) é retornada.
  • Quando uma regra requer uma assinatura específica para a MFA e o locatário não está autorizado para essa assinatura no momento, uma decisão de MFA avaliada é alterada para uma negação. Essa mudança protege o aplicativo em vez de permitir o acesso incondicional.

O Editor de Políticas pode ser usado para criar e modificar políticas. Consulte "Gerenciamento de políticas de acesso".

Algumas condições não podem ser incluídas usando o Editor de Políticas. Nesses casos, a API pode ser usada para modificar as políticas existentes ou criar novas políticas de acesso com essas condições.

A validação de sintaxe é executada quando uma política de acesso é criada ou atualizada.

As políticas de acesso estão no formato JSON a seguir:
Observação: o site FedRAMP não oferece suporte ao acesso adaptativo. Portanto, os recursos do Trusteer não estão disponíveis para os clientes do FedRAMP.
{
    "name": "policy_name",
    "description": "Description of the policy",
    "schemaVersion": "urn:access:policy:4.0:schema",
    "rules": [
        {
            "name": "allow_with_conditions",
            "id": "1",
            "conditions": {
                "contextAttributes": {
                    "attributes": [
                        {
                            "name": "attrName",
                            "values": [
                                "value1",
                                "value2"
                            ],
                            "opCode": "EQ"
                        }
                    ]
                },
                "subjectAttributes": {
                    "attributes": [
                        {
                            "name": "realmName",
                            "values": [
                                "cloudIdentityRealm",
                                "www.ibm.com"
                            ],
                            "opCode": "IN"
                        },
                        {
                            "name": "customAttr1",
                            "values": [
                                "val1"
                            ],
                            "opCode": "NEQ"
                        }
                    ]
                },
                "timeAttributes": {
                    "attributes": [
                        {
                            "name": "timezone",
                            "opCode": "EQ",
                            "values": [
                                "UTC Offset or GMT Offset"
                            ]
                        },
                        {
                            "name": "startDate",
                            "opCode": "EQ",
                            "values": [
                                "YYYY-MM-DD HH:mm:ss"
                            ]
                        },
                        {
                            "name": "endDate",
                            "opCode": "EQ",
                            "values": [
                                "YYYY-MM-DD HH:mm:ss"
                            ]
                        },
                        {
                            "name": "Monday",
                            "opCode": "EQ",
                            "values": [
                                "hh:mm-hh:mm"
                            ]
                        },
                        {
                            "name": "Tuesday",
                            "opCode": "EQ",
                            "values": [
                                "hh:mm-hh:mm"
                            ]
                        }
                    ]
                },
                "ipAddress": {
                    "opCode": "MATCH",
                    "values": [
                        "<ip_address>",
                        "<ip_address_range_start> - <ip_address_range_end>",
                        "<ip_address/subnet>"
                    ]
                },   
                "location": {
                    "attributes": [
                        {
                            "values": [
                                "3-Letter-ISO"
                            ],
                            "name": "country",
                            "opCode": "IN"
                        }
                    ]
                }
                  "location": {
                      "attributes": [
                          {
                              "values": [
                                  "<city>"
                              ],
                              "name": "city",
                              "opCode": "IN"
                        }
                    ]
                }
                "geoLocation": {
                    "enabled": "true"
                },
                "trusteer": {
                    "enabled": "true"
                }
            },
            "result": {
                "extendedAction": {
                    "action": "ACTION_ALLOW"
                },
                "authnMethods": []
            }
        },
        {
            "name": "Authentication factor validity",
            "id": "2",
            “alwaysRun”: true,
            "conditions": {
            "factorLifetimeAttributes": {
                "attributes": [
                {
                    "name": "anyFactor",
                    "opCode": "EQ",
                    "values": [
                       "120"
                     ]
                }, 
                {
                      "name": "reauthPerDevice",
                      "opCode": "EQ",
                      "values": [
                         "enabled"
                       ]
                  }

               ]
            }
       },
       "result": {
        "extendedAction": {
          "action": "ACTION_MFA_OVERRIDE"
        }
       }
        },
        {
            "name": "mfa_once_per_session_device_conditions",
            "id": "3",
            "contextAttributes": {
                "attributes": [
                    {
                        "name": "devicePlatform",
                        "values": [
                            "IOS",
                            "ANDROID",
                            "OTHER_MOBILE",
                            "MACOS",
                            "WINDOWS",
                            "OTHER_DESKTOP"
                        ],
                        "opCode": "IN"
                    },
                    {
                        "name": "deviceCompliance",
                        "values": [
                            "COMPLIANT",
                            "NONCOMPLIANT",
                            "UNKNOWN"
                        ],
                        "opCode": "IN"
                    }
                ]
            },
            "result": {
                "extendedAction": {
                    "action": "ACTION_MFA_PER_SESSION"
                },
                "authnMethods": [
                    "urn:ibm:security:authentication:asf:macotp"
                ]
            }
        },
        {
            "name": "deny_otherwise",
            "id": "100",
            "conditions": {},
            "result": {
                "extendedAction": {
                    "action": "ACTION_DENY"
                },
                "authnMethods": []
            }
        }
    ]
}
Observação: a maior parte da API já está descrita na documentação do Swagger. Você pode acessar a documentação do Swagger no painel de administração, em Configurações > Acesso à API > Documentação da API. Para obter mais informações sobre as APIs do Swagger, consulte Verificar interfaces de programação de aplicativos (APIs).
As informações a seguir se aplicam às regras da API.
  • Cada regra consiste dessas propriedades:
    name
    Um nome para a regra.
    id
    O ID exclusivo da regra que é usada nos dados e relatórios de eventos.
    conditions
    Mais de uma condição pode estar presente por regra. Todas as condições na regra devem ser avaliadas como true para que a regra corresponda e o resultado seja aplicado. A regra padrão contém uma condição vazia.
  • As condições contêm as propriedades a seguir:
    contextAttributes
    Os atributos que são contextuais para o fluxo no qual a política de acesso foi executada. Esses atributos incluem gerenciamento de Dispositivo, OpenID Connect e atributos de solicitação de HTTP.
    subjectAttributes
    Os atributos de sessão de login que estão associados ao sujeito do usuário autenticado.
    factorLifetimeAttributes
    Associar a validade a um fator ou método de autenticação específico.
    timeAttributes
    Os atributos de horário do dia que permitem o controle de acesso baseado em tempo.
    ipAddress
    A condição de endereço IP que permite listas de bloqueio e permissões individuais, de intervalo ou baseadas em sub-rede.
    location
    A cidade ou o país resolvido por meio do endereço IP do usuário. O país deve conter uma lista separada por vírgula do nome do país ou códigos do país de três letras com base no padrão ISO a seguir. Um único país ou o código do país de três letras é permitido.

    A cidade deve conter uma lista separada por vírgula do nome da cidade. Uma única cidade é permitida.

    geoLocation
    As localizações onde as decisões de acesso foram verificadas. A configuração padrão é as últimas cinco localizações verificadas. A propriedade de condição é enabled (true) ou disabled (false).
    trusteer
    O IBM Security Trusteer detecta o primeiro acesso de novos dispositivos dos usuários.
  • Os atributos contêm as propriedades a seguir:
    name
    Um nome do atributo.
    values
    Os valores do atributo.
    opCode
    O operador.
  • Os operadores da avaliação de valores de atributos:
    EQ
    Todos os valores estão presentes.
    NEQ
    Nenhum dos valores está presente.
    IN
    Um ou mais dos valores estão presentes.
    MATCH
    A condição opCode de ipAddress para correspondência de endereços IP, intervalos ou sub-redes.
    NOMATCH
    A condição opCode de ipAddress para não correspondência de endereços IP, intervalos ou sub-redes.
  • O resultado contém as propriedades a seguir:
    Action
    Especifica qual ação será acionada quando as condições forem atendidas. Valores válidos são:
    • ACTION_ALLOW
    • ACTION_MFA_ALWAYS - MFA toda vez que a regra for correspondida durante a avaliação da política de acesso.
    • ACTION_MFA_PER_SESSION - MFA uma vez por sessão autenticada e permitir se já estiver concluída.
    • ACTION_DENY.
    authnMethods
    Especifica os mecanismos de autenticação permitidos quando a ação é uma autenticação de diversos fatores (MFA). urn:ibm:security:authentication:asf:macotp - permitir que o usuário selecione qualquer mecanismo que ele possa completar, ou um ou mais dos fatores a seguir:
    • emailotp - senha descartável por e-mail
    • smsotp - senha descartável por SMS
    • totp - senha descartável com tempo limitado (aplicativo autenticador)
    • signatures - IBM® Verify notificação push do aplicativo
    • passkey - autenticador por senha
    • voiceotp - Senha verbal descartável enviada para o número de telefone registrado do usuário.
    • anyFactor – é um alias para urn:ibm:security:authentication:asf:macotp. Esse mecanismo é usado especialmente na condição factorLifetime e representa quaisquer mecanismos de autenticação válidos que foram concluídos pelo usuário.
Vida útil do fator

Essa condição associa a validade a um fator ou método específico de autenticação. A validade pode ser associada a um perfil do usuário ou a um dispositivo do usuário.

Esse recurso pode ser usado para implementar a lógica de negócios, como:
  • Para organizações que desejam efetuar MFA de um usuário somente uma vez por dia corrido, é possível configurar a reautenticação por um período de 18 horas.
  • Para organizações que desejam efetuar MFA de um usuário uma vez por semana de negócios, é possível configurar uma política para cada seis dias.
    Observação: quando a reauthPerDevice opção está ativada, o usuário é solicitado a realizar a autenticação multifatorial (MFA) para dispositivos que não sejam "conhecidos". Por exemplo, um usuário se autentica por meio de um navegador diferente (Chrome em vez de Edge) ou de um dispositivo físico diferente.

    Quando um modo de navegação privado é usado, um desafio de MFA é gerado para o primeiro acesso em cada nova sessão.

Observação: As regras que contêm essa condição devem ser regras do tipo “ “alwaysRun” ”, sem nenhuma outra condição definida nessa regra.
factorLifeTimeAttributes contém os atributos obrigatórios a seguir:
name
Uma lista de authnMethods válidos ou o atributo anyFactor.
values
O intervalo de validade em segundos para o authnMethod.
opCode
EQ.
Os atributos a seguir associam a validade do MFA ao dispositivo de um usuário se o valor é “ativado” ou ao perfil do usuário se o valor é “desativado”.
name
reauthPerDevice.
values
Ativado ou desativado.
opCode
EQ.
Atributos de contexto

Os atributos de contexto podem incluir atributos de gerenciamento de dispositivo, do OpenID Connect e de solicitação de HTTP.

Atributos de contexto de gerenciamento de dispositivo
Os atributos de gerenciamento de dispositivos devicePlatform e deviceComplaince são definidos sob a condição de contextAttributes.
devicePlatform
O sistema operacional e as plataformas de dispositivos, como iOS, Android, Mac OS X. Os valores permitidos são IOS, ANDROID, OTHER_MOBILE, MACOS, WINDOWS, OTHER_DESKTOP. Esta condição requer a assinatura do Gerenciamento de Dispositivos; consulte Configurando o acesso condicional.
deviceCompliance
O nível de conformidade do dispositivo. Os valores permitidos são COMPLIANT, NONCOMPLIANT e UNKNOWN. Essa condição requer a assinatura do Gerenciamento de Dispositivos; consulte Configurando o acesso condicional.
Atributos de contexto da conexão OpenID
A maioria dos seguintes atributos de contexto disponíveis para aplicativos OpenID Connect são parâmetros de solicitação OIDC. Os atributos que não correspondem a 1-1 com os nomes dos parâmetros de solicitação são fornecidos com uma explicação. Para mais informações, consulte https://openid.net/specs/openid-connect-core-1_0.html#AuthRequest e https://tools.ietf.org/html/rfc7636#section-4.3.
scope
Uma lista arbitrária separada por espaço de escopos que este token recebe. Um exemplo de escopo conhecido é emailaddressprofileopenid.
response_type
Um ou mais dos seguintes: codetokenid_token. Para conhecer os valores compatíveis, consulte https://oidc-dev-test.ite1.idng.ibmcloudsecurity.com/developer/explorer/#!/OpenID_Connect/handleAuthorizeGet.
acr_values
Vincula um ARC específico a uma autenticação específica.
method
Uma lista de strings que contêm as políticas que foram executadas no formato urn:ibm:security:policy:id:<policy-id>.
claims
Um JSON complexo.
response_mode
Uma sequência, uma de query fragment form_post.
response_method
Especifica o método que é retornado de uma solicitação para um URI.
code_challenge_exist
Uma opção booleana em um fluxo PKCE que especifica se um code_challenge foi enviado na solicitação.
redirect_uri_scheme
O componente de esquema do URI de redirecionamento que detecta um agente de usuário não de navegador e a resposta.
client_type
Especifica se um cliente é um cliente public ou confidential. Os clientes confidenciais têm um segredo do cliente.
request_type
Identifica o terminal do qual a solicitação provém, device_authorize, user_authorize, authorization, access_token, introspect, user_info, revoke ou client_registration.
Atributos de contexto de solicitação de HTTP
Os cabeçalhos de solicitação de HTTP podem ser avaliados em políticas de acesso. Use o nome do cabeçalho da solicitação de HTTP como o nome do atributo no contextAttributes e o valor que corresponde ao valor do cabeçalho de entrada. A transformação de valores não é suportada atualmente e apenas o padrão opCodes para atributos de contexto pode ser usado. Por exemplo,
"conditions": {
  "contextAttributes": {
    "attributes": [{
        "name": "referer",
        "values": [
          "https://<isv_tenant>/usc/",
          "https://<some_other_known_referrer>"
        ],
        "opCode": "IN"
      },
      {
        "name": "user-agent",
        "values": [
          "<specific_user_agent>"
        ],
        "opCode": "EQ"
      },
      {
        "name": "x-forwarded-for",
        "values": [
          "<x_forwarded_for_ip_address>"
        ],
        "opCode": "EQ"
      }
    ]
  }
 }
Atributos de assunto do Cloud Directory
Os atributos de assunto a seguir estão disponíveis para usuários da origem de identidade do Cloud Directory.
displayName
O nome que é exibido para o usuário.
name
O nome fornecido seguido pelo sobrenome.
family_name
O sobrenome do usuário.
given_name
O nome do usuário.
email
O e-mail do usuário.
emailAddress
O e-mail do usuário.
groupIds
Os IDs do grupo.
preferred_username
Um nome do usuário que pode ser mudado.
uuid
Um identificador exclusivo para o usuário.
uniqueSecurityName
Um identificador exclusivo para o usuário.
realmName
Esse valor é sempre cloudIdentityRealm para usuários do Cloud Directory não federados.
userType
Esse valor é sempre regular para usuários do Cloud Directory não federados.
timeAttributes

Atributos de horário do dia.

  • Os atributos contêm as propriedades a seguir:
    name
    Um nome do atributo. O name é um dia da semana e opcionalmente timeZone, startDate e endDate. Ela pode ter os seguintes valores:
    • segunda-feira
    • terça-feira
    • quarta-feira
    • quinta-feira
    • sexta-feira
    • sábado
    • domingo

    Os intervalos de horário por dia da semana são definidos pelo intervalo em seu { ... "values": [ "hh:mm-hh:mm" ]} e podem, opcionalmente, ser programados com um startDate e endDateum.

    timeZone
    O fuso horário que está associado à região. O padrão é a Hora Universal Coordenada (UTC). Os valores podem estar em um dos formatos a seguir.
    • UTC<+/-><offset> - Por exemplo, UTC+10
    • GMT<+/-><offset> - Por exemplo, GMT-5
    • Um nome de banco de dados de fuso horário - Por exemplo, Australia/Brisbane
    startDate
    A data e hora de início para quando a condição estará ativa. Ele pode ser usado individualmente para criar uma correspondência de tempo de bloco, em estágios de atributos de dias da semana. A startDate tem precedência sobre os dias da semana. Os valores estão no formato YYYY-MM-DD HH:mm:ss. Para os dias da semana, o valor está no formato hh:mm-hh:mm.
    endDate
    A data e hora de término opcionais para quando a condição não estará mais ativa. Ele pode ser usado individualmente para criar uma correspondência de tempo de bloco com um startDate ou em estágios de atributos de dias da semana. Sem uma endDate, a condição corresponderá indefinidamente se uma startDate ou um dia da semana existir. Os valores estão no formato YYYY-MM-DD HH:mm:ss.
ipAddress

A condição baseada em endereço IP que suporta IPv4 e IPv6.

  • A condição contém a seguinte propriedade:
    values
    Os valores da condição. Os valores válidos são um intervalo de endereços IP, uma lista de endereços IP separados por vírgula ou um endereço IP do CIDR.
    opCode
    O operador. opCodes específicos são necessários para a condição ipAddress.
    Os operadores que estão disponíveis:
    CORRESP
    Todos os valores estão presentes.
    NOMATCH
    Nenhum dos valores está presente.
location

A cidade ou o país resolvido por meio do endereço IP do usuário. O país deve conter uma lista separada por vírgula do nome do país ou códigos do país de três letras com base no padrão ISO a seguir. Consulte a norma ISO 3166-1 em alpha-3. Um único país ou o código do país de três letras é permitido. A cidade deve conter uma lista separada por vírgula do nome da cidade. Uma única cidade é permitida.

  • A condição contém a seguinte propriedade:
    ativado
    Se a condição está ativada (true) ou desativada (false).
    opCode
    O operador. opCodes específicos são necessários para a condição location.
    Os operadores que estão disponíveis:
    IN
    Um ou mais dos valores estão presentes.
    NOT IN
    Nenhum dos valores está presente.
geoLocation

As localizações onde as decisões de acesso foram verificadas. A configuração padrão é as últimas cinco localizações verificadas.

  • A condição contém a seguinte propriedade:
    ativado
    Se a condição está ativada (true) ou desativada (false).
trusteer

O IBM Security Trusteer detecta o primeiro acesso de novos dispositivos dos usuários.

  • A condição contém a seguinte propriedade:
    ativado
    Se a condição está ativada (true) ou desativada (false).

Procedimento

  1. Obtenha um token de acesso.
    Use um cliente de API que possua a manageAccessPolicies permissão (Gerenciar políticas de acesso) para gerar um token de acesso.
    Request:
    
    curl https://<tenant-hostname>/oidc/endpoint/default/token 
    -d 'grant_type=client_credentials&client_id=<client_id>&client_secret=<client_secret>'
    
    Response:
    
    {
      "access_token": <access_token>,
      "token_type": "Bearer",
      "expires_in": 7199
    }

    Salve o token de acesso para solicitações subsequentes.

  2. Enviar a política de acesso como parte do corpo da solicitação.
    
    Request:
    
    curl -X POST \
      https://<tenant-hostname>/v5.0/policyvault/accesspolicy \
      -H 'Authorization: Bearer <access_token>' \
      -H 'Content-Type: application/json' \
      -d 
    '{
        "schemaVersion": "urn:access:policy:4.0:schema",
        "name": "policy_name",
        "description": "Description of the policy",
        "rules": [
            {
                "result": {
                    "extendedAction": {
                        "action": "ACTION_ALLOW"
                    },
                    "authnMethods": []
                },
                "name": "allow_with_conditions",
                "id": "1",
                "alwaysRun": false,
                "conditions": {
                    "subjectAttributes": {
                        "attributes": [
                            {
                                "values": [
                                    "cloudIdentityRealm",
                                    "www.ibm.com"
                                ],
                                "name": "realmName",
                                "opCode": "IN"
                            },
                            {
                                "values": [
                                    "val1"
                                ],
                                "name": "customAttr1",
                                "opCode": "NEQ"
                            }
                        ]
                    },
                    "contextAttributes": {
                        "attributes": [
                            {
                                "values": [
                                    "COMPLIANT",
                                    "NONCOMPLIANT",
                                    "UNKNOWN"
                                ],
                                "name": "deviceCompliance",
                                "opCode": "IN"
                            },
                            {
                                "values": [
                                    "IOS",
                                    "ANDROID",
                                    "OTHER_MOBILE",
                                    "MACOS",
                                    "WINDOWS",
                                    "OTHER_DESKTOP"
                                ],
                                "name": "devicePlatform",
                                "opCode": "IN"
                            },
                            {
                                "values": [
                                    "value1",
                                    "value2"
                                ],
                                "name": "attrName",
                                "opCode": "EQ"
                            }
                        ]
                    }
                }
            },
            {
                "result": {
                    "extendedAction": {
                        "action": "ACTION_MFA_PER_SESSION"
                    },
                    "authnMethods": [
                        "urn:ibm:security:authentication:asf:macotp"
                    ]
                },
                "name": "mfa_once_per_session",
                "id": "2",
                "alwaysRun": false,
                "conditions": {}
            },
         {	           
             "name": "Authentication factor validity",
             "id": "3",
             "conditions": {
             "factorLifetimeAttributes": {
                 "attributes": [
                 {
                     "name": "smsotp",
                     "opCode": "EQ",
                     "values": [
                        "120"
                      ]
                   }
                  ]
                }
           },
           "result": {
            "extendedAction": {
                "action": "ACTION_MFA_OVERRIDE"
             }
           }
             },
    
            {
                "result": {
                    "extendedAction": {
                        "action": "ACTION_DENY"
                    },
                    "authnMethods": []
                },
                "name": "deny_otherwise",
                "id": "100",
                "alwaysRun": false,
                "conditions": {}
            }
        ]
    }'