Usar el control de acceso basado en roles

En esta página se describe cómo empezar a usar el control de acceso basado en roles (RBAC) en instancias de Cloud Data Fusion. El control de acceso basado en roles está disponible en las instancias de Cloud Data Fusion que ejecutan las versiones 6.5 y posteriores.

Para obtener más información, consulta la descripción general del control de acceso basado en roles (RBAC).

Recomendación: A menos que sea necesario para fines de automatización, usa la Google Cloud consola para realizar las tareas de control de acceso basado en roles.

Habilitar RBAC en una instancia

Puedes habilitar el control de acceso basado en roles en una instancia de Cloud Data Fusion que ejecute la versión 6.5 o una posterior.

Consola

Para habilitar el control de acceso basado en roles en una instancia de Cloud Data Fusion:

  1. Ve a los detalles de la instancia:
    1. En la Google Cloud consola, ve a la página de Cloud Data Fusion.

    2. Haz clic en Instancias y, a continuación, en el nombre de la instancia para ir a la página Detalles de la instancia.

      Ir a Instancias

  2. Asegúrate de que la instancia se haya actualizado a la versión 6.5 o una posterior. Si la instancia es anterior a la versión 6.5, actualízala a la versión 6.5 o posterior.
  3. Haga clic en Habilitar RBAC.
  4. Haz clic en Guardar.
  5. Espera a que se complete la operación de actualización de la instancia.

gcloud

Para habilitar el control de acceso basado en roles en una instancia de Cloud Data Fusion, ejecuta el siguiente comando:

gcloud beta data-fusion instances update --enable_rbac --location=REGION INSTANCE_ID

API REST

Habilita el control de acceso basado en roles en una instancia con la API patch de Cloud Data Fusion. Defina la marca enableRbac como true y use el parámetro de consulta updateMask con el siguiente comando de ejemplo:

export PROJECT=PROJECT_ID
export LOCATION=REGION
export INSTANCE=INSTANCE_ID
export DATA_FUSION_API_NAME=datafusion.googleapis.com
alias gcurl='curl --header "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json"'
gcurl https://$DATA_FUSION_API_NAME/v1beta1/projects/$PROJECT/locations/$LOCATION/instances/$INSTANCE?updateMask=enable_rbac -X PATCH -d '{"enable_rbac": "true"}'

Inhabilitar el control de acceso basado en roles en una instancia

Si tienes una instancia con RBAC habilitado, puedes inhabilitarlo si es necesario. Si inhabilitas el control de acceso basado en roles, no se verán afectados los pipelines ni las configuraciones de la instancia. Solo inhabilita el aislamiento de seguridad entre espacios de nombres.

Consola

Para inhabilitar el control de acceso basado en roles en una instancia de Cloud Data Fusion:

  1. Ve a los detalles de la instancia:

    1. En la Google Cloud consola, ve a la página de Cloud Data Fusion.

    2. Haz clic en Instancias y, a continuación, en el nombre de la instancia para ir a la página Detalles de la instancia.

      Ir a Instancias

  2. Haz clic en Inhabilitar control de acceso basado en roles.

  3. Haz clic en Guardar.

  4. Espera a que se complete la operación de actualización de la instancia.

gcloud

Para inhabilitar RBAC en una instancia, usa el argumento --no-enable_rbac en lugar de --enable-rbac.

gcloud beta data-fusion instances update --no-enable_rbac --location=REGION INSTANCE_ID

Ejemplo de uso:

gcloud beta data-fusion instances update --no-enable_rbac --location=us-east1 cdf-test-instance

API REST

Inhabilita RBAC en una instancia con la API patch de Cloud Data Fusion. Defina la marca enableRbac como false y use el parámetro de consulta updateMask con el siguiente comando de ejemplo:

export PROJECT=PROJECT_ID
export LOCATION=REGION
export INSTANCE=INSTANCE_ID
export DATA_FUSION_API_NAME=datafusion.googleapis.com
alias gcurl='curl --header "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json"'
gcurl https://$DATA_FUSION_API_NAME/v1beta1/projects/$PROJECT/locations/$LOCATION/instances/$INSTANCE?updateMask=enable_rbac -X PATCH -d '{"enable_rbac": "false"}'

Crear una instancia con RBAC habilitado

Consola

Para crear una instancia de Cloud Data Fusion con el control de acceso basado en roles habilitado, sigue estos pasos:

  1. Ve a la página Instancias de Cloud Data Fusion.

  2. Haz clic en Instancias.

    Ir a Instancias

  3. Haz clic en Crear una instancia e introduce los detalles de la instancia.

  4. Selecciona la edición Enterprise. El control de acceso basado en roles solo se admite en la edición Enterprise.

  5. En Opciones avanzadas, selecciona Habilitar control de acceso granular basado en roles.

    Esta función solo está disponible en instancias que usan Cloud Data Fusion 6.5 y versiones posteriores.

  6. Haz clic en Crear.

gcloud

Para crear una instancia con RBAC habilitado, ejecuta el siguiente comando:

gcloud beta data-fusion instances create --edition=enterprise \
--enable_rbac \
--location=REGION INSTANCE_ID \
--version=6.5.0

Ejemplo de uso:

gcloud beta data-fusion instances create --edition=enterprise \
--enable_rbac \
--location=us-east1 \
--version=6.5.0

API REST

Para crear una instancia con RBAC habilitado mediante la API REST, pasa la marca enableRbac con el valor true en las opciones de la instancia, como se muestra en los siguientes comandos:

export PROJECT=PROJECT_ID
export LOCATION=REGION
export INSTANCE=INSTANCE_ID
export DATA_FUSION_API_NAME=datafusion.googleapis.com
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://$DATA_FUSION_API_NAME/v1beta1/projects/$PROJECT/locations/$LOCATION/instances?instanceId=$INSTANCE -X POST -d '{"description": "RBAC CDF instance created through REST", "type": "ENTERPRISE", "enableRbac": "true"}'

Conceder roles predefinidos de Cloud Data Fusion a los usuarios (obligatorio)

Una vez habilitado el control de acceso basado en roles, puedes asignar roles a los principales para que puedan realizar acciones específicas en una instancia o en un espacio de nombres. Para decidir qué roles se ajustan mejor a tus requisitos, consulta los roles predefinidos de Cloud Data Fusion y las recomendaciones de seguridad.

Consola

Para asignar roles predefinidos de Cloud Data Fusion a principales, sigue estos pasos:

  1. Ve a la página Permisos de Cloud Data Fusion.

    Ve a Permisos.

  2. Haz clic en Añadir .

    Se abre el cuadro de diálogo Añadir acceso de usuarios.

  3. En el campo Miembros nuevos, introduce una lista de principales (usuarios, grupos o correos de cuentas de servicio) a los que quieras asignar roles.

  4. Seleccione la casilla situada junto a cada instancia para la que quiera conceder estos permisos.

    Seleccionar instancias

  5. Ve a la columna Rol y selecciona el menú desplegable situado junto a las instancias elegidas.

    1. Para conceder permisos de administrador de instancias, selecciona Administrador de instancias.

    2. Para conceder permisos a nivel de espacio de nombres, selecciona Usuario del espacio de nombres.

      Seleccionar roles de usuario del espacio de nombres

      1. Si vas a conceder permisos a nivel de espacio de nombres, haz clic en Seleccionar.

        Se abrirá el cuadro de diálogo Añadir derechos de acceso.

      2. Selecciona un espacio de nombres y el rol de Cloud Data Fusion predefinido que quieras asignar al espacio de nombres.

      3. Haga clic en Seleccionar para guardar la nueva configuración.

      4. Opcional: Para conceder permisos de espacio de nombres a otras instancias, repite el paso 5.

  6. Haz clic en Guardar.

    Para verificar los roles que se han concedido, consulta Verificar roles en la consola Google Cloud .

gcloud

Puedes usar Google Cloud CLI para controlar el acceso mediante programación.

Para asignar un rol mediante gcloud CLI, usa una lista de identificadores de usuario delimitada por comas con el siguiente formato:

[user|group|serviceAccount][email_address]

Proporciona los siguientes valores:

  • user:useremail@example.com
  • group:groupemail@example.com
  • serviceAccount:serviceaccount@project.iam.gserviceaccount.com

Para ver más ejemplos, consulta Asignar un rol.

Conceder el rol Instance Accessor (obligatorio)

Primero debes dar acceso a un usuario a la instancia asignándole el rol de Accesor en una instancia:

  1. Exporta las siguientes variables con el siguiente comando y sustituye las variables por tus propios valores:

    export PROJECT=PROJECT_ID
    export INSTANCE=INSTANCE_ID
    export REGION=REGION
    export USER_ID=EMAIL
    export USER_TYPE=USER_TYPE
    

    Sustituye las siguientes variables por tus propios valores:

    • PROJECT_ID: el nombre del proyecto.
    • INSTANCE_ID: el nombre de tu instancia.
    • REGION: la región a la que pertenece el proyecto.
    • EMAIL: la dirección de correo del director.
    • USER_TYPE: el tipo de usuario puede ser user, group o serviceAccount.
  2. Ejecuta el siguiente comando para asignar el rol:

    gcloud beta data-fusion add-iam-policy-binding ${INSTANCE} --project ${PROJECT} --location=${REGION} --member="${USER_TYPE}:${USER_ID}" --role="roles/datafusion.accessor"
    

Asignar roles a un espacio de nombres (depende del caso práctico)

Según tu caso de uso, asigna roles con los siguientes comandos:

  1. Exporta las siguientes variables con el siguiente comando y sustituye las variables por tus propios valores:

    export PROJECT=PROJECT_ID
    export INSTANCE=INSTANCE_ID
    export REGION=REGION
    export NAMESPACE=NAMESPACE
    export USER_ID=EMAIL
    export USER_TYPE=USER_TYPE
    

    Sustituye las siguientes variables por tus propios valores:

    • PROJECT_ID: el nombre del proyecto.
    • INSTANCE_ID: el nombre de tu instancia.
    • REGION: la región a la que pertenece el proyecto.
    • NAMESPACE: nombre del espacio de nombres.
    • EMAIL: la dirección de correo del director.
    • USER_TYPE: el tipo de usuario puede ser user, group o serviceAccount.
  2. Ejecuta el siguiente comando para asignar un rol a una entidad de seguridad en un espacio de nombres determinado:

    gcloud beta data-fusion add-iam-policy-binding ${INSTANCE} --project ${PROJECT} --location=${REGION} --namespace=${NAMESPACE} --member="${USER_TYPE}:${USER_ID}" --role="roles/ROLE_NAME"
    

    Sustituye ROLE_NAME por uno de los siguientes valores:

    • Para el rol de editor de un espacio de nombres, usa datafusion.editor.
    • Para el rol Operador de un espacio de nombres, usa datafusion.operator
    • Para el rol de desarrollador de un espacio de nombres, usa datafusion.developer.
    • Para el rol de lector de un espacio de nombres, usa datafusion.viewer

Opcional: Revocar roles de espacio de nombres

Para revocar el rol concedido a un usuario en un espacio de nombres determinado, usa el siguiente comando:

export PROJECT=PROJECT_ID
export INSTANCE=INSTANCE_ID
export REGION=REGION
export NAMESPACE=NAMESPACE
export USER_ID=EMAIL
# User type can be one of: user, group, or serviceAccount.
export USER_TYPE=USER_TYPE
export ROLE=ROLE_NAME
gcloud beta data-fusion remove-iam-policy-binding ${INSTANCE} --project ${PROJECT} --location=${REGION} --namespace=${NAMESPACE} --member="${USER_TYPE}:${USER_ID}" --role="${ROLE}"

Opcional: Lista de roles concedidos en un espacio de nombres determinado

Para ver todos los roles concedidos en un espacio de nombres concreto, usa el siguiente comando para obtener la política de gestión de identidades y accesos:

export PROJECT=PROJECT_ID
export INSTANCE=INSTANCE_ID
export REGION=REGION
export NAMESPACE=NAMESPACE
gcloud beta data-fusion get-iam-policy ${INSTANCE} --project ${PROJECT} --location=${REGION} --namespace=${NAMESPACE}

API REST

Conceder el rol Instance Accessor (obligatorio)

Primero debes dar acceso a un usuario a la instancia concediéndole el rol de Accesor en una instancia.

Recomendación: usa la CLI de gcloud para asignar el rol Accesor.

  1. Asigna el rol de acceso a una instancia:

    export PROJECT=PROJECT_ID
    export INSTANCE=INSTANCE_ID
    export REGION=REGION
    export USER_ID=EMAIL
    # User type can be one of: user, group, or serviceAccount.
    export USER_TYPE=USER_TYPE
    alias gcurl='curl --header "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json"'
    
  2. Obtén la política de gestión de identidades y accesos actual y guárdala en un archivo:

    gcurl https://datafusion.googleapis.com/v1beta1/projects/${PROJECT}/locations/${REGION}/instances/${INSTANCE}:getIamPolicy > iam_policy.json
    
  3. Añade una vinculación para el rol y el usuario en la política. Por ejemplo:

    {
      "policy": {
        "bindings": [
          {
            "role": "roles/datafusion.accessor",
            "members": [
              "${USER_TYPE}:${USER_ID}"
            ]
          }
        ]
      }
    }
    
  4. Actualiza la política de gestión de identidades y accesos de la instancia:

    gcurl \
      -d @iam_policy.json \
      https://datafusion.googleapis.com/v1beta1/projects/${PROJECT}/locations/${REGION}/instances/${INSTANCE}:setIamPolicy
    

Asignar roles a un espacio de nombres (depende del caso práctico)

Según tu caso de uso, asigna roles con los siguientes comandos:

  1. Exporta las siguientes variables con el siguiente comando y sustituye las variables por tus propios valores:

    export PROJECT=PROJECT_ID
    export INSTANCE=INSTANCE_ID
    export REGION=REGION
    export NAMESPACE=NAMESPACE
    export USER_ID=EMAIL
    export USER_TYPE=USER_TYPE
    alias gcurl='curl --header "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json"'
    

    Sustituye las siguientes variables por tus propios valores:

    • PROJECT_ID: el nombre del proyecto.
    • INSTANCE_ID: el nombre de tu instancia.
    • REGION: la región a la que pertenece el proyecto.
    • NAMESPACE: nombre del espacio de nombres.
    • EMAIL: la dirección de correo del director.
    • USER_TYPE: el tipo de usuario puede ser user, group o serviceAccount.
  2. Obtén la política de gestión de identidades y accesos actual y guárdala en un archivo:

      gcurl https://datafusion.googleapis.com/v1beta1/projects/${PROJECT}/locations/${REGION}/instances/${INSTANCE}/namespaces/{NAMESPACE}:getIamPolicy > iam_policy.json
    

    Sustituye iam_policy.json por el nombre de tu archivo.

  3. Añade una vinculación para el rol y el usuario en el archivo de política. Por ejemplo, el archivo de política puede tener el siguiente aspecto:

    {
      "policy": {
        "bindings": [
          {
            "role": "roles/ROLE_NAME",
              "members": [
              "${USER_TYPE}:${USER_ID}"
            ]
          }
        ]
      }
    }
    

    Se pueden especificar varias vinculaciones de roles en una política determinada, y se pueden especificar varias entidades en la lista members de una vinculación de roles determinada. En el caso de un principal concreto, sustituye ROLE_NAME por uno de los siguientes valores:

    • Para el rol de editor de un espacio de nombres, usa datafusion.editor.
    • Para el rol Operador de un espacio de nombres, usa datafusion.operator
    • Para el rol de desarrollador de un espacio de nombres, usa datafusion.developer.
    • Para el rol de lector de un espacio de nombres, usa datafusion.viewer
  4. Ejecuta el siguiente comando para actualizar el archivo de política:

    gcurl -d @iam_policy.json \
    https://datafusion.googleapis.com/v1beta1/projects/${PROJECT}/locations/${REGION}/instances/${INSTANCE}/namespaces/{NAMESPACE}:setIamPolicy
    

    Sustituye iam_policy.json por el nombre de tu archivo.

Verificar roles en la Google Cloud consola

Revisa y edita los roles en la página Permisos de Cloud Data Fusion.

Ve a Permisos.

Verificar los roles con el archivo de políticas

Verifica que los roles se han asignado a los usuarios correctos en el archivo Policy de IAM mediante la interfaz de línea de comandos de gcloud o la API REST.

En el siguiente ejemplo de archivo de política de gestión de identidades y accesos, el usuario alice@example.com tiene el rol de desarrollador de Data Fusion:

bindings:
- members:
  - user:alice@example.com
  role: roles/datafusion.developer
- members:
  - user:bob@example.com
  - serviceAccount:myserviceaccount@myproject.iam.gserviceaccount.com
  role: roles/datafusion.operator
- members:
  - user:james@example.com
  - user:mike@example.com
  - group:mygroup@googlegroups.com
  role: roles/datafusion.editor
etag: BwXA8BAHYmw=

Obtener la política de gestión de identidades y accesos de una instancia

gcloud

export PROJECT=PROJECT_ID
export INSTANCE=INSTANCE_ID
export REGION=REGION
gcloud beta data-fusion get-iam-policy ${INSTANCE} --project ${PROJECT} --location=${REGION}

cURL

export PROJECT=PROJECT_ID
export INSTANCE=INSTANCE_ID
export REGION=REGION
curl -H "Authorization: Bearer "$(gcloud auth print-access-token) \
https://datafusion.googleapis.com/v1beta1/projects/${PROJECT}/locations/${REGION}/instances/${INSTANCE}:getIamPolicy

Obtener la política de gestión de identidades y accesos de un espacio de nombres

gcloud

export PROJECT=PROJECT_ID
export INSTANCE=INSTANCE_ID
export REGION=REGION
export NAMESPACE=NAMESPACE
gcloud beta data-fusion get-iam-policy ${INSTANCE} --project ${PROJECT} --location=${REGION} --namespace=${NAMESPACE}

cURL

export PROJECT=PROJECT_ID
export INSTANCE=INSTANCE_ID
export NAMESPACE=NAMESPACE
export REGION=REGION
curl -H "Authorization: Bearer "$(gcloud auth print-access-token) \
https://datafusion.googleapis.com/v1beta1/projects/${PROJECT}/locations/${REGION}/instances/${INSTANCE}/namespaces/${NAMESPACE}:getIamPolicy

Siguientes pasos