Usar el control de acceso basado en funciones

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

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

Recomendado: A menos que sea necesario con fines de automatización, usa la consola de Google Cloud para realizar tus tareas de RBAC.

Habilita RBAC para una instancia existente

Puedes habilitar el RBAC en un servicio existente de Cloud Data Fusion en ejecución en la versión 6.5 o posterior.

Console

Para habilitar RBAC en una instancia existente de Cloud Data Fusion, haz lo siguiente:

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

    2. Haz clic en Instancias y, luego, 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 una posterior.
  3. Haz 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 RBAC en una instancia existente de Cloud Data Fusion, ejecuta el siguiente comando:

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

API de REST

Habilita RBAC para una instancia existente con la API de parche de Cloud Data Fusion. Establece la marca enableRbac en true y usa el parámetro de consulta updateMask mediante 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"}'

Inhabilita RBAC para una instancia existente

Si tienes una instancia existente con RBAC habilitado, puedes inhabilitarlo si es necesario. La inhabilitación del RBAC no afecta ninguna canalización o configuración existente en la instancia. Solo inhabilita el aislamiento de seguridad entre los espacios de nombres.

Console

Para inhabilitar RBAC en una instancia existente de Cloud Data Fusion, haz lo siguiente:

  1. Ve a los detalles de la instancia:

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

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

      Ir a Instancias

  2. Haz clic en Inhabilitar RBAC.

  3. Haz clic en Guardar.

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

gcloud

A fin de inhabilitar RBAC para una instancia existente, 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 de REST

Inhabilita el RBAC para una instancia existente con el Parche de Cloud Data Fusion API de gcloud. Establece la marca enableRbac en false y usa el parámetro de consulta updateMask mediante 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"}'

Crea una instancia nueva con RBAC habilitado

Console

Para crear una instancia nueva de Cloud Data Fusion con RBAC habilitado, haz lo siguiente:

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

  2. Haz clic en Instances.

    Ir a Instancias

  3. Haz clic en Crear una instancia y, luego, ingresa los detalles de la instancia.

  4. Selecciona Enterprise Edition. RBAC solo es compatible con la edición empresarial.

  5. En Opciones avanzadas, selecciona Habilitar el control de acceso detallado basado en funciones.

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

  6. Haga clic en Crear.

gcloud

A fin de crear una instancia nueva 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 de REST

A fin de crear una instancia con RBAC habilitado mediante la API de REST, pasa la marca enableRbac configurada como 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"}'

Otorga funciones predefinidas de Cloud Data Fusion a los usuarios (obligatorio)

Después de habilitar RBAC, debes otorgar funciones a los principales para permitirles realizar acciones específicas en una instancia o un espacio de nombres. Para decidir qué funciones satisfacen mejor tus requisitos, consulta las funciones predefinidas de Cloud Data Fusion y las recomendaciones de seguridad.

Console

Para otorgar funciones predefinidas de Cloud Data Fusion a los principales, haz lo siguiente:

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

    Ir a Permisos

  2. Haz clic en Agregar .

    La opción Agregar usuarios Access.

  3. En el campo Miembros nuevos, ingresa una lista de principales (correos electrónicos de usuarios, grupos o cuentas de servicio) a los que deseas otorgar funciones.

  4. Selecciona la casilla junto a cada instancia a la que deseas otorgar estos permisos.

    Seleccionar instancias

  5. Dirígete a la columna Rol y selecciona el menú desplegable junto al de instancias elegidas.

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

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

      Selecciona funciones de usuario del espacio de nombres

      1. Si otorgarás permisos a nivel del espacio de nombres, haz clic Seleccionar.

        Se abrirá el diálogo Agregar derechos de acceso.

      2. Selecciona un espacio de nombres y elige el rol predefinido de Cloud Data Fusion que deseas otorgar al espacio de nombres.

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

      4. Opcional: Si deseas otorgar permisos de espacio de nombres a otras instancias, repite el paso 5.

  6. Haz clic en Guardar.

    Para verificar los roles que se otorgaron, consulta Verifica los roles en la consola de Google Cloud.

gcloud

Puedes usar Google Cloud CLI para controlar el acceso de manera programática.

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

[user|group|serviceAccount][email_address]

Ingresa los siguientes valores:

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

Para obtener más ejemplos, consulta Otorga una función.

Otorga la función de descriptor de acceso a la instancia (obligatorio)

Primero debes otorgarle a un usuario acceso a la instancia. Para ello, debes otorgarle la función de descriptor de acceso en una instancia:

  1. Exporta las siguientes variables con el siguiente comando y reemplaza 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
    

    Reemplaza las siguientes variables por tus propios valores:

    • PROJECT_ID: Es el nombre de tu proyecto.
    • INSTANCE_ID: El nombre de la instancia
    • REGION: Es la región a la que pertenece el proyecto.
    • EMAIL: Es la dirección de correo electrónico del principal.
    • USER_TYPE: El tipo de usuario puede ser uno de los siguientes: usuario, grupo o serviceAccount.
  2. Ejecuta el siguiente comando para asignar la función:

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

Otorga funciones a un espacio de nombres (dependiente del caso de uso)

Según tu caso práctico, otorga funciones con los siguientes comandos:

  1. Exporta las siguientes variables con el siguiente comando y reemplaza 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
    

    Reemplaza las siguientes variables por tus propios valores:

    • PROJECT_ID: Es el nombre de tu proyecto.
    • INSTANCE_ID: El nombre de la instancia
    • REGION: Es la región a la que pertenece el proyecto.
    • NAMESPACE: El nombre del espacio de nombres.
    • EMAIL: Es la dirección de correo electrónico del principal.
    • USER_TYPE: El tipo de usuario puede ser uno de los siguientes: usuario, grupo o serviceAccount.
  2. Ejecuta el siguiente comando para asignar una función a una principal 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"
    

    Reemplaza ROLE_NAME por uno de los siguientes valores:

    • Para la función de editor de un espacio de nombres, usa datafusion.editor
    • Para la función de operador de un espacio de nombres, usa datafusion.operator
    • Para la función de desarrollador de un espacio de nombres, usa datafusion.developer
    • Para la función de visualizador de un espacio de nombres, usa datafusion.viewer

Opcional: Revoca roles de espacio de nombres

Para revocar la función otorgada 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: Enumera los roles otorgados en un espacio de nombres determinado

Para enumerar todos los roles otorgados en un espacio de nombres en particular, usa el siguiente comando para recuperar la política de IAM:

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 de REST

Otorga la función de descriptor de acceso a la instancia (obligatorio)

Primero debes otorgarle a un usuario acceso a la instancia. Para ello, debes otorgarle la función de descriptor de acceso en una instancia.

Recomendación: Usa gcloud CLI para otorgar el rol de descriptor de acceso.

  1. Otorga la función de descriptor de acceso en 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. Recupera la política actual de IAM y guárdala en un archivo:

    gcurl https://datafusion.googleapis.com/v1beta1/projects/${PROJECT}/locations/${REGION}/instances/${INSTANCE}:getIamPolicy > iam_policy.json
    
  3. Agrega una vinculación para la función 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 IAM de la instancia:

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

Otorga funciones a un espacio de nombres (dependiente del caso de uso)

Según tu caso práctico, otorga funciones con los siguientes comandos:

  1. Exporta las siguientes variables con el siguiente comando y reemplaza 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"'
    

    Reemplaza las siguientes variables por tus propios valores:

    • PROJECT_ID: Es el nombre de tu proyecto.
    • INSTANCE_ID: El nombre de la instancia
    • REGION: Es la región a la que pertenece el proyecto.
    • NAMESPACE: El nombre del espacio de nombres.
    • EMAIL: Es la dirección de correo electrónico del principal.
    • USER_TYPE: El tipo de usuario puede ser uno de los siguientes: usuario, grupo o serviceAccount.
  2. Recupera la política actual de IAM y guárdala en un archivo:

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

    Reemplaza iam_policy.json por tu propio nombre de archivo.

  3. Agrega una vinculación para la función y el usuario en el archivo de políticas. 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 múltiples vinculaciones de roles para una política determinada y varias se pueden especificar las principales en la lista de miembros para un rol determinado la vinculación. Para un principal determinado, reemplaza ROLE_NAME por uno de los siguientes valores:

    • Para la función de editor de un espacio de nombres, usa datafusion.editor
    • Para la función de operador de un espacio de nombres, usa datafusion.operator
    • Para la función de desarrollador de un espacio de nombres, usa datafusion.developer
    • Para la función de visualizador 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
    

    Reemplaza iam_policy.json por tu propio nombre de archivo.

Verifica los roles en la consola de Google Cloud

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

Ir a Permisos

Verifica las funciones con el archivo de políticas

Verifica que los roles se otorguen a los usuarios correctos en el archivo de Políticas de IAM con gcloud CLI o la API de REST.

En el siguiente ejemplo de archivo de políticas de IAM, el usuario alice@example.com tiene la función 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=

Obtén la política de IAM para 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

Obtén la política de IAM para 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

¿Qué sigue?