Comienza a usar la autenticación

En este artículo se presenta la forma más recomendada de autenticar en una API de Cloud.

La autenticación hace referencia al proceso de determinar la identidad de un cliente. La autorización hace referencia al proceso de determinar qué permisos tiene un cliente autenticado con respecto a un conjunto de recursos. Es decir, la autenticación identifica quién eres y la autorización determina qué puedes hacer.

Para la autenticación, te recomendamos usar una cuenta de servicio: una Cuenta de Google que esté asociada a tu proyecto de GCP, en contraposición a un usuario específico. Las cuentas de servicio se pueden usar en la autenticación sin importar el lugar en el que se ejecute tu código (a nivel local, en Compute Engine, en App Engine, etcétera). Consulta la descripción general de la autenticación para obtener más información sobre otros tipos de autenticación.

Crea una cuenta de servicio

all

Configura la variable de entorno

Debes configurar una variable de entorno si quieres usar una cuenta de servicio.

display_as_tabs

Si configuras la variable de entorno, podrás proporcionar credenciales de tu aplicación por separado, sin tener que cambiar el código para una implementación. Otra alternativa es especificar de manera explícita la ruta de acceso del archivo de claves de la cuenta de servicio en el código. Consulta la guía de producción para obtener más información.

Verifica la autenticación

Después de configurar la variable de entorno, no es necesario que especifiques las credenciales en el código de forma explícita cuando usas una biblioteca cliente de Google Cloud. La biblioteca cliente puede determinar tus credenciales de forma implícita. Por este motivo, puedes verificar que la autenticación funciona si configuras la variable de entorno y, luego, ejecutas el código de la biblioteca cliente como se indica en el siguiente ejemplo. Si la solicitud se realiza de manera exitosa, la autenticación funciona.

Instala la biblioteca cliente de Cloud Storage para ejecutar el siguiente ejemplo.

C#

public object AuthImplicit(string projectId)
    {
        // If you don't specify credentials when constructing the client, the
        // client library will look for credentials in the environment.
        var credential = GoogleCredential.GetApplicationDefault();
        var storage = StorageClient.Create(credential);
        // Make an authenticated API request.
        var buckets = storage.ListBuckets(projectId);
        foreach (var bucket in buckets)
        {
            Console.WriteLine(bucket.Name);
        }
        return null;
    }

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

Próximos pasos