Primeiros passos na autenticação

Neste artigo, você aprende a maneira recomendada para autenticar uma Cloud API.

Autenticação refere-se ao processo de determinação da identidade de um cliente. Autorização refere-se ao processo de determinação das permissões que um cliente autenticado tem em um conjunto de recursos. Ou seja, a autenticação identifica quem você é e a autorização determina o que você pode fazer.

Para autenticação, em vez de um usuário específico, recomendamos usar uma conta de serviço, uma Conta do Google associada ao seu projeto do GCP. As contas de serviço são usadas para autenticação, independentemente do local em que seu código é executado, por exemplo, localmente, no Compute Engine, no App Engine etc. Para mais informações sobre outros tipos de autenticação, consulte a visão geral de autenticação.

Como criar uma conta de serviço

Console do GCP

  1. No Console do GCP, navegue até a página Criar chave da conta de serviço.

  2. No menu suspenso Conta de serviço, selecione Nova conta de serviço.

  3. Insira um nome no campo do formulário Nome da conta de serviço.

  4. No menu suspenso Papel, selecione Projeto > Proprietário.

  5. Clique no botão Criar. O download de um arquivo JSON que contém sua chave é feito no computador.

Gcloud

Os comandos a seguir são executados com o Google Cloud SDK em sua máquina local ou no Cloud Shell.

  1. Crie a conta do serviço. Substitua [NAME] por um nome de conta de serviço.

    gcloud iam service-accounts create [NAME]

  2. Conceda permissões à conta de serviço. Substitua [NAME] pelo nome da conta de serviço da etapa anterior e [PROJECT_ID] pelo código do projeto.

    gcloud projects add-iam-policy-binding [PROJECT_ID] \
      --member "serviceAccount:[NAME]@[PROJECT_ID].iam.gserviceaccount.com" \
      --role "roles/owner"`

  3. Gere o arquivo de chave. O comando a seguir cria um arquivo chamado service-account.json no seu diretório de trabalho atual. Substitua [NAME] pelo nome da conta de serviço da etapa anterior e [PROJECT_ID] pelo código do projeto.

    gcloud iam service-accounts keys create service-account.json \
      --iam-account [NAME]@[PROJECT_ID].iam.gserviceaccount.com`

Como configurar a variável de ambiente

Para fornecer as credenciais ao código do aplicativo, configure a variável de ambiente GOOGLE_APPLICATION_CREDENTIALS. Substitua [PATH] pelo local do arquivo JSON em que o download da etapa anterior foi feito.

Linux ou Mac OS X

export GOOGLE_APPLICATION_CREDENTIALS="[PATH]"

Por exemplo:

export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/service-account-file.json"

Windows

Com Powershell:

$env:GOOGLE_APPLICATION_CREDENTIALS="[PATH]"

Por exemplo:

$env:GOOGLE_APPLICATION_CREDENTIALS="C:\Users\username\Downloads\service-account-file.json"

Com linha de comando:

set GOOGLE_APPLICATION_CREDENTIALS=[PATH]

Com a configuração da variável de ambiente, você fornece credenciais separadamente do seu aplicativo, sem alterar o código do aplicativo na implantação. Como alternativa, especifique explicitamente o caminho para o arquivo de chave da conta do serviço em seu código. Para mais informações, consulte o guia de produção.

Como verificar autenticação

Após configurar a variável de ambiente, não é necessário especificar de modo explícito as credenciais no código ao utilizar uma Biblioteca de cliente do Google Cloud. A biblioteca de cliente determina suas credenciais de modo implícito. Por esse motivo, para verificar o funcionamento da autenticação, configure a variável de ambiente e execute o código da biblioteca de cliente, conforme demonstrado no exemplo a seguir. Se a solicitação for bem-sucedida, isso significa que a autenticação funcionará.

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 storage = StorageClient.Create();
    // Make an authenticated API request.
    var buckets = storage.ListBuckets(projectId);
    foreach (var bucket in buckets)
    {
        Console.WriteLine(bucket.Name);
    }
    return null;
}

Go

// 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 the
// golang.org/x/oauth2/google package as shown below.
oauthClient, err := google.DefaultClient(ctx, cloudkms.CloudPlatformScope)
if err != nil {
	log.Fatal(err)
}

kmsService, err := cloudkms.New(oauthClient)
if err != nil {
	log.Fatal(err)
}

Java

// If you don't specify credentials when constructing the client, the
// client library will look for credentials in the environment.

Storage storage = StorageOptions.getDefaultInstance().getService();

Page<Bucket> buckets = storage.list();
for (Bucket bucket : buckets.iterateAll()) {
  // do something with the info
}

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 = Storage();

// Makes an authenticated API request.
storage
  .getBuckets()
  .then((results) => {
    const buckets = results[0];

    console.log('Buckets:');
    buckets.forEach((bucket) => {
      console.log(bucket.name);
    });
  })
  .catch((err) => {
    console.error('ERROR:', err);
  });

PHP

namespace Google\Cloud\Samples\Auth;

// Imports the Google 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óximas etapas

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…