Python 2 ya no es compatible con la comunidad. Te recomendamos que migres las apps de Python 2 a Python 3.

Configura el control de acceso

El control de acceso determina quién tiene permiso para acceder a servicios y recursos en un proyecto de Google Cloud. En App Engine, existen varios casos prácticos diferentes para configurar el control de acceso:

  • Otorga acceso a los miembros del equipo a tu proyecto de Cloud para que puedan configurar servicios e implementar apps.

  • Otorgarle a tu app acceso a servicios de Google Cloud, como Cloud Storage. Todos los servicios de Cloud requieren autenticación y autorización para cada llamada a una API, incluidas las llamadas que se originan en tu aplicación de App Engine.

  • Otorga acceso a los usuarios a los recursos de un proyecto de Cloud. Si bien este caso práctico no es común, puede haber situaciones en las que tu app necesite solicitar acceso a un recurso de Cloud en nombre de un usuario. Por ejemplo, es posible que tu app necesite acceder a datos que pertenecen a los usuarios.

En esta página, se proporciona una descripción general de la configuración del control de acceso en cada caso práctico.

Para obtener información general sobre la forma en que Google Cloud Platform maneja el control de acceso, consulta la descripción general de Cloud Identity and Access Management.

Otorga acceso a los miembros de tu equipo

Para otorgarle acceso a un desarrollador a tu proyecto de Cloud, crea uno de estos dos elementos o ambos:

  • Una cuenta de usuario asociada con una Cuenta de Google, cuyo propósito es representar a una persona específica en tu proyecto

    Se puede usar una cuenta de usuario para autenticar desde las siguientes herramientas:

    • Google Cloud Console
    • Herramientas del SDK de Cloud, como la herramienta de línea de comandos de gcloud
    • IDE y herramientas de compilación que usan componentes del SDK de Cloud para probar e implementar aplicaciones de App Engine
  • Una cuenta de servicio, cuyo propósito no es representar a una persona sino a una aplicación o un proceso. Usa cuentas de servicio en tus procesos automatizados de compilación, de prueba y de implementación, especialmente si varios desarrolladores pueden ejecutar estos procesos.

    Se puede usar una cuenta de servicio para autenticar desde las siguientes herramientas:

Crea una cuenta de usuario

  1. Abre la página IAM en Cloud Console.

    Abrir la página IAM

  2. Haz clic en Seleccionar un proyecto, elige un proyecto y haz clic en Abrir.

  3. Haz clic en Agregar.

  4. Ingresa una dirección de correo electrónico.

  5. Selecciona funciones que otorguen acceso a las características de App Engine.

    Si el usuario también necesita acceder a otros servicios de Cloud, selecciona funciones que otorguen acceso a otros servicios de Cloud.

  6. Haga clic en Save.

El usuario ahora puede acceder a Google Cloud Console y autorizar las herramientas del SDK de Cloud.

También puedes crear cuentas de usuario desde gcloud, la API de REST o las bibliotecas cliente.

Crea una cuenta de servicio

  1. Abre la página Cuentas de servicio en Cloud Console.

    Abrir la página Cuentas de servicio.

  2. Selecciona tu proyecto y haz clic en Abrir.

  3. Haz clic en Crear cuenta de servicio.

  4. Ingresa un nombre de cuenta de servicio (que permita identificarla fácilmente).

  5. Haga clic en Crear.

  6. Selecciona funciones que otorguen acceso a las características de App Engine.

    Si la cuenta de servicio también necesita acceder a otros servicios de Cloud, selecciona funciones que otorguen acceso a otros servicios de Cloud.

  7. Haga clic en Continue.

  8. Si lo deseas, puedes especificar cuentas de usuario con la capacidad de administrar la cuenta de servicio. También puedes especificar cuentas de usuario con la capacidad de usar la cuenta de servicio para acceder indirectamente a todos los recursos a los que tiene acceso la cuenta de servicio.

  9. Haz clic en + Crear clave y sigue las instrucciones para descargar una clave JSON. Almacena el archivo de manera segura, ya que no podrás recuperar la clave si la pierdes.

  10. Haz clic en Listo.

Próximos pasos

Otórgale a tu app acceso a los servicios de Cloud

Cada llamada a un servicio de Cloud debe estar autenticada y autorizada, incluidas las llamadas provenientes de una aplicación de App Engine y destinadas a otros servicios de Cloud, como Cloud Storage.

De forma predeterminada, las llamadas de tu aplicación de App Engine a servicios pertenecientes al mismo proyecto están autorizadas. El flujo predeterminado funciona de la siguiente manera:

  1. Para iniciar llamadas a un servicio de Cloud, tu app crea un objeto cliente que contiene las credenciales y otros datos que tu app necesita para interactuar con el servicio. Si no especificas las credenciales en el constructor del cliente, este busca las credenciales en el entorno de la app.

    A continuación, se muestra un ejemplo de cómo crear un cliente para Cloud Storage:

    Go

    
    // implicit uses Application Default Credentials to authenticate.
    func implicit() {
    	ctx := context.Background()
    
    	// For API packages whose import path is starting with "cloud.google.com/go",
    	// such as cloud.google.com/go/storage in this case, if there are no credentials
    	// provided, the client library will look for credentials in the environment.
    	storageClient, err := storage.NewClient(ctx)
    	if err != nil {
    		log.Fatal(err)
    	}
    
    	it := storageClient.Buckets(ctx, "project-id")
    	for {
    		bucketAttrs, err := it.Next()
    		if err == iterator.Done {
    			break
    		}
    		if err != nil {
    			log.Fatal(err)
    		}
    		fmt.Println(bucketAttrs.Name)
    	}
    
    	// For packages whose import path is starting with "google.golang.org/api",
    	// such as google.golang.org/api/cloudkms/v1, use NewService to create the client.
    	kmsService, err := cloudkms.NewService(ctx)
    	if err != nil {
    		log.Fatal(err)
    	}
    
    	_ = kmsService
    }
    

    Java

    static void authImplicit() {
      // If you don't specify credentials when constructing the client, the client library will
      // look for credentials via the environment variable GOOGLE_APPLICATION_CREDENTIALS.
      Storage storage = StorageOptions.getDefaultInstance().getService();
    
      System.out.println("Buckets:");
      Page<Bucket> buckets = storage.list();
      for (Bucket bucket : buckets.iterateAll()) {
        System.out.println(bucket.toString());
      }
    }

    Node.js

    // Imports the Google Cloud client library.
    const {Storage} = require('@google-cloud/storage');
    
    // Instantiates a client. If you don't specify credentials when constructing
    // the client, the client library will look for credentials in the
    // environment.
    const storage = new Storage();
    
    try {
      // Makes an authenticated API request.
      const results = await storage.getBuckets();
    
      const [buckets] = results;
    
      console.log('Buckets:');
      buckets.forEach((bucket) => {
        console.log(bucket.name);
      });
    } catch (err) {
      console.error('ERROR:', err);
    }

    PHP

    // Imports the Cloud Storage client library.
    use Google\Cloud\Storage\StorageClient;
    
    function auth_cloud_implicit($projectId)
    {
        $config = [
            'projectId' => $projectId,
        ];
    
        # If you don't specify credentials when constructing the client, the
        # client library will look for credentials in the environment.
        $storage = new StorageClient($config);
    
        # Make an authenticated API request (listing storage buckets)
        foreach ($storage->buckets() as $bucket) {
            printf('Bucket: %s' . PHP_EOL, $bucket->name());
        }
    }

    Python

    def implicit():
        from google.cloud import storage
    
        # If you don't specify credentials when constructing the client, the
        # client library will look for credentials in the environment.
        storage_client = storage.Client()
    
        # Make an authenticated API request
        buckets = list(storage_client.list_buckets())
        print(buckets)

    Ruby

    # project_id = "Your Google Cloud project ID"
    
    require "google/cloud/storage"
    
    # If you don't specify credentials when constructing the client, the client
    # library will look for credentials in the environment.
    storage = Google::Cloud::Storage.new project: project_id
    
    # Make an authenticated API request
    storage.buckets.each do |bucket|
      puts bucket.name
    end
  2. De manera predeterminada, el entorno de la app contiene credenciales de la cuenta de servicio predeterminada de App Engine.

    Cuando creas una aplicación de App Engine, Google genera esta cuenta de servicio y le otorga los permisos necesarios para administrar y usar todos los servicios de Cloud de un proyecto de GCP.

Si deseas anular este flujo predeterminado, sigue estos pasos:

  • Configura la variable de entorno GOOGLE_APPLICATION_CREDENTIALS. Si se establece esta variable, los servicios usarán las credenciales especificadas en ella en lugar de la cuenta de servicio predeterminada.

  • Especifica credenciales cuando crees una instancia del objeto Client para un servicio de Cloud. Por ejemplo, si tu app llama a un servicio de Cloud perteneciente a otro proyecto, tal vez tengas que pasar las credenciales manualmente.

Si configuras la variable de entorno GOOGLE_APPLICATION_CREDENTIALS o pasas las credenciales de tu código, te recomendamos que almacenes tus credenciales de una de las siguientes maneras:

  • Almacena tus credenciales en una ubicación segura, como Datastore, y recupéralas en el entorno de ejecución.
  • Mantén las credenciales en tu código, pero encríptalas con un almacén de claves, como Cloud KMS.

Para obtener más información sobre las ventajas de cada uno de estos enfoques, consulta Elige una solución de administración de secretos.

Otórgales a los usuarios acceso a los recursos de Cloud

Si quieres que tu app lea datos de los usuarios desde otros servicios de Google, deberás configurar OAuth 2.0 para aplicaciones de servidor web. Por ejemplo, si deseas extraer datos de un usuario desde Google Drive a fin de importarlos a tu app, utiliza OAuth 2.0 para aplicaciones de servidor web a fin de compartir datos específicos y mantener la privacidad de los otros datos, como nombres de usuario y contraseñas.

Delegación de autoridad de todo el dominio de G Suite

Si tienes un dominio de G Suite, un administrador de este dominio puede autorizar a una aplicación para que acceda a los datos del usuario en nombre de los usuarios del dominio de G Suite. Por ejemplo, una aplicación que utiliza la API del Calendario de Google para agregar eventos a los calendarios de todos los usuarios en un dominio de G Suite utilizará una cuenta de servicio para acceder a la API del Calendario de Google en nombre de los usuarios.

La autorización de una cuenta de servicio para acceder a los datos en nombre de los usuarios en un dominio se conoce como "delegación de la autoridad de todo el dominio" a una cuenta de servicio. Para esto, se utiliza OAuth 2.0 y se requiere que un administrador de dominio de G Suite autorice la delegación de autoridad de todo el dominio a la cuenta de servicio.