Substituir o método de autenticação padrão

Este documento descreve como substituir a autenticação padrão usada pelo Rust. O Rust autentica automaticamente suas solicitações aos Google Cloud serviços, mas, ocasionalmente, talvez seja necessário substituir suas credenciais padrão.

Pré-requisitos

Este guia usa a API Cloud Natural Language. Para instalar essa API, siga o início rápido do serviço, que mostra como ativar um serviço.

Para instruções completas de configuração das bibliotecas do Rust, consulte Introdução ao Rust.

Dependências

É necessário declarar as dependências no arquivo Cargo.toml:

cargo add google-cloud-language-v2 google-cloud-auth

As credenciais padrão

A maneira recomendada de autenticar aplicativos em Google Cloud é usar o Application Default Credentials. Sem nenhuma configuração, as bibliotecas de cliente são definidas como padrão para esse tipo de credencial. Consulte Como o Application Default Credentials funciona para saber como configurar esse padrão sem fazer mudanças no código do aplicativo.

  1. Adicione algumas declarações de uso para simplificar o restante do exemplo:

    use google_cloud_language_v2::client::LanguageService;
    use google_cloud_language_v2::model::{Document, document::Type};

  2. Inicialize o cliente usando os padrões:

    let client = LanguageService::builder().build().await?;

  3. Use esse cliente normalmente:

    let response = client
        .analyze_sentiment()
        .set_document(
            Document::new()
                .set_content("Hello World!")
                .set_type(Type::PlainText),
        )
        .send()
        .await?;
    println!("response={response:?}");

Substituir as credenciais padrão: chaves de API

As chaves de API são strings de texto que concedem acesso a alguns Google Cloud serviços. O uso de chaves de API pode simplificar o desenvolvimento, já que elas exigem menos configuração do que outros métodos de autenticação. Há alguns riscos associados às chaves de API, recomendamos que você leia Práticas recomendadas para gerenciar chaves de API se planeja usá-las.

  1. Escreva uma função que receba a string da chave de API como um parâmetro de entrada:

    pub async fn sample(key: &str) -> anyhow::Result<()> {

  2. Adicione algumas declarações de uso para simplificar o restante do exemplo:

    use google_cloud_auth::credentials::api_key_credentials::Builder as ApiKeyCredentialsBuilder;
    use google_cloud_language_v2::client::LanguageService;
    use google_cloud_language_v2::model::{Document, document::Type};

  3. Use o criador de chaves de API para criar as credenciais:

    let credentials = ApiKeyCredentialsBuilder::new(key).build();

  4. Inicialize o cliente usando o objeto credentials:

    let client = LanguageService::builder()
        .with_credentials(credentials)
        .build()
        .await?;

  5. E use esse cliente normalmente:

    let response = client
        .analyze_sentiment()
        .set_document(
            Document::new()
                .set_content("Hello World!")
                .set_type(Type::PlainText),
        )
        .send()
        .await?;
    println!("response={response:?}");

Substituir as credenciais padrão: identidade temporária de conta de serviço

A identidade temporária de conta de serviço permite fazer chamadas de API em nome de uma conta de serviço. Usar a identidade temporária de conta de serviço discute essa forma de autenticação em detalhes.

Ao usar a identidade temporária de conta de serviço, você começa com um principal autenticado (sua conta de usuário ou uma conta de serviço) e solicita credenciais de curta duração para uma conta de serviço que tenha a autorização exigida pelo seu caso de uso.

É mais seguro do que fazer o download de uma chave de conta de serviço para a conta de serviço de destino, já que não é necessário manter as credenciais no sistema de arquivos ou mesmo na memória.

  1. Escreva o exemplo em uma função que receba o identificador da conta de serviço como um parâmetro de entrada. Pode ser o e-mail da conta de serviço ou o identificador numérico exclusivo atribuído pelo Google.

    /// # Parameters
    /// * `target_principal`: the email or unique id of the target service account.
    ///   For example: `my-service-account@my-project.iam.gserviceaccount.com`.
    pub async fn sample(target_principal: &str) -> anyhow::Result<()> {

  2. Adicione algumas declarações de uso para simplificar o restante do exemplo:

    use google_cloud_auth::credentials::Builder as AdcCredentialsBuilder;
    use google_cloud_auth::credentials::impersonated::Builder as ImpersonatedCredentialsBuilder;
    use google_cloud_language_v2::client::LanguageService;
    use google_cloud_language_v2::model::{Document, document::Type};

  3. Use o criador de conta de serviço representadas Builder para criar as credenciais:

    let credentials = ImpersonatedCredentialsBuilder::from_source_credentials(
        AdcCredentialsBuilder::default().build()?,
    )
    .with_target_principal(target_principal)
    .build()?;

  4. Inicialize o cliente usando o objeto credentials:

    let client = LanguageService::builder()
        .with_credentials(credentials)
        .build()
        .await?;

  5. E use esse cliente normalmente:

    let response = client
        .analyze_sentiment()
        .set_document(
            Document::new()
                .set_content("Hello World!")
                .set_type(Type::PlainText),
        )
        .send()
        .await?;
    println!("response={response:?}");

Mais informações

Saiba mais sobre outros métodos de autenticação nas bibliotecas de cliente do Rust: