Cómo anular el método de autenticación predeterminado

En este documento, se describe cómo anular la autenticación predeterminada que usa Rust. Rust autentica automáticamente tus solicitudes a los servicios de Google Cloud , pero es posible que, en ocasiones, debas anular tus credenciales predeterminadas.

Requisitos previos

En esta guía, se usa la API de Cloud Natural Language. Para instalar esta API, sigue la guía de inicio rápido del servicio, en la que se muestra cómo habilitar un servicio.

Para obtener instrucciones completas sobre la configuración de las bibliotecas de Rust, consulta Cómo comenzar a usar Rust.

Dependencias

Debes declarar las dependencias en tu archivo Cargo.toml:

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

Las credenciales predeterminadas

La forma recomendada de autenticar aplicaciones en Google Cloud es usar credenciales predeterminadas de la aplicación. Las bibliotecas cliente usan este tipo de credenciales de forma predeterminada sin necesidad de configuración. Consulta Cómo funcionan las credenciales predeterminadas de la aplicación para obtener información sobre cómo configurar este valor predeterminado sin realizar cambios en el código de tu aplicación.

  1. Agrega algunas declaraciones de uso para simplificar el resto del ejemplo:

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

  2. Inicializa el cliente con los valores predeterminados:

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

  3. Usa este cliente como de costumbre:

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

Anula las credenciales predeterminadas: claves de API

Las claves de API son cadenas de texto que otorgan acceso a algunos servicios de Google Cloud . El uso de claves de API puede simplificar el desarrollo, ya que requieren menos configuración que otros métodos de autenticación. Existen algunos riesgos asociados con las claves de API, por lo que te recomendamos que leas Prácticas recomendadas para administrar las claves de API si planeas usarlas.

  1. Escribe una función que reciba la cadena de la clave de API como parámetro de entrada:

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

  2. Agrega algunas declaraciones de uso para simplificar el resto del ejemplo:

    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. Usa el compilador de claves de API para crear las credenciales:

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

  4. Inicializa el cliente con el objeto credentials:

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

  5. Y usa este cliente como de costumbre:

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

Anula las credenciales predeterminadas: suplantación de identidad de la cuenta de servicio

La suplantación de identidad de la cuenta de servicio te permite realizar llamadas a la API en nombre de una cuenta de servicio. En Usa la identidad temporal como cuenta de servicio, se analiza esta forma de autenticación en detalle.

Cuando usas la identidad temporal como cuenta de servicio, comienzas con una cuenta principal autenticada (tu cuenta de usuario o una cuenta de servicio) y solicitas credenciales de corta duración para una cuenta de servicio que tiene la autorización que requiere tu caso de uso.

Es más seguro que descargar una clave de cuenta de servicio para la cuenta de servicio de destino, ya que no es necesario conservar las credenciales en el sistema de archivos ni en la memoria.

  1. Escribe el ejemplo en una función que reciba el identificador de la cuenta de servicio como parámetro de entrada. Puede ser el correo electrónico de la cuenta de servicio o el identificador numérico único que Google asignó a la cuenta de servicio.

    /// # 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. Agrega algunas declaraciones de uso para simplificar el resto del ejemplo:

    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. Usa la cuenta de servicio suplantada Builder para crear las credenciales:

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

  4. Inicializa el cliente con el objeto credentials:

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

  5. Y usa este cliente como de costumbre:

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

Más información

Obtén información sobre otros métodos de autenticación en las bibliotecas cliente de Rust: