Sintaxis de política
A continuación se utiliza una política personalizada para OBS como ejemplo para describir la sintaxis.
{ "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "obs:bucket:ListAllMyBuckets", "obs:bucket:HeadBucket", "obs:bucket:ListBucket", "obs:bucket:GetBucketLocation" ], "Condition": { "StringEndWithIfExists": { "g:UserName": [ "specialCharactor" ] }, "Bool": { "g:MFAPresent": [ "true" ] } }, "Resource": [ "obs:*:*:bucket:*" ] } ] }
Estructura de políticas
Una política consiste en una versión y una o más sentencias (que indican diferentes acciones).
Parámetros de política
Los parámetros de directiva incluyen Version y Statement, que se describen en la tabla siguiente. Puede crear políticas personalizadas especificando los parámetros. Para obtener más información, véase Casos de uso de políticas personalizadas.
Parámetro |
Descripción |
Valor |
|
---|---|---|---|
Version |
Versión de política. |
1.1: indica el control de acceso basado en políticas. |
|
Statement |
Effect |
Determina si se permiten o deniegan las operaciones definidas en la acción. |
NOTA:
Si una acción tiene efectos Allow y Deny, el efecto Deny tiene prioridad. |
Action |
Operaciones a realizar en el servicio. |
Formato: "Service name:Resource type:Operation". Se admiten caracteres carácter comodín (*), que indican todas las opciones. Ejemplo: obs:bucket:ListAllMybuckets: Permisos para listar todos los buckets OBS. Vea todas las acciones del servicio en su Referencia de API, por ejemplo, consulte Acciones admitidas de OBS. |
|
Condition |
Determina cuándo entra en vigor una política. Una condición consiste en una clave de condición y un operador. |
Formato: "Condition operator:{Condition key:[Value 1,Value 2]}" Si establece varias condiciones, la política solo tendrá efecto cuando se cumplan todas las condiciones. Ejemplo: StringEndWithIfExists":{"g:UserName":["specialCharactor"]}: La instrucción es válida para usuarios cuyos nombres terminan con specialCharactor. |
|
Resource |
Recursos sobre los que entra en vigor la política. |
Formato: Service name:Region:Account ID:Resource type:Resource path. Se admiten caracteres carácter comodín (*). Para obtener más información sobre los servicios en la nube que admiten la autorización a nivel de recursos y los tipos de recursos admitidos, consulte Servicios en la nube compatibles con la autorización a nivel de recursos mediante IAM. Ejemplo:
|
- Condition key
Una clave de condición es una clave en el elemento Condition de una sentencia. Hay claves de condición globales y de nivel de servicio.
- Las claves de condición globales (comenzando con g:) se aplican a todas las operaciones. IAM proporciona common global condition keys y special global condition keys.
- Claves de condición globales comunes: Los servicios en la nube no necesitan proporcionar información de identidad del usuario. En su lugar, IAM abstrae automáticamente la información del usuario y autentica a los usuarios. Para obtener más información, véase Tabla 2.
- Claves de condición global especiales: IAM obtiene información de condición de los servicios en la nube para la autenticación. Solo algunos servicios en la nube admiten claves de condición globales especiales.
- Las claves de condición de nivel de servicio (comenzando con una abreviatura de nombre de servicio, por ejemplo, obs:) solo se aplican a las operaciones en el servicio especificado. Para obtener más información, consulte la guía del usuario del servicio en la nube correspondiente, por ejemplo, consulte Condiciones de solicitud de OBS.
Tabla 2 Claves de condición global comunes Clave de condición global
Tipo
Descripción
g:CurrentTime
Time
Tiempo en la que se recibe una solicitud de autenticación. La hora está en formato ISO 8601, por ejemplo 2012-11-11T23:59:59Z. (Ver una política de ejemplo que utiliza esta clave de condición)
g:DomainName
String
Nombre de la cuenta del solicitante. (Ver una política de ejemplo que utiliza esta clave de condición)
g:MFAPresent
Boolean
Si se obtiene un token a través de la autenticación MFA. (Ver una política de ejemplo que utiliza esta clave de condición)
g:MFAAge
Number
Período de validez de un token obtenido mediante autenticación MFA. Esta condición debe usarse junto con g:MFAPresent. (Ver una política de ejemplo que utiliza esta clave de condición)
g:ProjectName
String
Nombre del proyecto. (Ver una política de ejemplo que utiliza esta clave de condición)
g:ServiceName
String
Nombre del servicio. (Ver una política de ejemplo que utiliza esta clave de condición)
g:UserId
String
ID de usuario de IAM. (Ver una política de ejemplo que utiliza esta clave de condición)
g:UserName
String
Nombre de usuario IAM. (Ver una política de ejemplo que utiliza esta clave de condición)
Tabla 3 Claves de condición global especiales Clave de condición global
Tipo
Descripción
g:SourceIp
IP Address
Dirección IP del usuario que envía una solicitud.
g:SourceVpc
String
ID de VPC del usuario que envía una solicitud.
g:SourceVpce
String
ID de punto de conexión de VPC del usuario que envía una solicitud.
g:TagKeys
String
Clave de etiqueta de recurso.
g:ResourceTag/{TagKey}
String
Valor de clave de etiqueta de recurso.
- g:CurrentTime
Ejemplo: La siguiente política otorga permiso para crear roles personalizados en IAM desde el 1 de marzo de 2023, 08:00 GMT+08:00 hasta el 30 de marzo de 2023, 08:00 GMT+08:00. El valor de la clave de condición g:CurrentTime está en formato UTC.
{ "Version": "1.1", "Statement": [{ "Effect": "Allow", "Action": ["iam:roles:createRoles"], "Condition": { "DateGreaterThan": { "g:CurrentTime": ["2023-03-01T00:00:00Z"] }, "DateLessThan": { "g:CurrentTime": ["2023-03-30T00:00:00Z"] } } }] }
- g: DomainName
Ejemplo: La siguiente política solo permite que el usuario zhangsan cree roles personalizados en IAM.
{ "Version": "1.1", "Statement": [{ "Effect": "Allow", "Action": ["iam:roles:createRoles"], "Condition": { "StringEquals": { "g:DomainName": ["zhangsan"] } } }] }
- g:MFAPresent
Ejemplo: La siguiente política permite a los usuarios que obtengan credenciales mediante MFA crear roles personalizados en IAM.
{ "Version": "1.1", "Statement": [{ "Effect": "Allow", "Action": ["iam:roles:createRoles"], "Condition": { "Bool": { "g:MFAPresent": ["true"] } } }] }
- g:MFAAge
Ejemplo: La siguiente política permite a los usuarios que obtengan credenciales mediante MFA con un período válido superior a 900s crear roles personalizados en IAM.
{ "Version": "1.1", "Statement": [{ "Effect": "Allow", "Action": ["iam:roles:createRoles"], "Condition": { " NumberGreaterThanEquals ": { "g:MFAAge": ["900"] } } }] }
- g:ProjectName
Ejemplo: La siguiente política permite a los usuarios que obtengan credenciales de CN North-Beijing crear roles personalizados en IAM.
{ "Version": "1.1", "Statement": [{ "Effect": "Allow", "Action": ["iam:roles:createRoles"], "Condition": { " StringEquals ": { "g: ProjectName ": ["cn-north-4"] } } }] }
- g: ServiceName
Ejemplo: La siguiente política permite a los usuarios acceder a todos los servicios excepto IAM. El valor de esta clave de condición coincide con Service Name en la solicitud de autenticación.
{ "Version": "1.1", "Statement": [{ "Action": [ "*:*:*" ], "Effect": "Allow", "Condition": { "StringNotEqualsIgnoreCase": { "g:ServiceName": [ "iam" ] } } }] }
- g: UserId
Ejemplo: La siguiente política solo permite al usuario cuyo ID sea xxxxxxxxxxx… crear roles personalizados en IAM.
{ "Version": "1.1", "Statement": [{ "Effect": "Allow", "Action": ["iam:roles:createRoles"], "Condition": { "StringEquals": { "g: UserId ": ["xxxxxxxxxxx…"] } } }] }
- g: UserName
Ejemplo: La siguiente política solo permite que el usuario lisi cree roles personalizados en IAM.
{ "Version": "1.1", "Statement": [{ "Effect": "Allow", "Action": ["iam:roles:createRoles"], "Condition": { "StringEquals": { "g: UserName ": ["lisi"] } } }] }
- Claves de condición multivalor
- ForAllValues: Comprueba si el valor de cada miembro del conjunto de solicitudes es un subconjunto del conjunto de claves de condición. La condición devuelve true si cada valor de clave de la solicitud coincide con al menos un valor de la política.
{ "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "ims:images:share" ], "Condition": { "ForAllValues:StringEquals": { "ims:TargetOrgPaths": [ "orgPath1", "orgPath2", "orgPath3" ] } } } ] }
Esta política muestra cómo usar el calificador ForAllValues con el operador de condición StringEquals. La condición determina si se permite el uso compartido con las cuentas de miembro en la ruta de organización orgPath1, orgPath2 o orgPath3.
Supongamos que un usuario realiza una solicitud para compartir IMS con las cuentas de miembro en las rutas de organización orgPath1 y orgPath3. Se permite la solicitud porque los atributos solicitados del usuario coinciden con los valores especificados en la política.
Si la solicitud del usuario incluye orgPath1, orgPath2, orgPath3 y orgPath4, la solicitud falla porque orgPath4 no está incluida en el operador de condición.
- ForAnyValue: Prueba si al menos un miembro del conjunto de valores de solicitud coincide con al menos un miembro del conjunto de valores de clave de condición. La condición devuelve true si cualquiera de los valores de clave de la solicitud coincide con cualquiera de los valores de condición de la política. Para ninguna clave coincidente o un conjunto de datos nulo, la condición devuelve false.
{ "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "ims:images:share" ], "Condition": { "ForAnyValue:StringEquals": { "ims:TargetOrgPaths": [ "orgPath1", "orgPath2", "orgPath3" ] } } } ] }
Esta política muestra cómo usar el calificador ForAnyValue con el operador de condición StringEquals. La condición determina si se permite el uso compartido con las cuentas de miembro en la ruta de organización orgPath1, orgPath2 o orgPath3.
Supongamos que un usuario realiza una solicitud para compartir IMS con las cuentas de miembro en la ruta de organización orgPath1 o orgPath4. Se permite la solicitud porque los atributos solicitados del usuario coinciden con los valores especificados en la política.
Si el usuario inicia una solicitud para compartir IMS con las cuentas de miembro en la ruta de organización orgPath4 o orgPath5, la solicitud falla porque orgPath4 y orgPath5 no están incluidos en el operador de condición.
- ForAllValues: Comprueba si el valor de cada miembro del conjunto de solicitudes es un subconjunto del conjunto de claves de condición. La condición devuelve true si cada valor de clave de la solicitud coincide con al menos un valor de la política.
Condition operators
Figura 2 Operadores de condiciones
- Si un único operador de condición incluye múltiples valores para una clave, ese operador de condición se evalúa usando un OR lógico. La condición devuelve true si alguno de los valores de clave de la solicitud coincide con cualquiera de los valores de condición de la política.
Para los operadores de condiciones coincidentes anulados (como StringNotEquals), el valor de solicitud no puede coincidir con ninguno de los valores de condición basándose en los operadores de condición.
- Si la política tiene varios operadores de condiciones o varias claves conectadas a un único operador de condiciones, las condiciones se evalúan mediante un AND lógico.
- Las claves de condición globales (comenzando con g:) se aplican a todas las operaciones. IAM proporciona common global condition keys y special global condition keys.
- Operator
Un operador, una clave de condición y un valor de condición juntos constituyen una declaración de condición completa. Una política solo entra en vigor cuando se cumplen las condiciones de solicitud. El sufijo de operador IfExists indica que una política entra en vigor si un valor de solicitud está vacío o cumple la condición especificada. Por ejemplo, si se selecciona el operador StringEqualsIfExists para una política, la política tiene efecto si un valor de solicitud está vacío o es igual al valor de condición especificado. Los operadores son operadores de cadena. No distinguen entre mayúsculas y minúsculas a menos que se especifique lo contrario.
- Operadores de condición de string
Tabla 4 Operadores de condición de string Tipo
Operador
Descripción
String
StringEquals
Coincidencia exacta, sensible a mayúsculas y minúsculas
StringNotEquals
Coincidencia negativa, sensible a mayúsculas y minúsculas
StringEqualsIgnoreCase
Coincidencia exacta
StringNotEqualsIgnoreCase
Coincidencia negativa
StringMatch
Coincidencia sensible a mayúsculas y minúsculas. Los valores son expresiones regulares que admiten solo comodines de coincidencia de varios caracteres (*) y comodines de coincidencia de un solo carácter (?).
StringNotMatch
Coincidencia negativa sensible a mayúsculas y minúsculas. Los valores son expresiones regulares que admiten solo comodines de coincidencia de varios caracteres (*) y comodines de coincidencia de un solo carácter (?).
Por ejemplo, la siguiente sentencia contiene un elemento de condición que utiliza "g:DomainName" para especificar que el principal cuyo nombre de dominio es "ZhangSan" puede obtener el contenido y los metadatos del objeto.
{ "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "obs:object:GetObject" ], "Condition": { "StringEquals": { "g:DomainName": [ "ZhangSan" ] } } } ] }
- Operadores de condición numérica
Tabla 5 Operadores de condición numérica Tipo
Operador
Descripción
Number
NumberEquals
Coincidencia
NumberNotEquals
Coincidencia negativa
NumberLessThan
Coincidencia de "menos que"
NumberLessThanEquals
Coincidencia "Menos que o igual"
NumberGreaterThan
Coincidencia de "mayor que"
NumberGreaterThanEquals
Coincidencia "mayor que o igual"
Por ejemplo, la siguiente sentencia contiene un elemento de condición que utiliza el operador de condición "NumericLessThanEquals" con la clave "obs:max-keys" para especificar que el solicitante puede enumerar hasta 10 objetos en "example_bucket" a la vez.
{ "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "obs:bucket:ListBucket" ], "Resource": [ "OBS:*:*:bucket:example_bucket" ], "Condition": { "NumberLessThanEquals": { "obs:max-keys": [ "10" ] } } } ] }
- Operadores de condición de fecha
Tabla 6 Operadores de condición de fecha Tipo
Operador
Descripción
Date
DateLessThan
Coincidencia antes de una fecha y hora específicas
DateLessThanEquals
Coincidencia en o antes de una fecha y hora específicas
DateGreaterThan
Coincidencia después de una fecha y hora específicas
DateGreaterThanEquals
Coincidencia en o después de una fecha y hora específicas
Por ejemplo, la siguiente sentencia contiene un elemento de condición que utiliza el operador de condición "DateLessThan" con la clave "g:CurrentTime" para especificar que el solicitante puede crear buckets solo antes del 1 de agosto de 2022.
{ "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "obs:bucket:CreateBucket" ], "Condition": { "DateLessThan": { "g:CurrentTime": [ "2022-08-01T00:00:00Z" ] } } } ] }
- Operadores de condición Bool
Tabla 7 Operadores de condición Bool Tipo
Operador
Descripción
Bool
Bool
Las condiciones booleanas permiten construir elementos de condición que restringen el acceso basándose en la comparación de una clave con "true" o "false".
Por ejemplo, esta política basada en identidad utiliza el operador de condición Bool con la clave "g:MFAPresent" para permitir que solo los solicitantes con MFA habilitado puedan modificar las claves de acceso permanente especificadas.
{ "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "iam:credentials:updateCredential" ], "Condition": { "Bool": { "g:MFAPresent": [ "true" ] } } } ] }
- Operadores de condición Null
Tabla 8 Operadores de condición Null Tipo
Operador
Descripción
Null
Null
Utilice un operador de condición Null para comprobar si una clave de condición está ausente en el momento de la autorización. En la sentencia de política, use "true" (la clave no existe o es nula) o "false" (la clave existe y su valor no es nulo).
Por ejemplo, puede usar este operador de condición para especificar que solo se permiten las solicitudes de creación de buckets desde las VPC.
{ "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ " obs:bucket:CreateBucket" ], "Condition": { "Null": { "obs:SourceVpc": [ "false" ] } } } ] }
- Sufijo del operador IfExists
Puede agregar "IfExists" al final de cualquier nombre de operador de condición, excepto la "Null condition", por ejemplo, StringEqualsIfExists. Si la clave de política está presente en el contexto de la solicitud, procese la clave como se especifica en la política. Si la clave no está presente, evalúe el elemento de condición como true.
- Operadores de condición de string