Controlar el acceso con la gestión de identidades y accesos

En este documento se explica cómo hacer lo siguiente en Dataform:

Antes de empezar

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the BigQuery and Dataform APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the BigQuery and Dataform APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  8. Conceder a Dataform el acceso necesario

    En esta sección se explica cómo asignar los roles de gestión de identidades y accesos (IAM) que necesitan los agentes de servicio de Dataform y las cuentas de servicio personalizadas para ejecutar flujos de trabajo en BigQuery.

    Información sobre las cuentas de servicio personalizadas y los agentes de servicio de Dataform

    Puedes configurar cuentas de servicio personalizadas para que ejecuten flujos de trabajo en tu nombre de las siguientes formas:

    Cuando creas un repositorio o una configuración de flujo de trabajo de Dataform, puedes seleccionar cualquier cuenta de servicio para la que tengas permisos de actuar como. Debes configurar los permisos necesarios para todas las cuentas de servicio asociadas a tus recursos de Dataform.

    Cuando creas tu primer repositorio de Dataform, Dataform genera automáticamente un agente de servicio predeterminado. Dataform usa el agente de servicio predeterminado para interactuar con BigQuery en tu nombre.

    Tu ID de agente de servicio de Dataform predeterminado tiene el siguiente formato:

    service-PROJECT_NUMBER@gcp-sa-dataform.iam.gserviceaccount.com
    

    Sustituye PROJECT_NUMBER por el ID numérico de tuGoogle Cloud proyecto. Puedes encontrar el Google Cloud ID de tu proyecto en el Google Cloud panel de control de la consola. Para obtener más información, consulta el artículo sobre cómo identificar proyectos.

    Roles necesarios para los agentes de servicio de Dataform, las cuentas de servicio personalizadas y las cuentas de Google

    Los agentes de servicio de Dataform predeterminados, las cuentas de servicio personalizadas y las credenciales de usuario de la cuenta de Google (vista previa) que se usan para autenticarse en Dataform requieren los siguientes roles de gestión de identidades y accesos de BigQuery para poder ejecutar flujos de trabajo en BigQuery:

    Además, asigna los siguientes roles al agente de servicio predeterminado de Dataform en la cuenta de servicio efectiva de la configuración del flujo de trabajo:

    Para las versiones automáticas de repositorios y las ejecuciones automáticas de flujos de trabajo, concede al agente de servicio predeterminado de Dataform el permiso iam.serviceAccounts.actAs en la cuenta de servicio efectiva.

    Cuestiones sobre seguridad

    Si asignas los roles que necesita Dataform a un agente de servicio de Dataform, a una cuenta de servicio personalizada o a una cuenta de Google de un usuario (vista previa), debes tener en cuenta los siguientes aspectos de seguridad:

    • Cualquier agente de servicio o cuenta de servicio que tenga los roles necesarios puede obtener acceso a BigQuery o Secret Manager en el proyecto al que pertenezca, independientemente de los controles de servicio de VPC. Las solicitudes procedentes de Dataform que usan un agente de servicio con los roles necesarios están dentro del perímetro de Controles de Servicio de VPC del proyecto al que pertenece el repositorio de Dataform.

      Para obtener más información, consulta Configurar Controles de Servicio de VPC.

    • Cualquier usuario que tenga el permiso dataform.repositories.create de IAM puede ejecutar código con el agente de servicio predeterminado de Dataform y todos los permisos concedidos a ese agente de servicio o cuenta de servicio.

      Para obtener más información, consulta Consideraciones de seguridad sobre los permisos de Dataform.

    Para restringir los datos que un usuario, un agente de servicio o una cuenta de servicio pueden leer o escribir en BigQuery, puedes conceder permisos de gestión de identidades y accesos de BigQuery granulares a conjuntos de datos o tablas de BigQuery concretos. Para obtener más información, consulta Controlar el acceso a los conjuntos de datos y Controlar el acceso a las tablas y las vistas.

    Para evitar que los usuarios realicen acciones mientras usan las credenciales de usuario de la cuenta de Google de otro usuario, se aplican las siguientes restricciones:

    • Para modificar una configuración de flujo de trabajo con las credenciales de otro usuario de una cuenta de Google, debes adjuntar tus propias credenciales de usuario de una cuenta de Google a la configuración del flujo de trabajo o cambiar la configuración del flujo de trabajo para autenticarte con un agente de servicio de {dataform_name_short} o con una cuenta de servicio personalizada.
    • No puedes modificar el resultado de una compilación de una configuración de lanzamiento si hay configuraciones de flujo de trabajo que hacen referencia a la configuración de lanzamiento y que tienen adjuntas las credenciales de otro usuario de cuenta de Google.
    • No puedes configurar un flujo de trabajo para que se autentique con las credenciales de usuario de una cuenta de Google y hacer referencia a una configuración de lanzamiento con una programación. Esta limitación tiene las siguientes consecuencias:

      • No puedes actualizar una configuración de lanzamiento para que use una programación si hay configuraciones de flujo de trabajo que hacen referencia a la configuración de lanzamiento y que están configuradas para autenticarse con las credenciales de usuario de una cuenta de Google.
      • No puedes crear una configuración de flujo de trabajo que se autentique con credenciales de usuario de una cuenta de Google y que apunte a una configuración de lanzamiento con una programación.
      • No puedes crear ni actualizar una configuración de flujo de trabajo para usar credenciales de usuario de una cuenta de Google y apuntar a una configuración de lanzamiento con una programación.

    Conceder los roles de BigQuery necesarios

    Para asignar los roles de gestión de identidades y accesos de BigQuery necesarios a tu agente de servicio de Dataform predeterminado, a una cuenta de servicio personalizada que quieras usar en Dataform o a una cuenta de Google de un usuario que quieras usar para autenticarte en Dataform (vista previa), sigue estos pasos:

    1. En la Google Cloud consola, ve a la página Dataform.

      Ir a Dataform

    2. Seleccione o cree un repositorio.

    3. En la consola, ve a la página Gestión de identidades y accesos. Google Cloud

      Ir a IAM

    4. Haz clic en Conceder acceso.

    5. En el campo Principales nuevos, introduce el ID del agente de servicio, el ID de la cuenta de servicio o el correo de la cuenta de Google del usuario (Vista previa).

    6. En la lista Selecciona un rol, elige el rol Usuario de tareas de BigQuery.

    7. Haz clic en Añadir otro rol y, en la lista Seleccionar un rol, selecciona el rol Editor de datos de BigQuery.

    8. Haz clic en Añadir otro rol y, en la lista Seleccionar un rol, selecciona el rol Lector de datos de BigQuery.

    9. Haz clic en Guardar.

    Conceder los roles necesarios para los flujos de trabajo automáticos

    Para usar una cuenta de servicio personalizada en Dataform, el agente de servicio de Dataform predeterminado debe poder acceder a la cuenta de servicio personalizada. De esta forma, Dataform puede ejecutar tus flujos de trabajo con los permisos definidos en tu cuenta de servicio personalizada en lugar de en la cuenta del agente de servicio predeterminado.

    Para conceder este acceso, debes asignar el rol Creador de tokens de cuenta de servicio (roles/iam.serviceAccountTokenCreator) al agente de servicio predeterminado de Dataform como principal. De esta forma, el agente de servicio predeterminado de Dataform puede suplantar la identidad de la cuenta de servicio creando credenciales de corta duración, conocidas como tokens. Dataform necesita estos tokens para ejecutar flujos de trabajo con la identidad de la cuenta de servicio personalizada.

    También debes asignar el rol Usuario de cuenta de servicio (roles/iam.serviceAccountUser) al agente de servicio predeterminado de Dataform. De esta forma, el agente de servicio de Dataform predeterminado puede iniciar nuevas ejecuciones de flujo de trabajo automáticas para las configuraciones de flujo de trabajo que ejecute la cuenta de servicio personalizada.

    Para conceder acceso al agente de servicio predeterminado de Dataform a una cuenta de servicio personalizada, sigue estos pasos:

    1. En la Google Cloud consola, ve a IAM > Cuentas de servicio.

      Ir a Cuentas de servicio

    2. Selecciona un proyecto.

    3. En la página Cuentas de servicio del proyecto "PROJECT_NAME", selecciona tu cuenta de servicio personalizada.

    4. Ve a Principales con acceso y, a continuación, haz clic en Dar acceso.

    5. En el campo Nuevos principales, introduce el ID de agente de servicio de Dataform predeterminado.

      Tu ID de agente de servicio de Dataform predeterminado tiene el siguiente formato:

      service-PROJECT_NUMBER@gcp-sa-dataform.iam.gserviceaccount.com
      
    6. En la lista Seleccionar un rol, selecciona el rol Creador de tokens de cuenta de servicio y el rol Usuario de cuenta de servicio.

    7. Haz clic en Guardar.

    La cuenta de servicio personalizada ya se puede configurar en tu repositorio de Dataform.

    Auditar las configuraciones de cuentas de servicio

    En esta sección se explica cómo auditar los recursos de Dataform para asegurarse de que se usan correctamente las cuentas de servicio y los permisos. La auditoría es especialmente importante cuando se usan cuentas de servicio personalizadas, ya que requieren permisos específicos para que el agente de servicio de Dataform predeterminado funcione.

    Cuando uses una cuenta de servicio personalizada para un repositorio o una configuración de flujo de trabajo de Dataform, debes verificar que el agente de servicio de Dataform predeterminado tenga el rol Usuario de cuenta de servicio (roles/iam.serviceAccountUser) en la cuenta de servicio personalizada. Este rol concede el permiso iam.serviceAccounts.actAs, que permite que las ejecuciones programadas iniciadas por el agente de servicio de Dataform predeterminado suplanten la identidad de la cuenta de servicio personalizada. Además, comprueba que el agente de servicio predeterminado de Dataform tenga el rol Creador de tokens de cuenta de servicio (roles/iam.serviceAccountTokenCreator) en la cuenta de servicio efectiva.

    Verificar cuentas de servicio de repositorios

    Primero, identifique los recursos de dataform.Repository que se incluyen en la programación y la ejecución de Dataform. A continuación, verifica las configuraciones de la cuenta de servicio de esos repositorios incluidos en el ámbito.

    1. Usa Inventario de recursos de Cloud para enumerar todos los recursos de tipo dataform.Repository. Para obtener más información, consulta Ver tus recursos.

    2. En cada repositorio de la salida de Cloud Asset Inventory, compruebe el campo resource.data.labels para determinar si está incluido en el ámbito. La ruta exacta puede variar ligeramente en función del formato de exportación.

    3. Identifica los repositorios que están fuera del ámbito inspeccionando el mapa de etiquetas de la clave single-file-asset-type. La presencia de esta clave indica que el repositorio se usa en una función de BigQuery. Si el valor es sql o data_canvas, el repositorio se puede excluir de las comprobaciones de permisos de la cuenta de servicio.

      Los repositorios restantes que no tienen esta clave o estos valores están en el ámbito de las comprobaciones de permisos de la cuenta de servicio.

    4. En cada repositorio incluido en el ámbito, comprueba el campo resource.data.serviceAccount en el resultado de Cloud Asset Inventory para determinar si se ha configurado una cuenta de servicio personalizada:

      • Si el campo resource.data.serviceAccount está presente y su valor es diferente de la dirección de correo del agente de servicio de Dataform predeterminado del proyecto, el repositorio usa una cuenta de servicio personalizada.
      • Si el campo resource.data.serviceAccount no está presente o si el valor del campo coincide con el agente de servicio de Dataform predeterminado del proyecto, el repositorio usará el agente de servicio predeterminado.

    5. Si se usa una cuenta de servicio personalizada, comprueba que el agente de servicio predeterminado de Dataform tenga los roles Usuario de cuenta de servicio (roles/iam.serviceAccountUser) y Creador de tokens de cuenta de servicio (roles/iam.serviceAccountTokenCreator) en esa cuenta de servicio personalizada.

    Verificar las cuentas de servicio de configuración de flujos de trabajo

    Usar cuentas de servicio personalizadas específicas para las configuraciones de flujo de trabajo de Dataform es una práctica recomendada de seguridad que se ajusta al principio de mínimos accesos.

    Para verificar el uso de la cuenta de servicio de dataform.WorkflowConfig resources, haz lo siguiente:

    1. Usa Inventario de Recursos de Cloud para enumerar todos los recursos del dataform.WorkflowConfig tipo.

    2. En cada configuración de flujo de trabajo, examine el resultado de Cloud Asset Inventory para determinar la cuenta de servicio efectiva:

      • Si el campo resource.data.serviceAccount está presente, este valor es la dirección de correo de la cuenta de servicio definida explícitamente en la configuración del flujo de trabajo.
      • Si falta el campo resource.data.serviceAccount, la configuración del flujo de trabajo hereda la cuenta de servicio de su repositorio principal. Consulta la configuración del repositorio principal para encontrar la cuenta de servicio efectiva.
    3. Para identificar si se está usando una cuenta de servicio personalizada, compara la dirección de correo de la cuenta de servicio efectiva con la dirección de correo del agente de servicio de Dataform predeterminado del proyecto. Si son diferentes, se está usando una cuenta de servicio personalizada.

    4. Si se usa una cuenta de servicio personalizada, asegúrate de que el agente de servicio predeterminado de Dataform tenga asignados los roles Usuario de cuenta de servicio (roles/iam.serviceAccountUser) y Creador de tokens de cuenta de servicio (roles/iam.serviceAccountTokenCreator) en esa cuenta de servicio personalizada. Estos permisos permiten que el agente de servicio de Dataform predeterminado inicie ejecuciones de flujos de trabajo suplantando la cuenta de servicio personalizada.

    Controlar el acceso a Dataform con la gestión de identidades y accesos

    En esta sección se describen las opciones de control de acceso de Dataform y se explica cómo ver y asignar roles de Dataform. Dataform usa Gestión de Identidades y Accesos (IAM) para el control de acceso. Para obtener más información sobre los roles y permisos de gestión de identidades y accesos, consulta el índice de roles y permisos de gestión de identidades y accesos.

    Roles predefinidos de Dataform

    En la siguiente tabla se indican los roles predefinidos que te dan acceso a los recursos de Dataform:

    Role Permissions

    (roles/dataform.admin)

    Full access to all Dataform resources.

    dataform.*

    • dataform.commentThreads.create
    • dataform.commentThreads.delete
    • dataform.commentThreads.get
    • dataform.commentThreads.list
    • dataform.commentThreads.update
    • dataform.comments.create
    • dataform.comments.delete
    • dataform.comments.get
    • dataform.comments.list
    • dataform.comments.update
    • dataform.compilationResults.create
    • dataform.compilationResults.get
    • dataform.compilationResults.list
    • dataform.compilationResults.query
    • dataform.config.get
    • dataform.config.update
    • dataform.folders.addContents
    • dataform.folders.create
    • dataform.folders.delete
    • dataform.folders.deleteTree
    • dataform.folders.get
    • dataform.folders.getIamPolicy
    • dataform.folders.move
    • dataform.folders.queryContents
    • dataform.folders.setIamPolicy
    • dataform.folders.update
    • dataform.locations.get
    • dataform.locations.list
    • dataform.operations.cancel
    • dataform.operations.delete
    • dataform.operations.get
    • dataform.operations.list
    • dataform.releaseConfigs.create
    • dataform.releaseConfigs.delete
    • dataform.releaseConfigs.get
    • dataform.releaseConfigs.list
    • dataform.releaseConfigs.update
    • dataform.repositories.commit
    • dataform.repositories.computeAccessTokenStatus
    • dataform.repositories.create
    • dataform.repositories.delete
    • dataform.repositories.fetchHistory
    • dataform.repositories.fetchRemoteBranches
    • dataform.repositories.get
    • dataform.repositories.getIamPolicy
    • dataform.repositories.list
    • dataform.repositories.move
    • dataform.repositories.queryDirectoryContents
    • dataform.repositories.readFile
    • dataform.repositories.scheduleRelease
    • dataform.repositories.scheduleWorkflow
    • dataform.repositories.setIamPolicy
    • dataform.repositories.update
    • dataform.teamFolders.create
    • dataform.teamFolders.delete
    • dataform.teamFolders.deleteTree
    • dataform.teamFolders.get
    • dataform.teamFolders.getIamPolicy
    • dataform.teamFolders.setIamPolicy
    • dataform.teamFolders.update
    • dataform.workflowConfigs.create