Gestión de políticas de acceso a través de API

Una política de acceso es un conjunto de reglas y condiciones que se evalúan para determinar la decisión de acceso. Puede crear políticas de acceso personalizadas. Todas las políticas de acceso personalizadas se visualizan como opciones en la configuración de aplicación.

Acerca de esta tarea

Algunas políticas de acceso predeterminadas se proporcionan para un uso inmediato y no se pueden modificar. Los arrendatarios pueden añadir políticas de acceso personalizadas según sus necesidades.

  • Las reglas se evalúan según una primera coincidencia. Cuando una coincidencia de todas las condiciones de una regla se evalúa como true, se devuelve el resultado de la regla como la decisión de evaluación. No se completa ningún proceso adicional.
  • Se puede añadir un parámetro opcional alwaysRun: true a una regla individual. Este parámetro hace que la regla se evalúe además del conjunto de reglas de la primera coincidencia. El resultado de la primera coincidencia y el parámetro alwaysRun se combinan y la acción más restrictiva se aplica como resultado de la política. Se pueden añadir varias reglas alwaysRun a una política.
  • Cuando una política requiere una suscripción específica para una condición, como por ejemplo la gestión de dispositivos, y el arrendatario no tiene autorización actualmente para esa suscripción, se omite la política. Se devuelve una decisión de autenticación de multifactores (MFA).
  • Cuando una regla requiere una suscripción específica para MFA y el arrendatario no tiene autorización actualmente para esa suscripción, se cambia una decisión de MFA evaluada a una denegación. Este cambio protege la aplicación en lugar de permitir el acceso incondicional.

Se puede utilizar el editor de políticas para crear y modificar políticas. Consulte «Gestión de políticas de acceso ».

Algunas condiciones no se pueden añadir utilizando el editor de políticas. En estos casos, la API se puede utilizar para modificar las políticas existentes o crear nuevas políticas de acceso con dichas condiciones.

La validación de sintaxis se realiza cuando se crea o se actualiza una política de acceso.

Las políticas de acceso tienen el formato JSON siguiente:
Nota: FedRAMP no es compatible con el acceso adaptativo. Por lo tanto, los clientes de FedRAMP no tienen acceso a ninguna de las funciones de Trusteer.
{
    "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": []
            }
        }
    ]
}
Nota: La mayor parte de la API ya se describe en la documentación de Swagger. Puedes acceder a la documentación de Swagger desde la consola de administración, en Configuración > Acceso a la API > Documentación de la API. Para obtener más información sobre las API de Swagger, consulta «Comprobación de las interfaces de programación de aplicaciones (API) ».
La información siguiente se aplica a las reglas de API.
  • Cada regla consta de estas propiedades:
    name
    Un nombre para la regla.
    id
    El ID exclusivo para la regla que se utiliza en los informes y datos de sucesos.
    conditions
    Puede haber más de una condición por regla. Para que la regla coincida y se aplique el resultado, se deben evaluar todas las condiciones de la regla como true. La regla predeterminada contiene una condición vacía.
  • Las condiciones contienen las propiedades siguientes:
    contextAttributes
    Los atributos que son contextuales del flujo en el que se ha ejecutado la política de acceso. Estos atributos incluyen la gestión de dispositivos, OpenID Connect y los atributos de solicitud HTTP.
    subjectAttributes
    Los atributos de sesión de inicio de sesión asociados al sujeto del usuario autenticado.
    factorLifetimeAttributes
    Asociar la validez con un método o factor de autenticación específico.
    timeAttributes
    Los atributos de hora del día que habilitan el control de acceso basado en el tiempo.
    ipAddress
    La condición de dirección IP que habilita las listas de elementos bloqueados y de elementos permitidos individuales, de intervalo o basados en subredes.
    location
    El país o la ciudad que se resuelve desde la dirección IP del usuario. País debe contener una lista separada por comas del nombre de país o código de país de tres letras basados en el siguiente estándar ISO. Se permite un único país o código de país de tres letras.

    Ciudad debe contener una lista separada por comas del nombre de la ciudad. Se permite una sola ciudad.

    geoLocation
    Las ubicaciones donde se han verificado las decisiones de acceso. El valor predeterminado es para las cinco anteriores ubicaciones verificadas. La propiedad de condición está enabled (true) o disabled (false).
    trusteer
    IBM Security Trusteer detecta el acceso por primera vez de nuevos dispositivos para usuarios.
  • Los atributos contienen las propiedades siguientes:
    name
    Un nombre del atributo.
    values
    Los valores del atributo.
    opCode
    El operador.
  • Los operadores para la evaluación de los valores de atributo:
    EQ
    Todos los valores están presentes.
    NEQ
    Ninguno de los valores está presente.
    IN
    Uno o varios de los valores están presentes.
    MATCH
    La condición ipAddress opCode para direcciones IP, intervalos o subredes coincidentes.
    NOMATCH
    La condición ipAddress opCode para direcciones IP, intervalos o subredes no coincidentes.
  • El resultado contiene las propiedades siguientes:
    Action
    Especifica qué acción se debe desencadenar cuando se cumplen las condiciones. Los valores válidos son:
    • ACTION_ALLOW
    • ACTION_MFA_ALWAYS: MFA cada vez que se compara la regla durante la evaluación de la política de acceso.
    • ACTION_MFA_PER_SESSION: MFA una vez por sesión autenticada y permitir si ya se ha completado.
    • ACTION_DENY.
    authnMethods
    Especifica los mecanismos de autenticación permitidos cuando la acción es una autenticación de multifactores (MFA). urn:ibm:security:authentication:asf:macotp : permite al usuario seleccionar cualquier mecanismo que pueda completar, o uno o varios de los siguientes factores:
    • emailotp: contraseña única de correo electrónico
    • smsotp: contraseña única de SMS
    • totp: contraseña única basada en tiempo (aplicación de autenticador)
    • signatures - IBM® Verify notificación push de la aplicación
    • passkey - autenticador de claves de acceso
    • voiceotp - Contraseña única verbal enviada al número de teléfono registrado del usuario.
    • anyFactor: es un alias para urn:ibm:security:authentication:asf:macotp. Este mecanismo se utiliza especialmente en la condición factorLifetime y representa cualquier mecanismo de autenticación válido que haya completado el usuario.
Vida útil del factor

Esta condición asocia la validez con un método o factor de autenticación específico. La validez se puede asociar con un perfil de usuario o con el dispositivo de usuario.

Esta característica se puede utilizar para implementar la lógica empresarial, como por ejemplo:
  • Para las organizaciones que desean aplicar MFA a un usuario solo una vez por día natural, puede configurar la reautenticación en un periodo de 18-hour horas.
  • Para las organizaciones que desean aplicar MFA a un usuario una vez por semana, puede configurar una política cada 6 días.
    Nota: Cuando la reauthPerDevice opción está activada, se solicita al usuario que utilice la autenticación multifactorial (MFA) para los dispositivos que no sean «conocidos». Por ejemplo, un usuario se autentica desde un navegador diferente (Chrome en lugar de Edge) o desde un dispositivo físico diferente.

    Cuando se utiliza una modalidad de navegación privada, se genera una solicitud MFA para el primer acceso en cada sesión nueva.

Nota: Las reglas que contengan esta condición deben ser reglas del tipo « “alwaysRun” » y no deben tener definidas otras condiciones.
factorLifeTimeAttributes contiene los atributos obligatorios siguientes:
name
Una lista de valores authnMethods válidos o el atributo anyFactor.
values
El intervalo de validez en segundos para authnMethod.
opCode
EQ.
Los siguientes atributos asocian la validez de MFA con el dispositivo de un usuario si el valor está "habilitado" o con el perfil del usuario si el valor está "inhabilitado".
name
reauthPerDevice.
values
Habilitado o inhabilitado.
opCode
EQ.
Atributos de contexto

Los atributos de contexto pueden incluir atributos de gestión de dispositivos, OpenID Connect y solicitud HTTP.

Atributos de contexto de gestión de dispositivos
Los atributos de gestión de dispositivos devicePlatform y deviceCompletaince se definen bajo la condición contextAttributes.
devicePlatform
El sistema operativo y las plataformas de dispositivos, como iOS, Android, Mac OS X. Los valores permitidos son IOS, ANDROID, OTHER_MOBILE, MACOS, WINDOWS, OTHER_DESKTOP. Esta condición requiere la suscripción a Device Management; consulte «Configuración del acceso condicional ».
deviceCompliance
El nivel de conformidad del dispositivo. Los valores permitidos son COMPLIANT, NONCOMPLIANT, y UNKNOWN. Esta condición requiere la suscripción a Device Management; consulte «Configuración del acceso condicional ».
Atributos de contexto de OpenID Connect
La mayoría de los atributos de contexto siguientes que están disponibles para aplicaciones OpenID Connect son parámetros de solicitud OIDC. Aquellos atributos que no coinciden 1-1 con los nombres de parámetro de solicitud se proporcionan con una explicación. Para obtener más información, consulte https://openid.net/specs/openid-connect-core-1_0.html#AuthRequest y https://tools.ietf.org/html/rfc7636#section-4.3.
scope
Una lista separada por espacios arbitraria de ámbitos que esta señal recibe. Un ejemplo de un ámbito muy conocido es emailaddressprofileopenid.
response_type
Uno o varios de los siguientes valores: codetokenid_token. Para conocer los valores admitidos, consulte https://oidc-dev-test.ite1.idng.ibmcloudsecurity.com/developer/explorer/#!/OpenID_Connect/handleAuthorizeGet.
acr_values
Enlaza un ARC específico con una autenticación específica.
method
Una lista de cadenas que contienen las políticas que se ejecutaron en el formato urn:ibm:security:policy:id:<policy-id>.
claims
Un JSON complejo.
response_mode
Una serie, uno de los valores de query fragment form_post.
response_method
Especifica el método que se devuelve de una solicitud a un URI.
code_challenge_exist
Una opción booleana en un flujo PKCE que especifica si se ha enviado un code_challenge en la solicitud.
redirect_uri_scheme
El componente de esquema del URI de redirección que detecta un agente de usuario no de navegador y la respuesta.
client_type
Especifica si se trata de un cliente public o confidential. Los clientes confidenciales tienen un secreto de cliente.
request_type
Identifica el punto final desde el que se ha enviado la solicitud: device_authorize, user_authorize, authorization, access_token, introspect, user_info, revoke, o client_registration.
Atributos de contexto de solicitud HTTP
Las cabeceras de solicitud HTTP se pueden evaluar en las políticas de acceso. Utilice el nombre de cabecera de solicitud HTTP como el nombre del atributo en contextAttributes y el valor que corresponde al valor de la cabecera de entrada. La transformación de valores no se admite actualmente y solo se pueden utilizar los opCodes estándar para los atributos de contexto. Por ejemplo,,
"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 del asunto de Cloud Directory
Los atributos del asunto siguientes están disponibles para los usuarios del origen de identidad de Cloud Directory.
displayName
El nombre que se visualiza para el usuario.
name
El nombre de pila seguido por el apellido.
family_name
El apellido del usuario.
given_name
El nombre de pila del usuario.
email
El correo electrónico del usuario.
emailAddress
El correo electrónico del usuario.
groupIds
Los ID de grupo.
preferred_username
Un nombre de usuario que se puede modificar.
uuid
Un identificador exclusivo para el usuario.
uniqueSecurityName
Un identificador exclusivo para el usuario.
realmName
Este valor siempre es cloudIdentityRealm para los usuarios de Cloud Directory no federados.
userType
Este valor siempre es regular para los usuarios de Cloud Directory no federados.
timeAttributes

Atributos de hora del día.

  • Los atributos contienen las propiedades siguientes:
    name
    Un nombre del atributo. name es un día de la semana y, de forma opcional, timeZone, startDate y endDate. Puede tener los valores siguientes:
    • Lunes
    • Martes
    • Miércoles
    • Jueves
    • Viernes
    • Sábado
    • Domingo

    Los intervalos de tiempo por día de la semana se activan mediante el rango en su { ... "values": [ "hh:mm-hh:mm" ]} y, opcionalmente, pueden programarse con un startDate y endDateun.

    timeZone
    El huso horario asociado a la región. El valor predeterminado es Coordinated Universal Time (UTC). Los valores pueden ser cualquiera de los siguientes formatos.
    • UTC<+/-><offset> - Por ejemplo, UTC+10
    • GMT<+/-><offset> - Por ejemplo, GMT-5
    • Un nombre de base de datos de huso horario: por ejemplo, Australia/Brisbane
    startDate
    La fecha y hora de inicio para cuando la condición está activa. Se puede utilizar individualmente para crear una coincidencia de tiempo de bloqueo, realizada con atributos días de la semana. startDate tiene prioridad sobre los días de la semana. Los valores están en el formato YYYY-MM-DD HH:mm:ss. Durante días de la semana, el valor está en el formato hh:mm-hh:mm.
    endDate
    La fecha y hora de finalización opcional para cuando la condición ya no está activa. Se puede utilizar individualmente para crear una coincidencia de tiempo de bloqueo con una startDate o realizarse con atributos de días de la semana. Sin una endDate, la condición coincide indefinidamente si existe una startDate o un día de la semana. Los valores están en el formato YYYY-MM-DD HH:mm:ss.
ipAddress

La condición basada en dirección IP que da soporte a IPv4 e IPv6.

  • La condición contiene la propiedad siguiente:
    values
    Los valores de la condición. Los valores válidos son un intervalo de direcciones IP, una lista de direcciones IP separadas por comas o una dirección IP CIDR.
    opCode
    El operador. Son necesarios opCodes específicos para la condición ipAddress.
    Los operadores que están disponibles.
    MATCH
    Todos los valores están presentes.
    NOMATCH
    Ninguno de los valores está presente.
location

El país o la ciudad obtenido a partir de la dirección IP del usuario. País debe contener una lista separada por comas del nombre de país o código de país de tres letras basados en el siguiente estándar ISO. Véase la norma ISO 3166-1 en alpha-3. Se permite un único nombre o código de país de 3 letras. Ciudad debe contener una lista separada por comas del nombre de la ciudad. Se permite una sola ciudad.

  • La condición contiene la propiedad siguiente:
    habilitado
    Si la condición está habilitada (true) o inhabilitada (false).
    opCode
    El operador. Son necesarios opCodes específicos para la condición location.
    Los operadores que están disponibles.
    IN
    Uno o varios de los valores están presentes.
    NOT IN
    Ninguno de los valores está presente.
geoLocation

Las ubicaciones donde se han verificado las decisiones de acceso. El valor predeterminado es para las cinco anteriores ubicaciones verificadas.

  • La condición contiene la propiedad siguiente:
    habilitado
    Si la condición está habilitada (true) o inhabilitada (false).
trusteer

IBM Security Trusteer detecta el acceso por primera vez de nuevos dispositivos para usuarios.

  • La condición contiene la propiedad siguiente:
    habilitado
    Si la condición está habilitada (true) o inhabilitada (false).

Procedimiento

  1. Obtenga una señal de acceso.
    Utiliza un cliente de API que cuente con el manageAccessPolicies permiso «Gestionar políticas de acceso» para generar un token de acceso.
    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
    }

    Guarde la señal de acceso para solicitudes subsiguientes.

  2. Envíe la política de acceso como parte del cuerpo de solicitud.
    
    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": {}
            }
        ]
    }'