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

Neste documento, descrevemos como substituir a autenticação padrão usada pelo Rust. O Rust autentica automaticamente suas solicitações para os serviços do Google Cloud , mas, às vezes, pode ser necessário modificar as credenciais padrão.

Pré-requisitos

Este guia usa a API Cloud Natural Language. Para instalar essa API, siga o guia de 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 no Google Cloud é usar o Application Default Credentials. Sem qualquer configuração, as bibliotecas de cliente usam esse tipo de credencial por padrão. Consulte Como o Application Default Credentials funciona para saber como configurar esse padrão sem alterações de código no 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 serviços do Google Cloud . O uso de chaves de API pode simplificar o desenvolvimento, porque 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 as 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 Builder 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 como de costume:

    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 que você faça chamadas de API em nome de uma conta de serviço. Usar a identidade temporária de conta de serviço aborda 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 à conta de serviço.

    /// # 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 Builder da conta de serviço representada 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 como de costume:

    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: