Realizar cambios masivos en los niveles de acceso

Mediante Access Context Manager, puedes realizar actualizaciones en forma masiva en los recursos que pertenecen a la política de acceso de tu organización, como los niveles de acceso y los perímetros de servicio.

Los cambios en tus recursos se aplican solo si todas las partes de la operación masiva se realizan de forma correcta. Por ejemplo, si tu operación de forma masiva intenta quitar un nivel de acceso que usa un perímetro de servicio, se genera un error. Debido a que se encuentra un error, toda la operación falla y no se actualizan los recursos.

En este tema, solo se describe el reemplazo masivo de niveles de acceso. Para obtener más información sobre el reemplazo masivo de perímetros de servicio, consulta la documentación de Controles del servicio de VPC.

Antes de comenzar

Debido a que las operaciones masivas afectan a todos los niveles de acceso de tu organización, te recomendamos obtener una lista completa de tus niveles de acceso. La lista puede tener el formato YAML, lo que puede facilitar los cambios masivos en tus niveles de acceso.

Para obtener una lista con formato de los niveles de acceso, consulta Enumera los niveles de acceso (con formato).

Reemplazo masivo de los niveles de acceso

En la siguiente sección, se detalla cómo reemplazar de forma masiva tus niveles de acceso.

gcloud

Para reemplazar de forma masiva todos los niveles de acceso, usa el comando replace-all.

gcloud access-context-manager levels replace-all \
  --source-file=FILE \
  --etag=ETAG \
  [--policy=POLICY_NAME]

Donde:

  • FILE es el nombre de un archivo .yaml que define las nuevas condiciones para tus niveles de acceso existentes.

    Por ejemplo:

    - name: accessPolicies/11271009391/accessLevels/corpnet_access
      title: Corpnet Access
      description: Permit access to corpnet.
      basic:
        combiningFunction: AND
        conditions:
          - ipSubnetworks:
            - 252.0.2.0/24
            - 2001:db8::/32
    - name: accessPolicies/11271009391/accessLevels/prodnet_access
      title: Prodnet Access
      description: Permit access to prodnet.
      basic:
        combiningFunction: OR
        conditions:
          - members:
            - user:exampleuser@example.com
            - serviceAccount:exampleaccount@example.iam.gserviceaccount.com
          - ipSubnetworks:
            - 176.0.2.0/24
    

    Para obtener más ejemplos de la estructura YAML de las condiciones, consulta el ejemplo de archivo YAML.

  • ETAG es una string que representa la versión de destino de la política de acceso de tu organización (opcional). Si no incluyes una ETag, la operación masiva apunta a la última versión de la política de acceso de tu organización.

    Para obtener la última ETag de la política de acceso, list tus políticas de acceso.

  • POLICY_NAME es el nombre de la política de acceso de tu organización. Este valor solo es necesario si no estableciste una política de acceso predeterminada.

API

Para reemplazar de forma masiva todos los niveles de acceso, llama a accessLevels.replaceAll.

POST https://accesscontextmanager.googleapis.com/v1/accessPolicies/POLICY_NAME/accessLevels.replaceAll?alt=json

Donde:

  • POLICY_NAME es el nombre de la política de acceso de tu organización.

Cuerpo de la solicitud

El cuerpo de la solicitud debe incluir una lista de objetos AccessLevel que especifiquen los cambios que deseas realizar.

De manera opcional, puedes incluir una ETag para que apunte a una versión específica de la política de acceso de tu organización. Si no incluyes una ETag, la operación masiva apunta a la última versión de la política de acceso de tu organización.

Por ejemplo:

{
  "accessLevels": [
    object (AccessLevel),
    object (AccessLevel),
    ...
  ]
  "etag": string
}

Cuerpo de la respuesta

Si se realiza de forma correcta, el cuerpo de la respuesta de la llamada contendrá un recurso Operation que proporciona detalles sobre lo posterior a la operación.

Respuesta de ejemplo:

{
  "name": "operations/accessPolicies/11271009391/replaceLevels/1583523446234255",
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.identity.accesscontextmanager.v1.ReplaceAccessLevelsResponse",
    "accessLevels": [
      {
        "name": "accessPolicies/11271009391/accessLevels/corpnet_access",
        "title": "Corpnet access",
        "description": "Permit access to corpnet.",
        "basic": {
          "conditions": [
            {
              "ipSubnetworks": [
                "252.0.2.0/24"
              ]
            }
          ]
        }
      },
      {
        "name": "accessPolicies/11271009391/accessLevels/prodnet_access",
        "title": "Prodnet access",
        "description": "Permit access to prodnet.",
        "basic": {
          "conditions": [
            {
              "ipSubnetworks": [
                "176.0.2.0/24"
              ]
            }
          ]
        }
      }
    ]
  }
}