有効期間が短いサービス アカウント認証情報の作成

このページでは、サービス アカウント ID を使用するための有効期間が短いサービス アカウント認証情報を作成する方法を説明します。

サービス アカウントは、有効期間が短い認証情報を使用して、Google Cloud APIs やその他の Google 以外の API への呼び出しを認証できます。有効期間が短い認証情報の存続期間は限られており、その期間は数時間未満です。有効期間が短いサービス アカウント認証情報は、信頼できるサービス アカウントのリソースへのアクセスを制限する必要がある場合に便利です。また、サービス アカウントキーなどの長期間有効な認証情報よりもリスクが低くなります。

サポートされている認証情報タイプには、OAuth 2.0 アクセス トークン、OpenID Connect ID トークン、自己署名 JSON ウェブトークン(JWT)、自己署名バイナリ オブジェクト(BLOB)などがあります。OAuth 2.0 アクセス トークンOpenID Connect(OIDC)ID トークンが、特によく使用されるタイプの認証情報です。いくつかのサンプル事例としては、次のようなものがあります。

  • OAuth 2.0 アクセス トークン: OAuth 2.0 アクセス トークンは、サービス アカウントから Google Cloud APIs へのアクセスを認証するのに便利です。たとえば、サービス アカウントに属する OAuth 2.0 アクセス トークンを作成しておくことで、サービス管理者はそのサービス アカウントを使用して Google Cloud APIs を呼び出し、プロジェクトで昇格した権限を取得することが可能になります。トークンの有効期間は短いため、昇格した権限は一時的なものです。有効期間の短いトークンを使用することにより、ID とリソース間で最小権限の原則を実装しやすくなります。また、本番環境で緊急事態が発生し、サービス管理者がデバッグのために有効期間が短い昇格した承認を必要とする場合に便利です。

  • OIDC ID トークン: An OIDC ID トークンは、OpenID Connect を認可するサービスに対するサービス アカウント ID の認証に便利です。たとえば、サービス アカウントに属する OIDC ID トークンを作成しておくことで、Google Cloud で実行されるサービスが、サードパーティ プロバイダにデプロイされているその他のサービス(データ パイプライン ジョブなど)で自身の認証を行うことができるようになります。ターゲット サービスが OIDC で構成されている場合、認証は成功します。

始める前に

サービス アカウントの作成

開始するには、新しいサービス アカウントを作成します。

必要な権限の付与

呼び出し元がサービス アカウントの有効期間が短い認証情報を作成するには、2 つの異なるフローがあります。各フローには適切な権限が必要です。

  • 直接リクエスト: 呼び出し元は Google アカウントまたはサービス アカウントのいずれかとして認証され、有効期間が短い認証情報の作成を直接リクエストします。このフローには、呼び出し元と認証情報が作成されるサービス アカウントの 2 つの ID が含まれます。
  • 委任リクエスト: 呼び出し元は直接リクエスト フローの場合と同じように Google アカウントまたはサービス アカウントのいずれかとして認証されますが、リクエストは委任チェーン内の 1 つ以上のサービス アカウントに委任されます。このフローでは、複数のサービス アカウントが、元の呼び出し元と認証情報が作成されるサービス アカウントの間の仲介役として機能します。委任チェーン内の各サービス アカウントには、リクエストを渡すための権限が必要です。

    このフローが役立つのは、プロジェクト内に権限が制限された複数のサービス アカウントが何層にも重なっていて、各サービス アカウントが、特定のリソースに対して特定の機能や限定された機能を行うように構成されている場合です。たとえば、あるサービス アカウントには Cloud Storage リソースに対する権限のみが付与されており、別のサービス アカウントには Compute Engine リソースに対する権限のみが付与されている、というような場合です。サービス アカウント同士でリクエストの委任が正しく行われるようにするには、各サービス アカウントが委任チェーンの一覧に含まれていなければなりません。

直接リクエストの権限

このページの必要な権限の付与で説明されているように、直接リクエストには呼び出し元と認証情報が作成されるサービス アカウントのみが含まれます。このフローに次の ID があるとします。

  • サービス アカウント 1(SA_1): 有効期間が短い認証情報のリクエストを発行する呼び出し元。
  • サービス アカウント 2(SA_2): 認証情報が作成される権限を制限したアカウント。

有効期間が短い認証情報を作成する権限を SA_1 に付与するには、SA_2 でサービス アカウント トークン作成者のロール(roles/iam.serviceAccountTokenCreator)を付与します。これは、リソースとして扱われる SA_2 サービス アカウントの例です。SA_2 にロールを付与する場合は、他のリソースを更新する場合と同様に許可ポリシーを更新します。

次の手順では、REST API を使用してロールを付与します。Cloud Console または gcloud CLI も使用できます。

API

最初に SA_2 の許可ポリシーを読み取ります。

serviceAccounts.getIamPolicy メソッドで、サービス アカウントの許可ポリシーを取得します。

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_ID: Google Cloud プロジェクト ID。プロジェクト ID は英数字からなる文字列です(例: my-project)。
  • SA_2: サービス アカウント 2 の名前。
  • POLICY_VERSION: 返されるポリシー バージョン。リクエストでは、最新のポリシー バージョン(ポリシー バージョン 3)を指定する必要があります。詳細については、ポリシーの取得時にポリシー バージョンを指定するをご覧ください。

HTTP メソッドと URL:

POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_2@PROJECT_ID.iam.gserviceaccount.com:getIamPolicy

JSON 本文のリクエスト:

{
  "options": {
    "requestedPolicyVersion": POLICY_VERSION
  }
}

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

{
  "version": 1,
  "etag": "BwWKmjvelug=",
  "bindings": [
    {
      "role": "roles/serviceAccountAdmin",
      "members": [
        "user:admin@example.com"
      ]
    }
  ]
}

サービス アカウントにロールを割り当てていない場合、レスポンスには etag 値のみが含まれます。この etag 値を次のステップに含めます。

次に、許可ポリシーを変更して SA_1 にサービス アカウント トークン作成者のロールroles/iam.serviceAccountTokenCreator)を付与します。

たとえば、前の手順のサンプル レスポンスを変更するには、次のコードを追加します。

{
  "version": 1,
  "etag": "BwWKmjvelug=",
  "bindings": [
    {
      "role": "roles/serviceAccountAdmin",
      "members": [
        "user:admin@example.com"
      ]
    },
    {
      "role": "roles/iam.serviceAccountTokenCreator",
      "members": [
        "serviceAccount:SA_1@PROJECT_ID.iam.gserviceaccount.com"
      ]
    }
  ]
}

最後に、更新された許可ポリシーを記述します。

serviceAccounts.setIamPolicy メソッドは、サービス アカウントの更新済み許可ポリシーを設定します。

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_ID: Google Cloud プロジェクト ID。プロジェクト ID は英数字からなる文字列です(例: my-project)。
  • SA_2: サービス アカウント 2 の名前。
  • POLICY: 設定するポリシーの JSON 表現。ポリシーの形式については、ポリシー リファレンスをご覧ください。

    たとえば、前の手順で示した許可ポリシーを設定するには、POLICY を次のコードに置き換えます。

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:admin@example.com"
          ]
        },
        {
          "role": "roles/iam.serviceAccountTokenCreator",
          "members": [
            "serviceAccount:SA_1@PROJECT_ID.iam.gserviceaccount.com"
          ]
        }
      ]
    }
    

HTTP メソッドと URL:

POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_2@PROJECT_ID.iam.gserviceaccount.com:setIamPolicy

JSON 本文のリクエスト:

{
  "policy": POLICY
}

リクエストを送信するには、次のいずれかのオプションを展開します。

レスポンスには、更新された許可ポリシーが含まれます。

委任リクエストの権限

このページの必要な権限の付与で説明したように、委任されたリクエストには、呼び出し元、委任チェーン内の 1 つ以上のサービス アカウント、最後にサービス アカウントという 3 つ以上の ID が含まれます。このフローに次の ID があるとします。

  • サービス アカウント 1(SA_1): 有効期間が短い認証情報のリクエストを発行する呼び出し元。
  • サービス アカウント 2(SA_2): 最初のリクエストを SA_3 に委任する中間サービス アカウント。
  • サービス アカウント 3(SA_3): 認証情報が作成される権限が制限されたアカウント。

委任を許可するには、各アカウントでチェーン内の前のアカウントにサービス アカウント トークン作成者のロール(roles/iam.serviceAccountTokenCreator)を付与する必要があります。

この例では、SA_1SA_2 のサービス アカウント トークン作成者のロール(roles/iam.serviceAccountTokenCreator)を付与する必要があります。これは、リソースとして扱われる SA_2 サービス アカウントの例です。SA_2 にロールを付与する場合は、他のリソースを更新する場合と同様に許可ポリシーを更新します。

このフローの例では、仲介サービス アカウントは 1 つだけです。複数のサービス アカウントを介してアクセスを委任するには、チェーン内のその他のサービス アカウントにもこのロールを割り当てる必要があります。

次に、SA_2 には SA_3 のサービス アカウント トークン作成者のロール(roles/iam.serviceAccountTokenCreator)も付与する必要があります。これにより、SA_2SA_3 の有効期間が短い認証情報を作成できます。

次の手順では、REST API を使用してロールを付与します。Cloud Console または gcloud CLI も使用できます。

API

まず、SA_2(仲介サービス アカウント)の許可ポリシーを取得します。

serviceAccounts.getIamPolicy メソッドで、サービス アカウントの許可ポリシーを取得します。

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_ID: Google Cloud プロジェクト ID。プロジェクト ID は英数字からなる文字列です(例: my-project)。
  • SA_2: サービス アカウント 2 の名前。
  • POLICY_VERSION: 返されるポリシー バージョン。リクエストでは、最新のポリシー バージョン(ポリシー バージョン 3)を指定する必要があります。詳細については、ポリシーの取得時にポリシー バージョンを指定するをご覧ください。

HTTP メソッドと URL:

POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_2@PROJECT_ID.iam.gserviceaccount.com:getIamPolicy

JSON 本文のリクエスト:

{
  "options": {
    "requestedPolicyVersion": POLICY_VERSION
  }
}

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

{
  "version": 1,
  "etag": "BwWKmjvelug=",
  "bindings": [
    {
      "role": "roles/serviceAccountAdmin",
      "members": [
        "user:admin@example.com"
      ]
    }
  ]
}

サービス アカウントにロールを付与していない場合、レスポンスには etag 値のみが含まれます。この etag 値を次のステップに含めます。

次に、許可ポリシーを変更して SA_1 にサービス アカウント トークン作成者のロールroles/iam.serviceAccountTokenCreator)を付与します。

たとえば、前の手順のサンプル レスポンスを変更するには、次のコードを追加します。

{
  "version": 1,
  "etag": "BwWKmjvelug=",
  "bindings": [
    {
      "role": "roles/serviceAccountAdmin",
      "members": [
        "user:admin@example.com"
      ]
    },
    {
      "role": "roles/iam.serviceAccountTokenCreator",
      "members": [
        "serviceAccount:SA_1@PROJECT_ID.iam.gserviceaccount.com"
      ]
    }
  ]
}

次に、更新された SA_2 の許可ポリシーを記述します。

serviceAccounts.setIamPolicy メソッドは、サービス アカウントの更新済み許可ポリシーを設定します。

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_ID: Google Cloud プロジェクト ID。プロジェクト ID は英数字からなる文字列です(例: my-project)。
  • SA_2: サービス アカウント 2 の名前。
  • POLICY: 設定するポリシーの JSON 表現。ポリシーの形式については、ポリシー リファレンスをご覧ください。

    たとえば、前の手順で示した許可ポリシーを設定するには、POLICY を次のコードに置き換えます。

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:admin@example.com"
          ]
        },
        {
          "role": "roles/iam.serviceAccountTokenCreator",
          "members": [
            "serviceAccount:SA_1@PROJECT_ID.iam.gserviceaccount.com"
          ]
        }
      ]
    }
    

HTTP メソッドと URL:

POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_2@PROJECT_ID.iam.gserviceaccount.com:setIamPolicy

JSON 本文のリクエスト:

{
  "policy": POLICY
}

リクエストを送信するには、次のいずれかのオプションを展開します。

レスポンスには、更新された許可ポリシーが含まれます。

次に、SA_3(認証情報が作成されるサービス アカウント)の許可ポリシーを取得します。

serviceAccounts.getIamPolicy メソッドで、サービス アカウントの許可ポリシーを取得します。

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_ID: Google Cloud プロジェクト ID。プロジェクト ID は英数字からなる文字列です(例: my-project)。
  • SA_3: サービス アカウント 3 の名前。
  • POLICY_VERSION: 返されるポリシー バージョン。リクエストでは、最新のポリシー バージョン(ポリシー バージョン 3)を指定する必要があります。詳細については、ポリシーの取得時にポリシー バージョンを指定するをご覧ください。

HTTP メソッドと URL:

POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_3@PROJECT_ID.iam.gserviceaccount.com:getIamPolicy

JSON 本文のリクエスト:

{
  "options": {
    "requestedPolicyVersion": POLICY_VERSION
  }
}

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

{
  "version": 1,
  "etag": "BwWKmjvelug=",
  "bindings": [
    {
      "role": "roles/serviceAccountAdmin",
      "members": [
        "user:admin@example.com"
      ]
    }
  ]
}

サービス アカウントにロールを割り当てていない場合、レスポンスには etag 値のみが含まれます。この etag 値を次のステップに含めます。

次に、許可ポリシーを変更して SA_2 にサービス アカウント トークン作成者のロールroles/iam.serviceAccountTokenCreator)を付与します。

たとえば、前の手順のサンプル レスポンスを変更するには、次のコードを追加します。

{
  "version": 1,
  "etag": "BwWKmjvelug=",
  "bindings": [
    {
      "role": "roles/serviceAccountAdmin",
      "members": [
        "user:admin@example.com"
      ]
    },
    {
      "role": "roles/iam.serviceAccountTokenCreator",
      "members": [
        "serviceAccount:SA_2@PROJECT_ID.iam.gserviceaccount.com"
      ]
    }
  ]
}

最後に、更新された許可ポリシーを記述します。

serviceAccounts.setIamPolicy メソッドは、サービス アカウントの更新済み許可ポリシーを設定します。

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_ID: Google Cloud プロジェクト ID。プロジェクト ID は英数字からなる文字列です(例: my-project)。
  • SA_3: サービス アカウント 3 の名前。
  • POLICY: 設定するポリシーの JSON 表現。ポリシーの形式については、ポリシー リファレンスをご覧ください。

    たとえば、前の手順で示した許可ポリシーを設定するには、POLICY を次のコードに置き換えます。

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:admin@example.com"
          ]
        },
        {
          "role": "roles/iam.serviceAccountTokenCreator",
          "members": [
            "serviceAccount:SA_2@PROJECT_ID.iam.gserviceaccount.com"
          ]
        }
      ]
    }
    

HTTP メソッドと URL:

POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_3@PROJECT_ID.iam.gserviceaccount.com:setIamPolicy

JSON 本文のリクエスト:

{
  "policy": POLICY
}

リクエストを送信するには、次のいずれかのオプションを展開します。

レスポンスには、更新された許可ポリシーが含まれます。

有効期間が短い認証情報のリクエスト

各 ID に適切なロールを付与した後、目的のサービス アカウントの有効期間が短い認証情報をリクエストできます。サポートされている認証情報タイプは、次のとおりです。

これらのリクエストの委任チェーンを指定する方法については、このページの委任チェーンの指定をご覧ください。

OAuth 2.0 アクセス トークンの生成

デフォルトでは、OAuth 2.0 アクセス トークンは最大 1 時間(3,600 秒)有効です。ただし、これらのトークンの最大有効期間は 12 時間(43,200 秒)まで延長できます。これを行うには、トークンの有効時間を延長する必要があるサービス アカウントを指定して、constraints/iam.allowServiceAccountCredentialLifetimeExtension リスト型制約が含まれる組織のポリシーに、指定したサービス アカウントを追加します。そうすると、それらのサービス アカウント用にトークンを作成するときに最大 43,200 秒の有効期間を指定できます。

サービス アカウントの OAuth 2.0 アクセス トークンを生成するには、次の手順に従います。

API

Service Account Credentials API の serviceAccounts.generateAccessToken メソッドによって、サービス アカウントの OAuth 2.0 アクセス トークンが生成されます。

リクエストのデータを使用する前に、次のように置き換えます。

  • SA_NAME: トークンを作成するサービス アカウントの名前。
  • PROJECT_ID: Google Cloud プロジェクト ID。プロジェクト ID は英数字からなる文字列です(例: my-project)。
  • DELEGATES: 委任されたリクエスト フローを使用している場合は、このページの委任チェーンの指定をご覧ください。委任がない直接リクエスト フローを使用している場合は、リクエスト本文の delegates フィールドを省略します。
  • LIFETIME: アクセス トークンが期限切れになるまでの秒数。例: 300s

    デフォルトでは、トークンの最大有効期間は 1 時間(3,600 秒)です。これらのトークンの最大有効期間を 12 時間(43,200 秒)まで延長するには、constraints/iam.allowServiceAccountCredentialLifetimeExtension リスト型制約が含まれる組織のポリシーにサービス アカウントを追加します。

HTTP メソッドと URL:

POST https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/SA_NAME@PROJECT_ID.iam.gserviceaccount.com:generateAccessToken

JSON 本文のリクエスト:

{
  "delegates": [
    DELEGATES
  ],
  "scope": [
    "https://www.googleapis.com/auth/cloud-platform"
  ],
  "lifetime": "LIFETIME"
}

リクエストを送信するには、次のいずれかのオプションを展開します。

generateAccessToken リクエストが成功した場合、レスポンスの本文には OAuth 2.0 アクセス トークンと有効期限が含まれます。expireTime に達するまで、サービス アカウントの代わりに accessToken をリクエストの認証に使用できます。

{
  "accessToken": "eyJ0eXAi...NiJ9",
  "expireTime": "2020-04-07T15:01:23.045123456Z"
}

OpenID Connect ID トークンの生成

OpenID Conect ID トークンは、1 時間(3,600 秒間)有効です。サービス アカウントの ID トークンを生成するには、次の手順に従います。

API

Service Account Credentials API の serviceAccounts.generateIdToken メソッドによって、サービス アカウントの OpenID Connect ID トークンが生成されます。

リクエストのデータを使用する前に、次のように置き換えます。

  • SA_NAME: トークンを作成するサービス アカウントの名前。
  • PROJECT_ID: Google Cloud プロジェクト ID。プロジェクト ID は英数字からなる文字列です(例: my-project)。
  • AUDIENCE_NAME: トークンのオーディエンス。通常は、トークンのアクセスに使用されるアプリケーションまたはサービスの URL です。

HTTP メソッドと URL:

POST https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/SA_NAME@PROJECT_ID.iam.gserviceaccount.com:generateIdToken

JSON 本文のリクエスト:

{
  "audience": "AUDIENCE_NAME",
  "includeEmail": "true"
}

リクエストを送信するには、次のいずれかのオプションを展開します。

generateId リクエストが成功した場合、レスポンス本文には 1 時間有効な ID トークンが含まれます。サービス アカウントの代わりに token をリクエストの認証に使用できます。

{
  "token": "eyJ0eXAi...NiJ9"
}

自己署名 JSON ウェブトークン(JWT)の作成

自己署名 JSON ウェブトークン(JWT)は、次のようなさまざまなシナリオにおいて有用です。

  • Google の認証ガイドに従って Google API の呼び出しを認証する。
  • App Engine アプリケーションなど、Google Cloud または Google 以外のサービス間で安全に通信する。このシナリオでは、1 つのアプリケーションが、認証目的で別のアプリケーションによって確認できるトークンに署名できます。
  • ユーザー、アカウント、デバイスに関する任意のクレームを含む JWT に署名することにより、サービス アカウントを ID プロバイダとして扱う。

サービス アカウントの自己署名 JWT を生成するには、次の手順を行います。

API

Service Account Credentials API の serviceAccounts.signJwt メソッドでは、サービス アカウントのシステムで管理する秘密鍵を使用して JWT に署名します。

リクエストのデータを使用する前に、次のように置き換えます。

  • SA_NAME: トークンを作成するサービス アカウントの名前。
  • PROJECT_ID: Google Cloud プロジェクト ID。プロジェクト ID は英数字からなる文字列です(例: my-project)。
  • DELEGATES: 委任されたリクエスト フローを使用している場合は、このページの委任チェーンの指定をご覧ください。委任がない直接リクエスト フローを使用している場合は、リクエスト本文の delegates フィールドを省略します。
  • JWT_PAYLOAD: 署名する JWT ペイロード。これは JWT クレームセットを含む JSON オブジェクトです。ご希望のユースケースに必要なクレームを含め、呼び出すサービスの検証要件を満たしてください。Google API を呼び出す場合は、クレーム要件について Google の認証ガイドをご覧ください。

    exp(有効期限)クレームは、今後 12 時間以内にする必要があります。Google API を呼び出す場合は、exp クレームは 1 時間以内に設定する必要があります。

    次の例のペイロードには、Google API を呼び出すクレームが含まれています。ここで、EXP は有効期限を表す整数タイムスタンプです。

    { \"iss\": \"SA_NAME@PROJECT_ID.iam.gserviceaccount.com\", \"sub\": \"SA_NAME@PROJECT_ID.iam.gserviceaccount.com\", \"aud\": \"https://firestore.googleapis.com/\", \"iat\": 1529350000, \"exp\": EXP }

HTTP メソッドと URL:

POST https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/SA_NAME@PROJECT_ID.iam.gserviceaccount.com:signJwt

JSON 本文のリクエスト:

{
  "delegates": [
    DELEGATES
  ],
  "payload": "JWT_PAYLOAD"
}

リクエストを送信するには、次のいずれかのオプションを展開します。

signJwt リクエストが成功した場合、レスポンスの本文には、署名付きの JWT と JWT の署名に使用された署名鍵 ID が含まれています。サービス アカウントの代わりに、signedJwt 値を署名なしトークンとして使用してリクエストを直接認証できます。トークンは、リクエストで指定された有効期限まで有効です。

{
  "keyId": "42ba1e...fc0a",
  "signedJwt": "eyJ0eXAi...NiJ9"
}

自己署名 blob の作成

自己署名 blob は、通常は認証目的で任意のバイナリデータを安全に送信する必要がある場合に便利です。たとえば、カスタム プロトコル / トークンタイプ(JWT ではなく)を使用する場合は、ダウンストリーム サービスで使用するためにそのデータを署名付き blob に含めることができます。

サービス アカウントの自己署名 blob を生成するには、次の手順に沿って操作します。

API

Service Account Credentials API の serviceAccounts.signBlob メソッドでは、サービス アカウントのシステムで管理する秘密鍵を使用して blob に署名します。

リクエストのデータを使用する前に、次のように置き換えます。

  • SA_NAME: トークンを作成するサービス アカウントの名前。
  • PROJECT_ID: Google Cloud プロジェクト ID。プロジェクト ID は英数字からなる文字列です(例: my-project)。
  • DELEGATES: 委任されたリクエスト フローを使用している場合は、このページの委任チェーンの指定をご覧ください。委任がない直接リクエスト フローを使用している場合は、リクエスト本文の delegates フィールドを省略します。
  • BLOB_PAYLOAD: base64 でエンコードされたバイトの文字列。例: VGhlIHF1aWNrIGJyb3duIGZveCBqdW1wZWQgb3ZlciB0aGUgbGF6eSBkb2cu

HTTP メソッドと URL:

POST https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/SA_NAME@PROJECT_ID.iam.gserviceaccount.com:signBlob

JSON 本文のリクエスト:

{
  "delegates": [
    DELEGATES
  ],
  "payload": "BLOB_PAYLOAD"
}

リクエストを送信するには、次のいずれかのオプションを展開します。

signBlob リクエストが成功した場合、レスポンスの本文には、署名 blob と blob の署名に使用された署名鍵 ID が含まれています。サービス アカウントの代わりに、signedBlob 値を署名なしトークンとして使用してリクエストを直接認証できます。トークンは、サービス アカウントのシステムで管理する秘密鍵が期限切れになるまで有効です。この鍵の ID はレスポンスの keyId フィールドの値です。

{
  "keyId": "42ba1e...fc0a",
  "signedBlob": "eyJ0eXAi...NiJ9"
}

委任チェーンの指定

委任されたリクエスト フローを使用して有効期間が短いサービス アカウント認証情報を作成する場合、各 API のリクエストの本文で次の形式のサービス アカウントの委任チェーンを正しい順序で指定する必要があります。

projects/-/serviceAccounts/SA_ID

SA_ID は、サービス アカウントの一意の数値 ID またはサービス アカウントのメールアドレスで置き換えます。

たとえば、SA_1(発信者)から SA_2(委任)、SA_3(委任)、SA_4 の順につながる委任チェーンの場合、delegates[] フィールドには SA_2SA_3 が次の順序で含まれます。

{
  "delegates": [
    "projects/-/serviceAccounts/SA_2@PROJECT_ID.iam.gserviceaccount.com",
    "projects/-/serviceAccounts/SA_3@PROJECT_ID.iam.gserviceaccount.com"
  ]
}

呼び出し元と認証情報が作成されるサービス アカウントは、委任チェーンに含まれません。