Policy

Una política de Gestión de Identidades y Accesos (IAM), que especifica los controles de acceso de los recursos de Google Cloud.

Un Policy es una colección de bindings. Un binding vincula uno o varios members (o principales) a un solo role. Las entidades principales pueden ser cuentas de usuario, cuentas de servicio, grupos de Google y dominios (como G Suite). Un role es una lista de permisos con nombre. Cada role puede ser un rol predefinido de gestión de identidades y accesos o un rol personalizado creado por el usuario.

En algunos tipos de recursos de Google Cloud, un binding también puede especificar un condition, que es una expresión lógica que permite acceder a un recurso solo si la expresión se evalúa como true. Una condición puede añadir restricciones basadas en los atributos de la solicitud, del recurso o de ambos. Para saber qué recursos admiten condiciones en sus políticas de gestión de identidades y accesos, consulta la documentación de IAM.

Ejemplo de JSON:

    {
      "bindings": [
        {
          "role": "roles/resourcemanager.organizationAdmin",
          "members": [
            "user:mike@example.com",
            "group:admins@example.com",
            "domain:google.com",
            "serviceAccount:my-project-id@appspot.gserviceaccount.com"
          ]
        },
        {
          "role": "roles/resourcemanager.organizationViewer",
          "members": [
            "user:eve@example.com"
          ],
          "condition": {
            "title": "expirable access",
            "description": "Does not grant access after Sep 2020",
            "expression": "request.time < timestamp('2020-10-01T00:00:00.000Z')",
          }
        }
      ],
      "etag": "BwWWja0YfJA=",
      "version": 3
    }

Ejemplo de YAML:

    bindings:
    - members:
      - user:mike@example.com
      - group:admins@example.com
      - domain:google.com
      - serviceAccount:my-project-id@appspot.gserviceaccount.com
      role: roles/resourcemanager.organizationAdmin
    - members:
      - user:eve@example.com
      role: roles/resourcemanager.organizationViewer
      condition:
        title: expirable access
        description: Does not grant access after Sep 2020
        expression: request.time < timestamp('2020-10-01T00:00:00.000Z')
    etag: BwWWja0YfJA=
    version: 3

Para obtener una descripción de IAM y sus funciones, consulta la documentación de IAM.

Representación JSON
{
  "version": integer,
  "bindings": [
    {
      object (Binding)
    }
  ],
  "auditConfigs": [
    {
      object (AuditConfig)
    }
  ],
  "etag": string
}
Campos
version

integer

Especifica el formato de la política.

Los valores válidos son 0, 1 y 3. Las solicitudes que especifican un valor no válido se rechazan.

Cualquier operación que afecte a las vinculaciones de roles condicionales debe especificar la versión 3. Este requisito se aplica a las siguientes operaciones:

  • Obtener una política que incluya una vinculación de rol condicional
  • Añadir una vinculación de roles condicional a una política
  • Cambiar una vinculación de rol condicional en una política
  • Quitar una vinculación de roles, con o sin condición, de una política que incluya condiciones

Importante: Si usas condiciones de IAM, debes incluir el campo etag cada vez que llames a setIamPolicy. Si omite este campo, IAM le permitirá sobrescribir una política de la versión 3 con una política de la versión 1, y se perderán todas las condiciones de la política de la versión 3.

Si una política no incluye ninguna condición, las operaciones de esa política pueden especificar cualquier versión válida o dejar el campo sin definir.

Para saber qué recursos admiten condiciones en sus políticas de gestión de identidades y accesos, consulta la documentación de IAM.

bindings[]

object (Binding)

Asocia una lista de members o principales con un role. Opcionalmente, puede especificar un condition que determine cómo y cuándo se aplican los bindings. Cada uno de los bindings debe contener al menos un principal.

El bindings de un Policy puede hacer referencia a un máximo de 1500 principales,de los cuales 250 pueden ser grupos de Google. Cada instancia de un principal se tiene en cuenta para calcular estos límites. Por ejemplo, si la concesión bindings asigna 50 roles diferentes a user:alice@example.com y a ningún otro principal, puedes añadir otros 1450 principales a bindings en Policy.

auditConfigs[]

object (AuditConfig)

Especifica la configuración del almacenamiento de registros de auditoría en la nube de esta política.

etag

string (bytes format)

etag se usa para el control de concurrencia optimista como una forma de evitar que las actualizaciones simultáneas de una política se sobrescriban entre sí. Se recomienda encarecidamente que los sistemas usen etag en el ciclo de lectura-modificación-escritura para llevar a cabo las actualizaciones de las políticas y evitar las condiciones de carrera. Se devuelve un etag en la respuesta a getIamPolicy, y se espera que los sistemas incluyan ese etag en la solicitud a setIamPolicy para asegurarse de que el cambio se aplique a la misma versión de la política.

Importante: Si usas condiciones de IAM, debes incluir el campo etag cada vez que llames a setIamPolicy. Si omite este campo, IAM le permitirá sobrescribir una política de la versión 3 con una política de la versión 1, y se perderán todas las condiciones de la política de la versión 3.

Cadena codificada en base64.

Vinculación

Asocia members (o principales) a un role.

Representación JSON
{
  "role": string,
  "members": [
    string
  ],
  "condition": {
    object (Expr)
  }
}
Campos
role

string

Rol asignado a la lista de members o principales. Por ejemplo, roles/viewer, roles/editor o roles/owner.

Para obtener una descripción general de los roles y permisos de gestión de identidades y accesos, consulta la documentación de gestión de identidades y accesos. Para ver una lista de los roles predefinidos disponibles, consulta este artículo.

members[]

string

Especifica las entidades que solicitan acceso a un recurso de Google Cloud. members puede tener los siguientes valores:

  • allUsers: identificador especial que representa a cualquier persona que esté en Internet, con o sin cuenta de Google.

  • allAuthenticatedUsers: un identificador especial que representa a cualquier persona autenticada con una cuenta de Google o una cuenta de servicio. No incluye identidades que procedan de proveedores de identidades externos a través de la federación de identidades.

  • user:{emailid}: una dirección de correo que representa una cuenta de Google específica. Por ejemplo, alice@example.com .

  • serviceAccount:{emailid}: una dirección de correo que representa una cuenta de servicio de Google. Por ejemplo, my-other-app@appspot.gserviceaccount.com.

  • serviceAccount:{projectid}.svc.id.goog[{namespace}/{kubernetes-sa}]: identificador de una cuenta de servicio de Kubernetes. Por ejemplo, my-project.svc.id.goog[my-namespace/my-kubernetes-sa].

  • group:{emailid}: una dirección de correo que representa un grupo de Google. Por ejemplo, admins@example.com.

  • domain:{domain}: el dominio de G Suite (principal) que representa a todos los usuarios de ese dominio. Por ejemplo, google.com o example.com.
  • principal://iam.googleapis.com/locations/global/workforcePools/{pool_id}/subject/{subject_attribute_value}: una sola identidad de un grupo de identidades de Workforce.

  • principalSet://iam.googleapis.com/locations/global/workforcePools/{pool_id}/group/{groupId}: Todas las identidades de Workforce de un grupo.

  • principalSet://iam.googleapis.com/locations/global/workforcePools/{pool_id}/attribute.{attribute_name}/{attribute_value}: Todas las identidades de los empleados que tengan un valor de atributo específico.

  • principalSet://iam.googleapis.com/locations/global/workforcePools/{pool_id}/*: Todas las identidades de un grupo de identidades de Workforce.

  • principal://iam.googleapis.com/projects/{projectNumber}/locations/global/workloadIdentityPools/{pool_id}/subject/{subject_attribute_value}: una sola identidad de un grupo de identidades de carga de trabajo.

  • principalSet://iam.googleapis.com/projects/{projectNumber}/locations/global/workloadIdentityPools/{pool_id}/group/{groupId}: un grupo de identidades de carga de trabajo.

  • principalSet://iam.googleapis.com/projects/{projectNumber}/locations/global/workloadIdentityPools/{pool_id}/attribute.{attribute_name}/{attribute_value}: Todas las identidades de un grupo de identidades de carga de trabajo con un atributo determinado.

  • principalSet://iam.googleapis.com/projects/{projectNumber}/locations/global/workloadIdentityPools/{pool_id}/*: todas las identidades de un grupo de identidades de carga de trabajo.

  • deleted:user:{emailid}?uid={uniqueid}: una dirección de correo electrónico (más un identificador único) que representa a un usuario que se ha eliminado recientemente. Por ejemplo, alice@example.com?uid=123456789012345678901. Si se recupera al usuario, este valor vuelve a ser user:{emailid} y el usuario recuperado conserva el rol en el enlace.

  • deleted:serviceAccount:{emailid}?uid={uniqueid}: una dirección de correo electrónico (más un identificador único) que representa una cuenta de servicio que se ha eliminado recientemente. Por ejemplo, my-other-app@appspot.gserviceaccount.com?uid=123456789012345678901. Si se restaura la cuenta de servicio, este valor vuelve a ser serviceAccount:{emailid} y la cuenta de servicio restaurada conserva el rol en el enlace.

  • deleted:group:{emailid}?uid={uniqueid}: una dirección de correo electrónico (más un identificador único) que representa un grupo de Google que se ha eliminado recientemente. Por ejemplo, admins@example.com?uid=123456789012345678901. Si se recupera el grupo, este valor vuelve a ser group:{emailid} y el grupo recuperado conserva el rol en la vinculación.

  • deleted:principal://iam.googleapis.com/locations/global/workforcePools/{pool_id}/subject/{subject_attribute_value}: se ha eliminado una sola identidad de un grupo de identidades de Workforce. Por ejemplo, deleted:principal://iam.googleapis.com/locations/global/workforcePools/my-pool-id/subject/my-subject-attribute-value.

condition

object (Expr)

La condición asociada a este enlace.

Si la condición da como resultado true, este enlace se aplica a la solicitud actual.

Si la condición se evalúa como false, este enlace no se aplica a la solicitud actual. Sin embargo, otra vinculación de rol podría conceder el mismo rol a uno o varios de los principales de esta vinculación.

Para saber qué recursos admiten condiciones en sus políticas de gestión de identidades y accesos, consulta la documentación de IAM.

Expr

Representa una expresión textual en la sintaxis del lenguaje de expresión común (CEL). CEL es un lenguaje de expresiones similar a C. La sintaxis y la semántica de CEL se documentan en https://github.com/google/cel-spec.

Ejemplo (comparación):

title: "Summary size limit"
description: "Determines if a summary is less than 100 chars"
expression: "document.summary.size() < 100"

Ejemplo (igualdad):

title: "Requestor is owner"
description: "Determines if requestor is the document owner"
expression: "document.owner == request.auth.claims.email"

Ejemplo (lógica):

title: "Public documents"
description: "Determine whether the document should be publicly visible"
expression: "document.type != 'private' && document.type != 'internal'"

Ejemplo (manipulación de datos):

title: "Notification string"
description: "Create a notification string with a timestamp."
expression: "'New message received at ' + string(document.create_time)"

Las variables y funciones exactas a las que se puede hacer referencia en una expresión las determina el servicio que la evalúa. Consulta la documentación del servicio para obtener más información.

Representación JSON
{
  "expression": string,
  "title": string,
  "description": string,
  "location": string
}
Campos
expression

string

Representación textual de una expresión en la sintaxis del lenguaje de expresión común.

title

string

Opcional. Título de la expresión, es decir, una cadena corta que describe su finalidad. Por ejemplo, se puede usar en interfaces de usuario que permitan introducir la expresión.

description

string

Opcional. Descripción de la expresión. Este es un texto más largo que describe la expresión, por ejemplo, cuando se coloca el cursor sobre ella en una interfaz de usuario.

location

string

Opcional. Cadena que indica la ubicación de la expresión para generar informes de errores. Por ejemplo, el nombre de un archivo y una posición en el archivo.

AuditConfig

Define la configuración de auditoría de un servicio. La configuración determina qué tipos de permiso se registran y qué identidades, si las hay, están exentas del almacenamiento de registro. Un mensaje AuditConfig debe disponer de un mensaje AuditLogConfigs o más de uno.

Si hay AuditConfigs tanto para allServices como para un servicio específico, se usará la unión de los dos AuditConfigs para ese servicio: se habilitarán los log_types especificados en cada AuditConfig y se eximirán los exemptedMembers de cada AuditLogConfig.

Ejemplo de política con varios mensajes AuditConfig:

{
  "auditConfigs": [
    {
      "service": "allServices",
      "auditLogConfigs": [
        {
          "logType": "DATA_READ",
          "exemptedMembers": [
            "user:jose@example.com"
          ]
        },
        {
          "logType": "DATA_WRITE"
        },
        {
          "logType": "ADMIN_READ"
        }
      ]
    },
    {
      "service": "sampleservice.googleapis.com",
      "auditLogConfigs": [
        {
          "logType": "DATA_READ"
        },
        {
          "logType": "DATA_WRITE",
          "exemptedMembers": [
            "user:aliya@example.com"
          ]
        }
      ]
    }
  ]
}

En el caso de sampleservice, esta política habilita el registro de DATA_READ, DATA_WRITE y ADMIN_READ. También exime a jose@example.com del registro DATA_READ y a aliya@example.com del registro DATA_WRITE.

Representación JSON
{
  "service": string,
  "auditLogConfigs": [
    {
      object (AuditLogConfig)
    }
  ]
}
Campos
service

string

Especifica un servicio que se habilitará para el almacenamiento de registro de auditoría. Por ejemplo, storage.googleapis.com, cloudsql.googleapis.com. allServices es un valor especial que abarca todos los servicios.

auditLogConfigs[]

object (AuditLogConfig)

Configuración para el almacenamiento de registro de cada tipo de permiso.

AuditLogConfig

Proporciona la configuración para almacenar los registros de un tipo de permisos. Ejemplo:

{
  "auditLogConfigs": [
    {
      "logType": "DATA_READ",
      "exemptedMembers": [
        "user:jose@example.com"
      ]
    },
    {
      "logType": "DATA_WRITE"
    }
  ]
}

De esta forma, se habilita el registro de "DATA_READ" y "DATA_WRITE", mientras que jose@example.com queda exento del registro de DATA_READ.

Representación JSON
{
  "logType": enum (LogType),
  "exemptedMembers": [
    string
  ]
}
Campos
logType

enum (LogType)

Tipo de almacenamiento de registro que habilita esta configuración.

exemptedMembers[]

string

Especifica las identidades eximidas del registro para este tipo de permiso. Sigue el mismo formato que Binding.members.

LogType

Lista de tipos de permisos válidos para los que se puede configurar el almacenamiento de registros. Las escrituras del administrador siempre se registran y no se pueden configurar.

Enumeraciones
LOG_TYPE_UNSPECIFIED Situación predeterminada. Nunca debería figurar así.
ADMIN_READ Lecturas del administrador. Ejemplo: CloudIAM getIamPolicy
DATA_WRITE Escrituras de datos. Ejemplo: creaciones de los usuarios de CloudSQL
DATA_READ Datos leídos. Ejemplo: lista de usuarios de CloudSQL