Usa 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).

Recomendación: A menos que sea necesario con fines de automatización, se recomienda usar Google Cloud Console para realizar tus tareas de RBAC.

Habilita RBAC para una instancia existente

Puedes habilitar RBAC para una instancia existente de Cloud Data Fusion, siempre y cuando la instancia se ejecute en la versión 6.5 o posteriores.

Console

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

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

    Ir a Instancias

  2. Selecciona la instancia que desees.

    Se abre la página de detalles de la instancia.

  3. 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.

  4. Haz clic en Habilitar RBAC.

  5. Haz clic en Guardar.

  6. 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

Puedes habilitar 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)"'
gcurl https://$DATA_FUSION_API_NAME/v1beta1/projects/$PROJECT/locations/$LOCATION/instances/$INSTANCE_ID?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 la página de Instancias de Cloud Data Fusion.

    Ir a Instancias

  2. Selecciona la instancia que desees.

    Se abre la página de detalles de la instancia.

  3. Haz clic en Inhabilitar RBAC.

  4. Haz clic en Guardar.

  5. 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

Puedes inhabilitar RBAC para una instancia existente con la API de parche de Cloud Data Fusion. 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)"'
gcurl https://$DATA_FUSION_API_NAME/v1beta1/projects/$PROJECT/locations/$LOCATION/instances/$INSTANCE_ID?updateMask=enable_rbac -X PATCH -d '{"enable_rbac": "false"}'

Crea una instancia nueva con RBAC habilitado

Puedes agregar RBAC a nuevas instancias de Cloud Data Fusion.

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.

    Ir a Instancias

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

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

  4. 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.

  5. 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. Haga clic en Agregar .

    Se abrirá una ventana Agregar acceso de usuarios.

  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. Ve a la columna Función y selecciona la casilla desplegable junto a las instancias deseadas.

    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 otorgas permisos a nivel de espacio de nombres, haz clic en SELECT.

        Se abrirá una ventana Agregar derechos de acceso.

      2. Selecciona un espacio de nombres y selecciona la función predefinida de Cloud Data Fusion que deseas otorgar al espacio de nombres.

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

      4. Opcional: A fin de otorgar permisos de espacio de nombres para otras instancias, repite el paso 5.

  6. Haz clic en Guardar.

    Para verificar las funciones que se otorgaron, consulta Verifica funciones en Google Cloud Console.

gcloud

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

Para otorgar una función 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

Revocar funciones de espacio de nombres (opcional):

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}"

Enumera las funciones otorgadas en un espacio de nombres determinado Opcional:

Puedes enumerar todas las funciones otorgadas en un espacio de nombres en particular mediante 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.

Muy recomendado: En su lugar, usa la CLI de gcloud para otorgar la función 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)"'
    
  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_ID}: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}"
            ]
          }
        ]
      }
    }
    gcurl
      -d @iam_policy.json \
      https://datafusion.googleapis.com/v1beta1/projects/${PROJECT}/locations/${REGION}/instances/${INSTANCE_ID}: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)"'
    

    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}:getIamPolicy > iam_policy.json
      ```
    
    Replace iam_policy.json with your own file name.
    
  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 varias vinculaciones de funciones para una política determinada, y se pueden especificar varias principales en la lista miembros de una vinculación de función determinada. 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
  1. 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_ID}:setIamPolicy
    

    Reemplaza iam_policy.json por tu propio nombre de archivo.

Verifica las funciones en Google Cloud Console

Puedes revisar y editar las funciones existentes en la página Permisos de Cloud Data Fusion.

Ir a Permisos

Verifica las funciones con el archivo de políticas

Puedes verificar que las funciones se otorguen a los usuarios correctos en el archivo de política de IAM mediante la CLI de gcloud 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?