--- title: "Permisos de Stratus" url: https://docs.catalyst.zoho.com/es/cloud-scale/help/stratus/stratus-permissions/ description: "Stratus es una solución robusta de almacenamiento en la nube impulsada por Catalyst. Puedes almacenar datos de cualquier tipo de formato en forma de buckets y objetos." last_updated: 2026-08-17T12:16:04Z service: Cloud Scale type: general related_links: - name: "Create a Bucket" url: /es/cloud-scale/help/stratus/buckets/create-bucket/ - name: "Java SDK" url: /es/sdk/java/v1/cloud-scale/stratus/overview/ - name: "Node.js SDK" url: /es/sdk/nodejs/v2/cloud-scale/stratus/overview/ - name: "Python SDK" url: /es/sdk/python/v1/cloud-scale/stratus/overview/ - name: "Web SDK" url: /es/sdk/web/v4/cloud-scale/stratus/overview/ - name: "iOS SDK" url: /es/sdk/ios/v2/cloud-scale/stratus/overview/ - name: "Android SDK" url: /es/sdk/android/v2/cloud-scale/stratus/overview/ - name: "Flutter SDK" url: /es/sdk/flutter/v2/cloud-scale/stratus/overview/ - name: "REST API" url: /es/api/code-reference/cloud-scale/stratus/get-all-buckets/#GetAllBuckets --- # Permisos de Stratus ### Plantilla de permisos predeterminada Puedes crear un bucket con uno de dos tipos de plantillas de permisos predeterminadas. ![catalyst_stratus_name_bucket](https://catalyst-docs-development.zohostratus.in/images/help/stratus/catalyst_stratus_name_bucket.webp) * **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. > **Nota:** * Ambas plantillas de permisos son tipos predeterminados que debes seleccionar al [crear tu bucket](https://docs.catalyst.zoho.com/es/cloud-scale/help/stratus/buckets/create-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](https://docs.catalyst.zoho.com/es/getting-started/set-up-a-catalyst-project/profiles-and-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. ![catalyst_stratus_permisions_updating](https://catalyst-docs-development.zohostratus.in/images/help/stratus/catalyst_stratus_permisions_updating.webp) Las plantillas de permisos predeterminadas que se cargarán según tu elección se muestran a continuación: #### Plantilla de permisos autenticados predeterminada **Authenticated Permission Template** ```json { "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 **Authenticated Permission Template** ```json { "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`
  • Esta es la clave JSON donde configuras tus permisos
  • Esta clave contendrá todas las reglas que definas para los objetos presentes en el bucket
`rule_id`
  • Es una cadena que contendrá el nombre de la regla que vas a definir.
  • Necesitas nombrar la regla de manera que puedas identificarla de forma única.
`effect`
  • Es una clave donde solo puedes ingresar uno de dos valores: **allow** o **deny**
  • Según el valor, la regla permitirá (*allow*) a un usuario o usuarios específicos realizar una acción, o denegará (*deny*) a un usuario o usuarios específicos realizar una acción.
  • Se debe esperar el siguiente comportamiento cuando recibes una solicitud de acceso que cumple condiciones presentes en más de una declaración de permisos configurada
    • Incluso si una sola declaración coincidente tiene el efecto como **deny**, entonces el `deny` anulará todas las declaraciones **allow**.
    • Para que un efecto **allow** tenga lugar, **al menos una** declaración con la condición coincidente debe tener su efecto como `allow` y ninguna de las declaraciones debe tener efecto como **deny**.
`allowed_actions`
  • Es una clave para definir las acciones que el usuario puede realizar sobre el objeto.
  • Las acciones permitidas son:
    • `GetObject`: Para obtener los datos del objeto
    • `PutObject`: Para crear, escribir y actualizar datos del objeto
    • `DeleteObject`: Para eliminar datos del objeto
`paths`
  • Esta clave definirá la ruta de ubicación de un objeto.
  • Proporcionarás este valor en formato estándar de ruta de archivo. El valor debe proporcionarse como un arreglo.
  • Para denotar **todos los objetos** presentes en un subdirectorio o un bucket, puedes usar el carácter especial asterisco '*'.
  • También puedes usar variables dinámicas; `X_ZUID` y `X_ORGID` para definir la ruta. Estas variables dinámicas contendrán el valor del **UserID** y el **OrgID** respectivamente. Por lo tanto, para usar estas variables dinámicas necesitas haber definido tus directorios y objetos con nombres reales de **UserID** y **OrgID**. Visita [esta sección](https://docs.catalyst.zoho.com/es/cloud-scale/help/stratus/stratus-permissions/#dynamic-variables) para aprender más sobre cómo definir la ruta de tu objeto usando variables dinámicas.
`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.
  • Contendrá otras dos claves JSON: `auth_type` y `zuid`.
  • Puedes definir el tipo de usuario usando la clave JSON `auth_type`
  • `auth_type` contendrá un valor predeterminado cuando crees el bucket usando una plantilla de permisos predeterminada
  • La clave JSON `auth_type` solo puede contener dos valores: "`public`" o "`authenticated`".
  • La clave JSON `zuid` se usará para determinar a qué usuarios se aplican las condiciones.
  • `zuid` puede contener el carácter especial asterisco "*" para indicar que todos los ZUIDs califican para la condición, o puede contener un arreglo de ZUIDs para especificar a qué usuarios exclusivamente se aplican las condiciones.
  • `org_details` es una clave JSON que aceptará un objeto JSON. El objeto JSON se definirá como un par clave-valor JSON, con la clave como `zaaid` y el valor como un arreglo de `valores zuid`.
> **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](https://docs.catalyst.zoho.com/es/serverless/help/appsail/introduction/). 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:
  • `string_equals`
  • `string_not_equals`
  • `string_equals_ignore_case`
  • `string_not_equals_ignore_case`
  • `string_like`
  • `string_not_like`
`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:
  • `string_equals`
  • `string_not_equals`
  • `string_equals_ignore_case`
  • `string_not_equals_ignore_case`
  • `string_like`
  • `string_not_like`
`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:
  • `ip_address`
  • `not_ip_address`
`version`
  • Indica la versión de la plantilla de permisos y contendrá el valor de la versión actual - `v1`.
  • Recomendamos encarecidamente que no cambies el valor de esta clave.
> **Nota:** Asegúrate de usar los **nombres exactos para las claves JSON** al definir tus permisos. ### 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. > **Nota:** Para que las variables dinámicas funcionen, necesitarás crear la ruta de tu objeto con `UserIDs` u `OrgIDs`, ya que las variables dinámicas solo contendrán esos valores. **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}/*"] > **Nota:** * `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` **Define path using the X_ZUID dynamic variable** ```json { "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 ] } ``` > **Nota:** * 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** **Custom Permission Example** ```json { "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** **Custom Permission Example** ```json { "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** **Custom Permission Example** ```json { "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** **Custom Permission Example** ```json { "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** **Custom Permission Example** ```json { "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](https://www.postman.com/)). - 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: 1. Selecciona el bucket requerido de la lista. ![catalyst_stratus_permissions_selectiomn_button](https://catalyst-docs-development.zohostratus.in/images/help/stratus/catalyst_stratus_permissions_selectiomn_button.webp) 2. Se te dirigirá a la pestaña *Bucket Permissions*. Haz clic en **Edit Permission**. ![catalyst_stratus_buckets_permissions_section_tab](https://catalyst-docs-development.zohostratus.in/images/help/stratus/catalyst_stratus_buckets_permissions_section_tab.webp) 3. Edita los permisos según tus requisitos, luego haz clic en **Update** para confirmar tus cambios. ![catalyst_stratus_permisions_updating](https://catalyst-docs-development.zohostratus.in/images/help/stratus/catalyst_stratus_permisions_updating.webp) Los permisos se aplicarán según tus configuraciones. > **Nota:** Consulta esta [documentación de ayuda](https://docs.catalyst.zoho.com/es/cloud-scale/help/stratus/stratus-permissions/#custom-permissions) para aprender más sobre permisos personalizados.