Aviso:

Para brindarle información de soporte completa de manera más rápida, el contenido de esta página ha sido traducido al español mediante traducción automática. Para consultar la información de soporte más precisa, consulte la versión en inglés de este contenido.

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

  • 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. 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.

catalyst_stratus_permisions_updating

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
copy
{
    "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
copy
{
    "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 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. 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
copy
{
    "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
copy
{
 "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
copy
{
 "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
copy
{
 "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
copy
{
 "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
copy
{
    "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:

  1. Selecciona el bucket requerido de la lista. catalyst_stratus_permissions_selectiomn_button

  2. Se te dirigirá a la pestaña Bucket Permissions. Haz clic en Edit Permission. catalyst_stratus_buckets_permissions_section_tab

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

Los permisos se aplicarán según tus configuraciones.

Nota: Consulta esta documentación de ayuda para aprender más sobre permisos personalizados.

Última actualización 2026-03-20 21:51:56 +0530 IST