GCP にデプロイされ、Identity-Aware-Proxy (IAP) の背後にある Web サイト REST API にアクセスしたいと考えています。ローカル コンピューターからのみアクセスできればよいのですが、それを実現するためにサービス アカウント キーを使用することはできません。
gcloud auth login
application_default_credentials を使用しgcloud auth application-default login
て設定し、Oauth2 エンドポイントを呼び出して id_token を取得しようとしました。
何を試しても、「オーディエンスクライアントとクライアントは同じプロジェクトにある必要があります」というエラーが返されます。
デフォルトの認証情報にある client_id (74XXXXXXX) と IAP の client_id (73XXXXXXX) は一致しませんが、どちらも同じ GCP プロジェクトを使用しています。
この (ユーザーのデフォルト認証情報を使用して Cloud Identity-Aware Proxy (Cloud IAP) で保護されたリソースにプログラムで認証する方法は? )のPython の例を使用しています。
import google.auth
import requests
import json
def id_token_from_default_creds(audience):
cred, proj = google.auth.default()
# data necessary for ID token
client_id = cred.client_id
client_secret= cred.client_secret
refresh_token = str(cred.refresh_token)
return id_token_from_refresh_token(client_id, client_secret, refresh_token, audience)
def id_token_from_refresh_token(client_id, client_secret, refresh_token, audience):
oauth_token_base_URL = "https://www.googleapis.com/oauth2/v4/token"
payload = {"client_id": client_id, "client_secret": client_secret,
"refresh_token": refresh_token, "grant_type": "refresh_token",
"audience": audience}
res = requests.post(oauth_token_base_URL, data=payload)
return (str(json.loads(res.text)[u"id_token"]))
print("ID token from \"default\" credentials: %s" % id_token_from_default_creds("<IAP Client ID>"))
IAP にローカル ユーザー資格情報を渡す方法についてのアイデアはありますか?