Propiedades de condición de IAM
Las reglas dinámicas y los perfiles de confianza utilizan declaraciones de IAM condicionales que se especifican para añadir automáticamente usuarios federados a grupos de acceso o perfiles de confianza. Cuando los usuarios inician una sesión con un ID federado, los datos del proveedor de identidades (IdP) correlacionan dinámicamente los usuarios con un grupo de acceso basado en las reglas que establece. Para obtener más información, consulte Creación de reglas dinámicas para grupos de acceso y Creación de perfiles de confianza.
También puede asignar políticas de acceso IAM condicionales para designar el acceso temporal a los recursos de su cuenta o permitir el acceso a los recursos durante ventanas de tiempo específicas. Para obtener más información, consulte Limitación del acceso con condiciones basadas en el tiempo y revise la sección Condiciones en las políticas de acceso de /v2/policies.
Regla dinámica y detalles del perfil de confianza
Cada regla dinámica y relación de confianza de perfil de confianza tiene las propiedades siguientes:
- Nombre
- Especifique un nombre personalizado que le ayude a recordar el tipo de usuarios que está añadiendo a un grupo de acceso o perfil de confianza.
- Proveedor de identidades (IdP)
- La regla dinámica o el perfil de confianza solo se evalúa si el usuario que está iniciando la sesión se autentica utilizando el IdP de empresa con este URI de emisor. El URL de IdP se visualiza en la consola para que copie y pegue cuando cree
una regla dinámica o un perfil de confianza. Por ejemplo,
https://w3id.sso.ibm.com/auth/sps/samlidp2/saml20. También puede ver el IdP pulsandoView identity provider (IdP) data. Para IBMid, el IdP es el campo "entityId" de SAML, a veces denominado el ID de emisor, y forma parte de la configuración de la federación cuando se incorpora a IBMid. Para App ID, la sintaxis equivalente es el "realm ID". Para obtener más información, consulte Habilitación de la autenticación desde un proveedor de identidad externo - Duración de la sesión
- La sesión de pertenencia al grupo de acceso dinámico o de perfil de confianza caduca transcurrido el número de horas que se han especificado en esta propiedad. Por ejemplo, si la propiedad se establece en 24 horas, la sesión del perfil dinámico o de confianza del usuario finaliza un día (24 horas) después de iniciar la sesión.
Propiedades de las declaraciones de condición de reglas y perfiles
Además, cada relación de regla dinámica o de confianza de perfil de confianza tiene una o varias condiciones que constan de las siguientes propiedades. Los usuarios tienen que cumplir todas las condiciones para que la regla general dinámica o la autenticación de perfil de confianza se evalúe en true:
- Permitir a los usuarios cuando
- Nombre de atributo que forma parte de los datos del proveedor de identidades. Para obtener más información sobre cómo se crean los nombres de atributos desde su proveedor de identidad empresarial hasta la evaluación de condiciones, consulte Asignación de atributos del proveedor de identidad empresarial.
- Operador
- Compara el atributo especificado en el campo
Allow users whencon la propiedadValues. Puede elegir entre Equals, Not Equals, Equals Ignore Case, Not Equals Ignore Case, In y Contains. Utilice la opción Contains cuando la sentencia de atributo tenga un tipo de matriz. Puede especificar más de un valor para que coincida utilizando la opción In. - Valores
- Valor de atributo que utiliza el comparador para evaluar con el nombre de atributo de
Allow users when.
Puede pensar en una condición de regla dinámica o de perfil de confianza como un par clave:valor. La clave es lo que añade en el campo Allow users when y el valor es lo que especifica en el campo Values.
Operadores disponibles para las condiciones de las reglas y los perfiles
| Operador | Descripción | Condición de ejemplo |
|---|---|---|
| Igual que | Comparación de series sensible a mayúsculas y minúsculas. Los valores booleanos o numéricos se convierten en una serie antes de la comparación. | primaryGroup Equals “Admins” |
| No igual | Comparación de serie sensible a mayúsculas y minúsculas negada. Los valores booleanos o numéricos se convierten en una serie antes de la comparación. | primaryGroup NotEquals "Admins" |
| Igual a (ignorar mayúsculas/minúsculas) | Comparación de series no sensible a mayúsculas y minúsculas. Los valores booleanos o numéricos se convierten en una serie antes de la comparación. | isManager EqualsIgnoreCase “tRuE” |
| No igual a (ignorar mayúsculas/minúsculas) | Comparación de serie no sensible a mayúsculas y minúsculas negada. Los valores booleanos o numéricos se convierten en una serie antes de la comparación. | is_teamlead NotEqualsIgnoreCase “TrUe” |
| Contiene | Si el atributo es una matriz de series, números o valores booleanos, Contains determina utilizando el comparador Equals si el valor que se proporciona forma parte de la matriz en el mensaje de inicio de sesión.
Si el atributo es una sola serie, Contains determina si el valor que se proporciona está contenido en el atributo de serie en el mensaje de inicio de sesión. |
group contiene "Admins" |
| En | Notación corta para varios operadores Igual a. Compara el valor del atributo de mensaje de inicio de sesión con la lista de valores potenciales de esta regla. Los booleanos o los números se convierten a una serie antes de la comparación. | jobRole en ["Manager", "Director", "Team-Lead"] |
Ejemplo
La tabla siguiente incluye valores para cada uno de los campos para una regla dinámica o una condición de perfil de confianza. En este ejemplo, los usuarios que se identifican como gestores dentro de la red federada IdP se asignan a un grupo de acceso IBM Cloud o a un perfil de confianza que tiene un acceso específico establecido sólo para gestores.
| Campo | Valor |
|---|---|
| Nombre | Manager |
| Proveedor de identidad | https://idp.example.org/SAML2 |
| Duración de la sesión en horas | 12 |
| Permitir usuarios cuando (nombre de atributo) | isManager |
| Operador | Equals |
| Valor | true |
Calcular nombres de atributos de recursos
Para establecer confianza con un recurso de cálculo en un perfil de confianza, puede utilizar la consola de IBM Cloud, la CLI de IBM Cloud o la API de IAM. Si selecciona Todos los recursos de servicio y añade condiciones para filtrar las instancias de recursos de cálculo que pueden aplicar el perfil, las condiciones se crean basándose en los siguientes atributos de recurso.
Nombres de atributos de Kubernetes y Red Hat OpenShift
| Nombre de consola de IBM Cloud | Nombre de CLI y de API | Descripción |
|---|---|---|
| ID del grupo de recursos | resource_group_id |
El ID del grupo de recursos que contiene este clúster. Puede identificar el grupo de recursos de un clúster utilizando su página de visión general en la consola de IBM Cloud. |
| Nombre del grupo de recursos | resource_group_name |
El nombre del grupo de recursos que contiene este clúster. |
| Instancia de servicio | service_instance |
El ID de este clúster. Puede recuperar este valor de la página de visión general del clúster en la consola de IBM Cloud como "ID de clúster" o utilizando la CLI de IBM Cloud. |
| Ubicación | location |
Ubicación del clúster derivado de su nombre de recurso de nube. |
| Espacio de nombres | namespace |
Espacio de nombres de la cuenta de servicio que se utiliza para recuperar una señal de recurso de cálculo y obtener una señal de IAM. |
| Cuenta de servicio | name |
Nombre de la cuenta de servicio que se utiliza para recuperar una señal de recurso de cálculo y obtener una señal de IAM. |
| Pod | pod |
El nombre del pod de Kubernetes que ejecuta el código que desea recuperar una señal de IAM. |
Nombres de atributos de servidor virtual para VPC
| Nombre de consola de IBM Cloud | Nombre de CLI y de API | Descripción |
|---|---|---|
| ID del grupo de recursos | resource_group_id |
El ID del grupo de recursos que contiene este clúster. Puede identificar el grupo de recursos de un clúster utilizando su página de visión general en la consola de IBM Cloud. |
| Nombre del grupo de recursos | resource_group_name |
El nombre del grupo de recursos que contiene este clúster. |
| ID de recurso | resource |
El ID del servidor virtual para VPC. |
| Nombre de grupo de la instancia | instance_group_name |
Nombre del grupo de instancias, si este servidor virtual forma parte de uno. |
| Región | region |
Región en la que se despliega este servidor virtual. |
| Subred | subnet_id |
El ID de subred del servidor virtual para VPC, si hay una disponible. |
| ID de VPC | vpc_id |
El ID de VPC del servidor virtual para VPC, si hay una disponible. |
| Zona | zone |
Nombre de zona en el que se despliega este servidor virtual. |
Ejemplos de mandatos de CLI de IBM Cloud
Los ejemplos siguientes muestran cómo puede utilizar los nombres de atributo en la CLI para crear enlaces y condiciones de perfil de confianza.
Enlace de un perfil de confianza a un clúster de Kubernetes
Para enlazar el perfil de confianza Test al clúster de Kubernetes c0pigdctkkc07fs7pm06 en la cuenta 444aebb0657c7f0f3aae8e7bdc78709a y la cuenta de servicio my-service-account en el espacio
de nombres my-namespace, especifique el mandato siguiente:
ibmcloud iam trusted-profile-link-create Test --name NewLink4IKS --cr-type IKS_SA \
--link-crn
crn:v1:bluemix:public:containers-kubernetes:us-east:a/444aebb0657c7f0f3aae8e7bdc78709a:c0pigdctkkc07fs7pm06:: \
--link-namespace "my-namespace" \
--link-name "my-service-account"
Creación de condiciones de perfil de confianza para Kubernetes
Para conectar el perfil de confianza con el ID Profile-b2f13064-2b8c-4e4b-9181-c1973a408e3c a todas las cuentas de servicio del clúster de Kubernetes c0pigdctkkc07fs7pm06 en la cuenta 444aebb0657c7f0f3aae8e7bdc78709a y el espacio de nombres de la cuenta de servicio my-namespace, especifique el mandato siguiente:
ibmcloud iam trusted-profile-rule-create Profile-b2f13064-2b8c-4e4b-9181-c1973a408e3c \
--name NewRule4IKS --type Profile-CR --cr-type IKS_SA \
--conditions "claim:service_instance,operator:EQUALS,vlaue:c0pigdctkkc07fs7pm06" \
--conditions "claim:namespace,operator:EQUALS,value:my-namespace"
Creación de condiciones de perfil de confianza para VPC
Para conectar el perfil de confianza con el ID Profile-b2f13064-2b8c-4e4b-9181-c1973a408e3c a todos los servidores virtuales en una VPC r206-1db73eed-b0fb-b04f-bb57-4d3a3c2dff9d de la cuenta 444aebb0657c7f0f3aae8e7bdc78709a,
especifique el mandato siguiente:
ibmcloud iam trusted-profile-rule-create Profile-b2f13064-2b8c-4e4b-9181-c1973a408e3c \
--name NewRule4VSI --type Profile-CR --cr-type VSI \
--conditions "claim:vpc_id,operator:EQUALS,value:r206-1db73eed-b0fb-b04f-bb57-4d3a3c2dff9d"
Condiciones en v2 políticas de acceso
Las condiciones basadas en tiempo y en atributos de recursos para las políticas de acceso de IAM utilizan la sintaxis /v2/policies. Las políticas que utilizan la sintaxis /v1/policies no pueden añadir condiciones basadas
en atributos de recursos temporales. Para obtener más información, consulte Limitaciones de la versión de la política de acceso.
Para ver el nuevo esquema de las políticas, consulte /v2/policies.
Condiciones temporales
La siguiente tabla enumera los operadores disponibles para crear condiciones basadas en el tiempo para las políticas de acceso.
| Operador | Descripción | Ejemplo |
|---|---|---|
dayOfWeekAnyOf |
Los días de la semana en que el cliente puede utilizar la póliza. 1 - Lunes 2 - Martes 3 - Miércoles 4- Jueves 5 - Viernes 6 - Sábado 7 - Domingo |
Véase el ejemplo. |
timeGreaterThanOrEquals |
La hora a la que la condición comienza a conceder acceso. El tiempo se calcula mediante <time>±<time_zone_offset>. |
Véase el ejemplo. |
timeLessThanOrEquals |
La hora a la que la condición finaliza el acceso. El tiempo se calcula mediante <time>±<time_zone_offset>. |
Véase el ejemplo. |
dateTimeGreaterThanOrEquals |
La fecha y hora en que la condición comienza a conceder acceso. La fecha se calcula mediante <datetime>±<time_zone_offset>. |
Véase el ejemplo. |
dateTimeLessThanOrEquals |
La fecha y hora en que la condición finaliza el acceso. La fecha se calcula mediante <datetime>±<time_zone_offset>. |
Véase el ejemplo. |
Cuando defina una condición con un operador GreaterThanOrEquals, incluya siempre una condición con un operador LessThanOrEquals. De este modo, hay una duración claramente definida, ya sea temporal, recurrente durante
todo el día o recurrente con horas personalizadas. Para más información, consulte Patrones de condiciones.
Para los operadores de fecha y hora, las políticas admiten el formato ISO 8601 hh:mm:ss±hh:mm. El desfase horario se refiere al Tiempo Universal Coordinado.
Utilice las siguientes variables para representar el key que especifica el atributo de entorno del cliente, contra el que evalúa la política. Cada key admite un conjunto discreto de operadores.
| Nombre de variable | Descripción | Operadores soportados |
|---|---|---|
environment.attributes.current_time |
La hora actual del cliente. | timeGreaterThanOrEquals, timeLessThanOrEquals |
environment.attributes.current_date_time |
La fecha y hora actuales del cliente. | dateTimeGreaterThanOrEquals, dateTimeLessThanOrEquals |
environment.attributes.day_of_week |
El día de la semana actual del cliente. | dayOfWeekAnyOf, dayOfWeekEquals |
Ejemplo: dayOfWeekAnyOf, timeGreaterThanOrEquals, y timeLessThanOrEquals
Los días de la semana especificados en este ejemplo corresponden a lunes, martes, miércoles y jueves. El valor timeGreaterThanOrEquals indica que la condición comienza a conceder acceso a las 9 AM en la zona horaria UTC-5. El
valor timeLessThanOrEquals indica que la condición termina el acceso a las 5 PM en la zona horaria UTC-5.environment.attributes.current_time y environment.attributes.day_of_week indican que se trata
de una condición recurrente basada en el tiempo. Incluya siempre las condiciones time con una condición dayOfWeek.
"conditions": [
{
"key": "{{environment.attributes.day_of_week}}",
"operator": "dayOfWeekAnyOf",
"value": [
1,
2,
3,
4
]
},
{
"key": "{{environment.attributes.current_time}}",
"operator": "timeGreaterThanOrEquals",
"value": "09:00:00-05:00"
},
{
"key": "{{environment.attributes.current_time}}",
"operator": "timeLessThanOrEquals",
"value": "17:00:00-05:00"
}
]
Ejemplo: dayOfWeekEquals
En este ejemplo, el día de la semana está representado por 3 en la cadena value, que corresponde a miércoles. En esa misma cadena, +6:00 representa la zona horaria UTC+6:00. Sólo hay una
condición, así que está anidada bajo "rule".
"rule": {
"key": "{{environment.attributes.day_of_week}}",
"operator": "dayOfWeekEquals",
"value": "3+06:00"
},
Ejemplo: dateTimeGreaterThanOrEquals y dateTimeLessThanOrEquals
En este ejemplo, el valor dateTimeGreaterThanOrEquals indica que la condición comienza a conceder acceso el 26 de diciembre de 2022 a las 9 AM en la zona horaria UTC-5. El valor dateTimeLessThanOrEquals indica que
la condición finaliza el acceso el 27 de diciembre de 2022 a las 17 horas en la zona horaria UTC-5. environment.attributes.current_date_time indica que se trata de una condición temporal basada en el tiempo.
"conditions": [
{
"key": "{{environment.attributes.current_date_time}}",
"operator": "dateTimeGreaterThanOrEquals",
"value": "2022-12-26T09:00:00-05:00"
},
{
"key": "{{environment.attributes.current_date_time}}",
"operator": "dateTimeLessThanOrEquals",
"value": "2022-12-27T17:00:00-05:00"
}
]
Condiciones basadas en atributos de recursos
La siguiente tabla enumera los operadores disponibles para crear condiciones basadas en atributos de recursos para las políticas de acceso.
| Operador | Descripción | Ejemplo |
|---|---|---|
stringEquals |
Comparación de series sensible a mayúsculas y minúsculas. Los valores booleanos o numéricos se convierten en una serie antes de la comparación. | Véase el ejemplo. |
stringExists |
Booleano donde true indica que la cadena debe estar presente y puede estar vacía. false indica que la cadena no debe estar presente. |
Véase el ejemplo. |
stringMatch |
Se realiza una coincidencia de cadena sensible a mayúsculas y minúsculas entre el patrón y la cadena de destino utilizando un asterisco (*), un signo de interrogación (?), ambos o ninguno (igual que el valor
literal). Un asterisco (*) representa cualquier secuencia de cero o más caracteres en la cadena, y un signo de interrogación (?) representa cualquier carácter único. También puede expresar un asterisco * y un signo de interrogación ? como valor literal encerrando cada uno de ellos entre dos conjuntos de llaves {{}}. |
Véase el ejemplo. |
stringEqualsAnyOf |
Cadena exacta sensible a mayúsculas y minúsculas que coincide con cualquiera de las cadenas de una matriz de cadenas. Límite de 10 valores. | Véase el ejemplo. |
stringMatchAnyOf |
Cadena sensible a mayúsculas y minúsculas que coincide con cualquiera de las cadenas de una matriz de cadenas. Los valores de cadena pueden incluir un asterisco (*), un signo de interrogación (?), ambos o ninguno
(igual que el valor literal). Un asterisco (*) representa cualquier secuencia de cero o más caracteres en la cadena, y un signo de interrogación (?) representa cualquier carácter único. También puede expresar
un asterisco * y un signo de interrogación ? como valor literal encerrando cada uno de ellos entre dos conjuntos de llaves {{}}. Límite de 10 valores. |
La dirección key representa el atributo del recurso que admite el servicio elegido. Un key adopta la forma de resource.attributes.<attribute-name>. Por ejemplo, en el caso de Cloud Object Storage,
el atributo compatible prefix puede representarse como la clave con la notación resource.attributes.prefix. La siguiente tabla enumera variables de ejemplo y no es exhaustiva.
| Nombre de variable | Descripción | Operadores soportados |
|---|---|---|
resource.attributes.prefix |
Define el prefijo que esta condición debe permitir para listar objetos o carpetas. | stringMatchAnyOf |
resource.attributes.path |
Abarca todos los accesos de lectura, escritura y gestión de objetos. | stringMatchAnyOf |
resource.attributes.delimiter |
Restringe el tipo de estructura de carpetas que el usuario puede generar y le ayuda a navegar por el cubo como si fuera una jerarquía de archivos. | stringEquals |
Para más información, consulte Patrones de condiciones.
Ejemplo: stringMatchAnyOf y stringEqualsAnyOf
En este ejemplo, los valores stringMatchAnyOf para la variable resource.attributes.path indican que el acceso se concede cuando la ruta del objeto coincide y comienza por home/David/*, special/*,
restricted/* o temporary/test*spatial.?.log (por ejemplo, temporary/test_spatial.1.log ). El valor or indica que existe una condición alternativa que puede conceder el acceso.
El valor stringEqualsAnyOf para la variable resource.attributes.delimiter indica que el acceso se concede cuando no hay indicador de límite o cuando / está presente. Además, el prefijo stringEqualsAnyOf para la variable resource.attributes.prefix indica que también debe existir home/, o home/David/, o ningún prefijo para conceder el acceso. El valor and nos indica que tanto resource.attributes.delimiter como resource.attributes.prefix deben cumplirse para conceder el acceso.
"pattern": "attribute-based-condition:resource:literal-and-wildcard",
"rule": {
"operator": "or",
"conditions": [
{
"key": "{{resource.attributes.path}}",
"operator": "stringMatchAnyOf",
"value": [
"home/David/*",
"special/*",
"restricted/*",
"temporary/test*spatial.?.log"
]
},
{
"operator": "and",
"conditions": [
{
"key": "{{resource.attributes.delimiter}}",
"operator": "stringEqualsAnyOf",
"value": [
"",
"/"
]
},
{
"key": "{{resource.attributes.prefix}}",
"operator": "stringEqualsAnyOf",
"value": [
"",
"home/",
"home/David/"
]
}
]
}
]
}
Ejemplo stringExists, stringEquals, stringMatch
En este ejemplo, stringEquals para iam_id, accountID, serviceName, y resourceType indica que se realiza una coincidencia de cadena exacta. El asterisco presente en el valor
stringMatch para la variable de recurso indica que se concede acceso a todos los recursos que comienzan por dev-bucket-. El valor verdadero stringExists para la variable de ruta y el valor false stringExists para la variable de prefijo y delimitador indica que sólo debe existir la ruta para conceder el acceso.
{
"type": "access",
"subject": {
"attributes": [
{
"key": "iam_id",
"operator": "stringEquals",
"value": "IBMid-1234"
}
]
},
"control": {
"grant": {
"roles": [
{
"role_id": "crn:v1:bluemix:public:cloud-object-storage::::role:ListFolderContent"
},
{
"role_id": "crn:v1:bluemix:public:cloud-object-storage::::role:ListFolder"
},
{
"role_id": "crn:v1:bluemix:public:cloud-object-storage::::role:AllFolderOperations"
}
]
}
},
"resource": {
"attributes": [
{
"name": "accountId",
"operator": "stringEquals",
"value": "account-123"
},
{
"key": "serviceName",
"operator": "stringEquals",
"value": "cloud-object-storage"
},
{
"key": "serviceInstance",
"operator": "stringEquals",
"value": "cd329d97-c33d-4428-b39e-6170dc1c2a1e"
},
{
"key": "resource",
"operator": "stringMatch",
"value": "dev-bucket-*"
},
{
"key": "resourceType",
"operator": "stringEquals",
"value": "bucket"
}
]
},
"rule": {
"operator": "and",
"conditions": [
{
"key": "{{resource.attributes.path}}",
"operator": "stringExists",
"value": true
},
{
"key": "{{resource.attributes.prefix}}",
"operator": "stringExists",
"value": false
},
{
"key": "{{resource.attributes.delimiter}}",
"operator": "stringExists",
"value": false
}
]
}
}