Control del acceso a objetos individuales en un grupo

Esta guía de aprendizaje proporciona ejemplos sobre cómo utilizar las políticas de acceso de IAM con grupos IBM Cloud® Object Storage para otorgar a los usuarios acceso a objetos individuales dentro de un grupo.

Antes de empezar

IBM Cloud Object Storage almacena datos en una estructura plana donde un grupo puede contener miles de millones de objetos con nombres distintos. Una jerarquía de carpetas se puede simular utilizando prefijos idénticos en nombres de objeto relacionados. Además, se puede hacer referencia a un nombre de objeto como una clave de objeto. A continuación se muestra un ejemplo:

Bucket Name: MyBucket
Objects in MyBucket:

User1/userDoc1.txt
User1/userDoc2.zip
Engineering/project1.git
Engineering/project2.git
Product/2023/roadmap1.ppt
Product/2024/roadmap2.ppt
Orgchart.pdf

En este ejemplo, el prefijo User1, Engineeringy Product puede parecerse a las carpetas de nivel raíz. Además, 2023 y 2024 pueden representar subdirectorios. Utilice el delimitador "/" para representar la jerarquía de archivos. Un delimitador puede ser cualquier carácter soportado. Orgchart.pdf se considera un objeto de nivel raíz.

Al ejecutar una solicitud de lista en el grupo, puede especificar un prefijo para listar objetos o listar el contenido de todo el grupo. Además, opcionalmente puede pasar un valor de delimitador en la solicitud de listado para simular una estructura de carpetas en la respuesta. Para obtener más información, consulte los ejemplos de utilización de sentencias de condición prefix and delimiter.

Las operaciones de lectura o escritura suelen dirigirse a un nombre de objeto específico al que también se hace referencia como vía de acceso del objeto.

Escenarios

Los ejemplos siguientes muestran cómo utilizar políticas y condiciones de IAM para otorgar acceso a objetos individuales en un grupo. Continuaremos utilizando el grupo de ejemplo que se muestra anteriormente. Estos ejemplos muestran extractos de la política de acceso completo con respecto a la configuración de las sentencias de condición. Para obtener más información, consulte Asignación de acceso a objetos dentro de un grupo utilizando condiciones de acceso de IAM.

Escenario 1: Otorgar a Adam acceso de lectura a todos los objetos de la carpeta User1 únicamente.

Esto le dará a Adam la posibilidad de leer todos los objetos que empiezan con el nombre clave de User1/. Esto no dará a Adam la posibilidad de listar objetos y, por lo tanto, no puede navegar por la interfaz de usuario para acceder a estos objetos. Adam sólo puede recuperar objetos en la carpeta User1 mediante métodos que no sean de la interfaz de usuario. Utilice un comodín en la política para dar acceso a todos los objetos posibles que empiezan por User1/. Si no se incluye un comodín, Adam sólo tendrá acceso al objeto denominado User1/.

"control": {
    "grant": {
      "roles": [
         { "role_id":
             "crn:v1:bluemix:public:cloud-object-storage::::serviceRole:ObjectReader"
         }
       ]
     }
   },
   "rule": {
     "conditions": [
       {
         "key": "{{resource.attributes.path}}",
         "operator": "stringMatch",
         "value": "User1/*"
       }
     ]
   },
   "pattern": "attribute-based-condition:resource:literal-and-wildcard"

Escenario 2: Otorgar a la lista Adam y acceso de lectura a todos los objetos de la carpeta User1 .

Esto le dará a Adam la posibilidad de leer y listar todos los objetos que empiezan con el nombre de clave de User1/. Además, utilice un comodín en el atributo de condición prefix . Si no se incluyen los resultados comodín, Adam sólo tendrá acceso de lista al primer nivel de objetos o carpetas de la carpeta User1 . Esta política no permitirá a Adam listar el grupo en el nivel raíz. Si Adam utiliza la interfaz de usuario, debe buscar el grupo con el prefijo específico de User1/ para ver los objetos para los que tiene acceso.

"control": {
    "grant": {
      "roles": [
        {
          "role_id":
          "crn:v1:bluemix:public:cloud-object-storage::::serviceRole:ContentReader"
        }
      ]
    }
  },
  "rule": {
    "operator": "or",
    "conditions": [
      {
        "operator": "and",
        "conditions": [
          {
            "key": "{{resource.attributes.prefix}}",
            "operator": "stringMatch",
            "value": "User1/*"
          },
          {
            "key": "{{resource.attributes.delimiter}}",
            "operator": "stringEquals",
            "value": "/"
          }
        ]
      },
      {
        "key": "{{resource.attributes.path}}",
        "operator": "stringMatch",
        "value": "User1/*"
      }
    ]
  },
  "pattern": "attribute-based-condition:resource:literal-and-wildcard

Escenario 3: otorgar a Samantha acceso para listar, leer y replicar archivos sólo en los subdirectorios 2023 y 2024 bajo la carpeta Product .

Estos conjuntos de acciones requerirán que Samantha tenga al menos el rol Writer . El rol Writer también contiene algunas acciones que no especifican un Path o un Prefix o Delimiter como, por ejemplo, cloud-object-storage.bucket.put_replication. Para permitir estas acciones, utilice el operador StringExists con las condiciones basadas en atributos de recurso.

Samantha no tendrá acceso para navegar por la interfaz de usuario desde la carpeta raíz. Esta situación se muestra en el Escenario 4.

"control": {
    "grant": {
      "roles": [
        {
          "role_id": "crn:v1:bluemix:public:iam::::serviceRole:Writer"
        }
      ]
    }
  },
  "rule": {
    "operator": "or",
    "conditions": [
      {
        "operator": "and",
        "conditions": [
          {
            "key": "{{resource.attributes.prefix}}",
            "operator": "stringMatchAnyOf",
            "value": [
              "Product/2023/*",
              "Product/2024/*"
            ]
          },
          {
            "key": "{{resource.attributes.delimiter}}",
            "operator": "stringEquals",
            "value": "/"
          }
        ]
         },
         {
            "key": "{{resource.attributes.path}}",
            "operator": "stringMatchAnyOf",
            "value": [
              "Product/2023/*",
              "Product/2024/*"
        ]
    },
    {
      "operator": "and",
      "conditions": [
        {
          "key": "{{resource.attributes.delimiter}}",
          "operator": "stringExists",
          "value": false
        },
        {
          "key": "{{resource.attributes.prefix}}",
          "operator": "stringExists",
          "value": false
        },
        {
          "key": "{{resource.attributes.path}}",
          "operator": "stringExists",
          "value": false
        }
      ]
    }
  ]
},
"pattern": "attribute-based-condition:resource:literal-and-wildcard"

Escenario 4: Otorgar acceso a Samantha para navegar por la interfaz de usuario a los archivos de las carpetas 2023 y 2024 además de listar, leer y replicar archivos en 2023 y 2024.

Para navegar por la interfaz de usuario a MyBucket, Samantha necesita el rol de plataforma Viewer. Además, a Samantha se le da acceso a cualquier directorio por encima de la carpeta de destino. En este caso, Samantha necesita acceso para listar el nivel raíz (definido por el prefijo de la serie vacía) y la carpeta Product/ . Esto permite a Samantha ver todas las carpetas y objetos de nivel raíz.

"control": {
    "grant": {
      "roles": [
        {
          "role_id": "crn:v1:bluemix:public:iam::::serviceRole:Writer"
        },
        {
          "role_id": "crn:v1:bluemix:public:iam::::role:Viewer"
        }
      ]
    }
  },
  "rule": {
    "operator": "or",
    "conditions": [
      {
        "operator": "and",
        "conditions": [
          {
            "key": "{{resource.attributes.prefix}}",
            "operator": "stringMatchAnyOf",
            "value": [
              "Product/2023/*",
              "Product/2024/*"
          ]
        },
        {
          "key": "{{resource.attributes.delimiter}}",
          "operator": "stringEquals",
          "value": "/"
          }
        ]
      },
      {
        "operator": "and",
        "conditions": [
          {
            "key": "{{resource.attributes.prefix}}",
            "operator": "stringEqualsAnyOf",
            "value": [
              "",
              "Product/"
            ]
          },
          {
            "key": "{{resource.attributes.delimiter}}",
            "operator": "stringEquals",
            "value": "/"
          }
        ]
      },
      {
        "key": "{{resource.attributes.path}}",
        "operator": "stringMatchAnyOf",
        "value": [
          "Product/2023/*",
          "Product/2024/*"
        ]
      },
      {
        "operator": "and",
        "conditions": [
          {
            "key": "{{resource.attributes.delimiter}}",
            "operator": "stringExists",
            "value": false
          },
          {
            "key": "{{resource.attributes.prefix}}",
            "operator": "stringExists",
            "value": false
          },
          {
            "key": "{{resource.attributes.path}}",
            "operator": "stringExists",
            "value": false
          }
        ]
      }
    ]
  },
  "pattern": "attribute-based-condition:resource:literal-and-wildcard"