Workload Identity 連携のトラブルシューティング

このページでは、Workload Identity 連携の一般的なエラーの解決方法について説明します。

Google Cloud API が SecurityTokenService から発行された認証情報を受け入れない

SecurityTokenService API から返されるアクセス トークンは、連携アクセス トークンです。ほとんどの Google Cloud API は ID 連携をサポートしていますが、一部の API メソッドに制限が適用される場合があります。制限事項の一覧については、ID 連携: プロダクトと制限事項をご覧ください。

次のエラーが発生した場合は、連携アクセス トークンをサポートしていないサービスで連携アクセス トークンを使用しようとしている可能性があります。

{
  "error": {
    "code": 401,
    "message": "Request had invalid authentication credentials. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.",
    "status": "UNAUTHENTICATED",
  }
}

このエラーを解決するには、GenerateAccessToken を呼び出して、連携アクセス トークンを制限なしのアクセス トークンと交換します。詳細については、ID 連携で有効期間の短い認証情報を取得するをご覧ください。

Workload Identity 連携で使用する ID プロバイダを許可リストに登録する

許可されていない ID プロバイダを Workload Identity プール プロバイダとして構成しようとすると、次のエラーが発生します。

FAILED_PRECONDITION: Precondition check failed.
- '@type': type.googleapis.com/google.rpc.PreconditionFailure
  violations:
  - description: "Org Policy violated for value: '{PROVIDER}'."
    subject: orgpolicy:projects/{PROJECT}/locations/global/workloadIdentityPools/{POOL}
    type: constraints/iam.workloadIdentityPoolProviders

この問題を解決するには、ID プロバイダの構成を制限するの手順に沿って、Workload Identity 連携で使用する ID プロバイダを許可リストに登録します。

入力された JWK が有効な JSON 形式ではない

OIDC プロバイダを構成しているときに Input JWK is not in a valid json format エラーが発生した場合は、自己署名証明書で保護されているエンドポイントが Google Cloudでサポートされていないことが原因である可能性があります。具体的には、x5c フィールドと x5t フィールドはサポートされていないため、OIDC JWK から削除する必要があります。

JWK に関する問題を解決するには、次のことを行います。

  1. JWK を編集し、x5c(X.509 証明書チェーン)フィールドと x5t(X.509 証明書 SHA-1 フィンガープリント)フィールドを削除します。

    {
      "kty": "RSA",
      "use": "sig",
      "kid": "example-key-id",
      "alg": "RS256",
      "n": "base64url-modulus",
      "e": "AQAB"
    }
    
  2. 残りの JWK フィールドが OIDC 仕様に記載されているように正しくフォーマットされていることを確認します。

  3. 更新された JWK を使用して OIDC プロバイダを構成します。

指定された認証情報の発行者への接続中にエラーが発生する

次のエラーが表示された場合は、 Google Cloud が IdP の OIDC メタデータ ドキュメントまたは JWKS を取得できない可能性があります。

{
  "error": "invalid_grant",
  "error_description":"Error connecting to the given credential's issuer."
 }

このエラーは通常、公共のインターネットからエンドポイントにアクセスできるように構成されていないことが原因で発生します。このエラーを解決するには、OIDC エンドポイントが一般公開されていて OIDC 仕様に準拠していることを確認します。詳細については、外部 ID プロバイダの準備をご覧ください。

それでもエラーが表示される場合は、トークン発行元(トークンの iss クレーム)が正しいことを確認します。

マッピングされた google.subject クレームが 127 バイトの上限を超えている

次のエラーが表示された場合は、SecurityTokenService API で受信した受信認証情報が、文字数上限を超える google.subject クレームを生成したことが原因です。

{
  "error": "invalid_request",
  "error_description":"The size of mapped attribute google.subject exceeds the 127 bytes limit. Either modify your attribute mapping or the incoming assertion to produce a mapped attribute that is less than 127 bytes."
 }

この問題を解決するには、extract 関数を使用して不要な文字を削除し、長いクレームから一意のサブジェクト識別子を抽出します。次に例を示します。

google.subject=assertion.sub.extract('/users/{sub_claim}')

エラー 429 リクエストが多すぎます

SecurityTokenService API からトークンをリクエストしているときに 429 Too Many Requests エラーが発生した場合は、 Google Cloud プロジェクトが API のレート割り当て上限を超えていることを意味します。

エラーには次のようなメッセージが含まれます。

{
  "error": "quota_exceeded",
  "error_description":"The request was throttled due to rate limit: sts.googleapis.com/requests. Please retry after a few seconds."
 }

この問題を解決するには、エラー メッセージに表示されている sts.googleapis.com/requests 指標名を特定し、IAM 割り当てページで対応する指標名を見つけます。使用率が割り当てを超えていることを確認し、割り当ての増加をリクエストします。