ワークロードIDを使用したGoogleCloud Java SDK?

Oct 08 2020

GKEクラスター内からストレージAPIを使用して認証する方法を理解しようとしています。

コード:

Storage storage = StorageOptions.newBuilder()
  .setCredentials(ServiceAccountCredentials.getApplicationDefault())
  .setProjectId(gcpProjectId)
  .build().getService();

getApplicationDefault() これらの手段を使用してAPIで認証することが文書化されています。

  1. {@codeGOOGLE_APPLICATION_CREDENTIALS}環境変数が指す認証情報ファイル
  2. Google Cloud SDK {@code gcloud auth application-defaultlogin}コマンドによって提供される認証情報
  3. Google AppEngineの組み込み認証情報
  4. Google CloudShellの組み込み認証情報
  5. Google ComputeEngineの組み込み認証情報

アプリケーションはGCPワークロードID機能を使用しているため、アプリケーション(クラスター内)サービスアカウントには次の注釈が付けられます。

serviceAccount.annotations.iam.gke.io/gcp-service-account: [email protected]

これで、ストレージアカウントの呼び出しは、次のエラーで失敗します。

{
  "code" : 403,
  "errors" : [ {
    "domain" : "global",
    "message" : "Primary: /namespaces/my-project.svc.id.goog with additional claims does not have storage.objects.create access to the Google Cloud Storage object.",
    "reason" : "forbidden"
  } ],
  "message" : "Primary: /namespaces/my-project.svc.id.goog with additional claims does not have storage.objects.create access to the Google Cloud Storage object."
}

これにより、ワークロードIDが正しく機能していないと思います。デフォルトのサービスアカウントではなく、注釈付きのサービスアカウントのエラーメッセージを受け取ることを期待しています。

他にやるべきことはありますか?

回答

MoritzSchmitzv.Hülst Oct 09 2020 at 15:47

注釈が間違っています。の代わりに:

serviceAccount.annotations.iam.gke.io/gcp-service-account: [email protected]

それは違いない

iam.gke.io/gcp-service-account: [email protected]

エラーメッセージは、アプリがワークロードIDを使用していることも示しています。

java.io.IOException: Unexpected Error code 403 trying to get security access token from Compute Engine metadata for the default service account: Unable to generate access token; IAM returned 403 Forbidden: The caller does not have permission
This error could be caused by a missing IAM policy binding on the target IAM service account.
For more information, refer to the Workload Identity documentation:
    https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity#creating_a_relationship_between_ksas_and_gsas