Permisos de Stratus
Plantilla de permisos predeterminada
Puedes crear un bucket con uno de dos tipos de plantillas de permisos predeterminadas.
-
Plantilla de permisos autenticados: Un bucket creado con esta plantilla de permisos predeterminada establecerá que todos los objetos de tu bucket solo pueden ser accedidos por usuarios autenticados en el portal de Client de tu aplicación.
-
Plantilla de permisos públicos: Un bucket creado con esta plantilla de permisos predeterminada permitirá que cualquier usuario final en internet acceda a los objetos de tu bucket sin ningún requisito de autorización.
-
Ambas plantillas de permisos son tipos predeterminados que debes seleccionar al crear tu bucket. Estas plantillas son editables, y también puedes editar los permisos de objetos individuales almacenados en tu bucket.
-
Los permisos configurados solo son aplicables a los usuarios del proyecto, no a los colaboradores.
-
Estos permisos están destinados a definir el nivel de acceso de los usuarios finales, no de los colaboradores o administradores. Puedes definir el nivel de acceso de los colaboradores en la sección Profiles & Permissions.
-
Independientemente de la plantilla de permisos que hayas elegido, las acciones de carga en el bucket solo pueden ser realizadas por usuarios autenticados.
Permisos personalizados
Cuando creas un bucket, es obligatorio elegir una plantilla de permisos predeterminada: Authenticated o Public. Según tu elección, se cargará una plantilla de permisos predeterminada y se creará tu bucket. Además de esto, independientemente de la plantilla de permisos que hayas elegido, puedes definir los permisos de cada objeto individual o subdirectorio completo usando código JSON simple.
Las plantillas de permisos predeterminadas que se cargarán según tu elección se muestran a continuación:
Plantilla de permisos autenticados predeterminada
{
"rules": [
{
"rule_id": "AuthenticatedBucket_Rule1",
"condition": {
"user": {
"auth_type": "authenticated",
"zuid": "*"
}
},
"allowed_actions": [
"GetObject"
],
"paths": [
"vendorstats::/*"
],
"effect": "allow"
}
],
"version": "v1"
}
Plantilla de permisos públicos predeterminada
{
"rules": [
{
"rule_id": "PublicBucket",
"condition": {
"user": {
"auth_type": "public"
}
},
"actions": [
"GetObject"
],
"paths": [
"zylker-bucket-pubs::/*"
],
"effect": "allow"
}
],
"version": "v1"
}
Para editar eficazmente ambas plantillas de permisos y emplear permisos personalizados, necesitas familiarizarte con las siguientes claves JSON y su propósito:
| Nombre de la clave JSON | Propósito |
|---|---|
| rules |
|
| rule_id |
|
| effect |
|
| allowed_actions |
|
| paths |
|
| condition | Esta clave JSON definirá las condiciones bajo las cuales deben ocurrir las acciones. |
| user |
Esta clave JSON se usará en la clave condition para especificar a qué usuario, o conjunto de usuarios, se aplica la condición que se está definiendo.
Nota: Puedes determinar el acceso basado en IDs de usuario usando el par clave-valor JSON valores zuid o el JSON org_details. No puedes usar ambos para definir el acceso de usuarios.
|
| Operadores | Son claves JSON que te ayudarán a definir casos para que las condiciones se apliquen o no. |
| string_equals | Define acciones que deben ocurrir si los valores de cadena son iguales. |
| string_not_equals | Define acciones que deben ocurrir si el valor de cadena no coincide. |
| string_equals_ignore_case | Define acciones donde el valor de cadena puede coincidir independientemente de las mayúsculas/minúsculas utilizadas. |
| string_not_equals_ignore_case | Define acciones que deben ocurrir si los valores de cadena no coinciden independientemente de las mayúsculas/minúsculas utilizadas. |
| string_like | Si parte del valor de cadena coincide con la clave que proporcionas, entonces se pueden realizar acciones sobre el objeto. |
| string_not_like | Si parte del valor de cadena no coincide con la clave que proporcionas, entonces se pueden realizar acciones sobre el objeto. |
| ip_address | Define una acción si la fuente de la solicitud proviene de una IP o IPs particulares que estás permitiendo. |
| not_ip_address | Define acciones que deben ocurrir si la fuente de la solicitud proviene de una IP o IPs que estás bloqueando específicamente. |
| Claves de condición | |
| referrer | Esta clave JSON contendrá el valor de la URL completa donde se solicitó la acción. El valor debe proporcionarse como un arreglo. Por ejemplo, supongamos que has creado un microservicio y lo has alojado en Catalyst AppSail. El valor de referrer será la URL completa de este microservicio, y el permiso se definirá para las acciones relacionadas exclusivamente con este microservicio. Esta clave se usará con los siguientes operadores:
|
| user_agent | Esta clave JSON contendrá el valor de la fuente desde la cual se realizó la solicitud. El valor debe proporcionarse como un arreglo. Ya sea que la fuente de la solicitud sea una API, un navegador, u otro. Esta clave se usará con los siguientes operadores:
|
| source_ip | Esta clave JSON contendrá el valor de solo direcciones IP listadas públicamente. El valor debe proporcionarse como un arreglo. Te ayudará a definir un permiso que permita o deniegue acciones desde una IP particular. Esta clave se usará con los siguientes operadores:
|
| version |
|
Variables dinámicas
Puedes usar variables dinámicas para definir la ruta del objeto al configurar permisos. Durante la ejecución, estas variables contendrán valores relevantes que definen la ruta del objeto. En Stratus, puedes usar las siguientes variables dinámicas para definir tu ruta:
- X_ZUID: Contendrá los UserIDs reales durante la ejecución.
- X_ORGID: Contendrá los OrgIDs reales durante la ejecución.
Sintaxis para crear variables dinámicas
Debes emplear la sintaxis que se muestra a continuación para usar variables dinámicas:
“paths”: [“bucket_name::/${var:X_ZUID}/*”]
“paths”: [“bucket_name::/${var:X_ORGID}/*”]
-
paths: Contendrá el valor de la ruta del objeto
-
bucket_name: Contendrá el valor del nombre del bucket
Sintaxis para usar variables dinámicas
Veamos el siguiente ejemplo, donde definimos la ruta del objeto usando la variable dinámica X_ZUID
{
"version": "v1",
"rules": [
{
"rule_id": "Example rule to allow user to access the path which has their ZUID in the path",
"condition": {
"user": {
"auth_type": "authenticated",
"zuid": "*"
}
}
}
],
"effect": "allow",
"allowed_actions": [
"GetObject"
],
"paths": [
"bucketName::/${var:X_ZUID}" //Usa la variable X_ORGID para definir la ruta usando OrgIDs
]
}
- Es mejor usar variables dinámicas en buckets donde la plantilla de permisos esté configurada como Authenticated en su totalidad.
Ejemplos que ilustran permisos personalizados
Ahora, revisemos algunos ejemplos de plantillas de permisos personalizados que se pueden crear para definir permisos para un objeto u objetos en un bucket.
Ejemplo 1
{
"version" : "v1",
"rules" : [
{
"rule_id" : "Example rule where all authenticated ZUID users can perform all actions on a particular object",
"effect" : "allow",
"allowed_actions" : ["GetObject", "PutObject", "DeleteObject"],
"paths" : ["bucketName::/user/*", "bucketName::/document/readme.md"],
"condition" : [
"user" : {
"auth_type" : "authenticated",
"zuid" : "*"
}
]
}
]
}
Del fragmento anterior, podemos entender que:
-
El permiso está configurado para un bucket con plantilla de permisos autenticados
-
Los permisos se definen para permitir a los usuarios realizar las operaciones GetObject, PutObject y DeleteObject.
-
Este permiso solo es aplicable para todos los objetos presentes en la ruta user/ y es aplicable solo para el objeto readme.md presente en la ruta document/ del bucket.
-
El permiso es relevante para todos los ZUID presentes.
En conjunto, podemos entender que el permiso anterior está definido para que todos los usuarios autenticados realicen todas las acciones sobre el objeto readme.md presente en la ruta document/, y sobre todos los objetos presentes en la ruta user/.
Ejemplo 2
{
"version" : "v1",
"rule" : [
{
"rule_id" : "Example rule to allow user to access the path which has their ZUID in the path",
"effect" : "allow",
"allowed_actions" : ["GetObject"],
"paths" : ["bucketName::/${var:X_Zuid}"],
}
]
}
Del fragmento anterior, podemos entender que:
-
El nombre de la ruta del objeto se define en función del ZUID, cuyo valor se obtendrá dinámicamente durante la ejecución.
-
Los objetos particulares en la ruta tendrán permitido realizar la acción GetObject sobre el objeto.
En conjunto, podemos entender que el permiso anterior está definido de manera que una acción GetObject se realizará sobre el objeto cuyo nombre debe coincidir con el valor de ZUID que se obtendrá dinámicamente.
Ejemplo 3
{
"version" : "v1",
"rule" : [
{
"rule_id" : "Example rule to deny specific users from accessing all the objects present in a particular path",
"effect" : "deny",
"allowed_actions" : ["GetObject", "PutObject", "DeleteObject"],
"paths" : ["bucketName::/denyPath/*"],
"condition" : {
"user" : {
"auth_type" : "authenticated",
"zuid" : ["123", "456", "789"]
}
}
}
]
}
Del fragmento anterior, podemos entender que:
-
El permiso se aplica a usuarios autenticados particulares cuyos ZUIDs están listados como un arreglo.
-
Los usuarios particulares no pueden realizar las acciones GetObject, PutObject ni DeleteObject sobre todos los objetos presentes en el bucket.
En conjunto, podemos entender que el permiso anterior está definido para usuarios autenticados con los ZUIDs mencionados. Los usuarios mencionados no tienen permitido realizar ninguna acción sobre todos los objetos presentes en la ruta particular.
Ejemplo 4
{
"version" : "v1",
"rule" : [
{
"rule_id" : "Example rule employing specific action for specific public paths in the bucket",
"effect" : "allow",
"allowed_actions" : ["GetObject"],
"paths" : ["bucketName::/publicPath/*", "bucketName::/otherPath/otherPublicPath/*"],
"condition" : {
"user" : {
"auth_type" : "public",
}
}
},
{
"rule_id" : "Example rule where specifc actions can be performed on objects present in specific authenticated path, and these actions can be performed by all authenticated users",
"effect" : "allow",
"allowed_actions" : ["GetObject", "PutObject", "DeleteObject"],
"paths" : ["bucketName::/authenticatedUser/*", "bucketPath::/otherProtectedPath/*"],
"condition" : {
"user" : {
"auth_type" : "authenticated",
"zuid" : "*"
}
}
}
]
}
Del fragmento anterior, podemos entender que:
-
Se están definiendo dos reglas para este bucket. Rutas específicas en el bucket se listan como públicas, y rutas específicas en el bucket solo pueden ser accedidas por usuarios autenticados.
-
GetObject es la única acción que se puede realizar sobre objetos que caen bajo la ruta pública. Sin embargo, para los objetos que están en la ruta autenticada y que solo pueden ser accedidos por usuarios autenticados, las acciones que se permiten realizar en la ruta autenticada son GetObject, PutObject y DeleteObject.
En conjunto, podemos comprender que el permiso anterior está definido por dos reglas. La primera regla define un permiso para una ruta donde todos los objetos presentes en ella pueden ser accedidos por cualquiera ya que es pública. GetObject es la única acción que se puede realizar sobre los objetos en la ruta pública.
En la segunda regla, todos los usuarios autenticados pueden realizar las acciones GetObject, PutObject y DeleteObject sobre todos los objetos listados en la ruta autenticada.
Ejemplo 5
{
"version" : "v1",
"rules" : [
{
"rule_id" : "RuleNumber1",
"effect" : "allow",
"allowed_actions" : ["GetObject", "PutObject"],
"paths" : ["bucketname::/protectedpath/*"],
"condition" : {
"user" : {
"auth_type" : "authenticated",
"zuid" : "*"
},
"string_equal" : {
"user_agent" : ["Mozilla/5.0"],
"referrer" : ["https://www.example.com", "https://www.example.com/get_user/"]
},
"ip_address" : {
"source_ip" : ["121.67.8.1"]
}
}
},
{
"rule_id" : "RuleNumber2",
"effect" : "deny",
"allowed_actions" : ["GetObject"],
"paths" : ["bucketname::/denypath/*"],
"condition" : {
"user" : {
"auth_type" : "authenticated"
},
"string_like" : {
"user_agent" : ["PostmanRuntime/7.39.0"]
}
}
},
{
"rule_id" : "RuleNumber3",
"effect" : "allow",
"allowed_actions" : ["PutObject"],
"paths" : ["bucketname::/uploadhere/*"],
"condition" : {
"user" : {
"auth_type" : "authenticated",
"org_details" : {
"zaaid" : ["12096000001275047", "12096000001278879"] }
},
"not_ip_address" : {
"source_ip" : ["122.23.44.19"]
}
}
}
]
}
Del fragmento anterior, podemos entender que se han definido tres reglas: RuleNumber1, RuleNumber2 y RuleNumber3.
-
RuleNumber1
- El acceso a objetos solo es posible si las direcciones IP del sistema que intenta acceder coinciden con los valores listados en source_ip en el JSON ip_address.
- El acceso a objetos solo es posible por usuarios cuyo zaaid (IDs de usuario) coincida con los listados en el JSON org_details.
- El acceso a objetos solo es posible si el intento de acceso se realiza desde un navegador Mozilla desde la web, y solo si la solicitud de acceso se origina desde los referrers mencionados.
- La regla está definida para todos los usuarios autenticados.
- Si la solicitud de acceso cumple todas las condiciones mencionadas anteriormente, entonces solo se permiten las acciones GetObject y PutObject en la ruta definida.
-
RuleNumber2
- La regla está definida para un usuario autenticado que intenta una solicitud de acceso con user_agent como Postman (la solicitud se realizó usando la plataforma API de Postman).
- En la ruta definida, se le denegará a dicho usuario el acceso para realizar la operación GetObject.
-
RuleNumber3
- La regla está definida de manera que es aplicable si la solicitud se realizó desde cualquier dirección IP excepto la mencionada en source_ip en el JSON not_ip_address.
- La regla es aplicable solo para usuarios autenticados y específicamente para los usuarios cuyos zaaid están definidos en el JSON org_details.
- Si el usuario intenta una solicitud de acceso que cumple todas las condiciones mencionadas anteriormente, entonces se le permite realizar un PutObject en la ruta definida.
Configurar permisos personalizados para objetos almacenados en un bucket
Para establecer permisos personalizados:
-
Se te dirigirá a la pestaña Bucket Permissions. Haz clic en Edit Permission.

-
Edita los permisos según tus requisitos, luego haz clic en Update para confirmar tus cambios.

Los permisos se aplicarán según tus configuraciones.
Última actualización 2026-03-20 21:51:56 +0530 IST
Yes
No
Send your feedback to us

