デフォルトの認証方法をオーバーライドする

このドキュメントでは、Rust で使用されるデフォルトの認証をオーバーライドする方法について説明します。Rust は Google Cloud サービスに対するリクエストを自動的に認証しますが、デフォルトの認証情報をオーバーライドする必要がある場合があります。

前提条件

このガイドでは、Cloud Natural Language API を使用します。この API をインストールするには、サービスのクイックスタートに沿って操作します。このクイックスタートでは、サービスを有効にする方法について説明しています。

Rust ライブラリの完全な設定手順については、Rust を使ってみるをご覧ください。

依存関係

Cargo.toml ファイルで依存関係を宣言する必要があります。

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

デフォルトの認証情報

Google Cloud でアプリケーションを認証するには、アプリケーションのデフォルト認証情報を使用することをおすすめします。クライアント ライブラリは、構成なしでこの認証情報タイプをデフォルトで使用します。アプリケーションのコードを変更せずにこのデフォルトを構成する方法については、アプリケーションのデフォルト認証情報の仕組みをご覧ください。

  1. 残りの例を簡略化するために、use 宣言を追加します。

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

  2. デフォルトを使用してクライアントを初期化します。

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

  3. このクライアントは通常どおり使用します。

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

デフォルトの認証情報をオーバーライドする: API キー

API キーは、一部の Google Cloud サービスへのアクセスを許可するテキスト文字列です。API キーを使用すると、他の認証方法よりも構成が少なくて済むため、開発が簡素化される可能性があります。API キーにはいくつかのリスクが伴います。API キーを使用する場合は、API キーの管理に関するベスト プラクティスをお読みになることをおすすめします。

  1. API キーの文字列を入力パラメータとして受け取る関数を作成します。

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

  2. いくつかの use 宣言を追加して、残りの例を簡略化します。

    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. API キー Builder を使用して認証情報を作成します。

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

  4. credentials オブジェクトを使用してクライアントを初期化します。

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

  5. このクライアントを通常どおりに使用します。

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

デフォルトの認証情報をオーバーライドする: サービス アカウントの権限借用

サービス アカウントの権限借用を使用すると、サービス アカウントの代わりに API 呼び出しを行うことができます。サービス アカウントの権限借用を使用するでは、この形式の認証について詳しく説明しています。

サービス アカウントの権限借用を使用するには、認証されたプリンシパル(ユーザー アカウントまたはサービス アカウント)から始めて、ユースケースに必要な権限を持つサービス アカウントの有効期間の短い認証情報をリクエストします。

認証情報をファイル システムやメモリに保持する必要がないため、ターゲット サービス アカウントのサービス アカウント キーをダウンロードするよりも安全です。

  1. サービス アカウント識別子を入力パラメータとして受け取る関数で例を記述します。これは、サービス アカウントのメールアドレスか、Google が割り当てたサービス アカウントの一意の数値 ID になります。

    /// # 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. いくつかの use 宣言を追加して、残りの例を簡略化します。

    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. 権限を借用したサービス アカウント Builder を使用して、認証情報を作成します。

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

  4. credentials オブジェクトを使用してクライアントを初期化します。

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

  5. このクライアントを通常どおりに使用します。

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

より詳しく

Rust クライアント ライブラリのその他の認証方法について学習する。