概要
このステップでは、前のステップで作成した Google Cloud サービス アカウントの認証方法を設定する方法について説明します。
使用する認証方法の手順を選択します。さまざまな認証方法の概要については、Apigee ハイブリッドのサービス アカウント認証方法をご覧ください。
Kubernetes Secret
サービス アカウント
次のサービス アカウントの Kubernetes Secret を作成する必要があります。
本番環境
apigee-cassandraapigee-loggerapigee-martapigee-metricsapigee-mint-task-scheduler(Apigee ハイブリッドの収益化を使用している場合)apigee-runtimeapigee-synchronizerapigee-udcaapigee-watcher
非本番環境
apigee-non-prod
これらの Secret は、オーバーライド ファイルを作成するの手順で指定します。
この手順では、次の省略可能な環境変数を使用します。
$APIGEE_HELM_CHARTS_HOME$APIGEE_NAMESPACE$PROJECT_ID
これらの変数を定義していない場合は、コードサンプルの各変数を適切な値で置き換えてください。
Kubernetes Secret を作成する
サービス アカウント キーを保存する Kubernetes Secret を作成します。
次のコードサンプルの kubectl create secret コマンドの構造は次のとおりです。
kubectl create secret generic SECRET_NAME \ --from-file="client_secret.json=PATH_TO_SERVICE_ACCOUNT_KEY" \ -n $APIGEE_NAMESPACE
本番環境
kubectl create secret generic apigee-logger-svc-account \
--from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/service-accounts/$PROJECT_ID-apigee-logger.json" \
-n $APIGEE_NAMESPACE
kubectl create secret generic apigee-metrics-svc-account \
--from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/service-accounts/$PROJECT_ID-apigee-metrics.json" \
-n $APIGEE_NAMESPACE
kubectl create secret generic apigee-watcher-svc-account \
--from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/service-accounts/$PROJECT_ID-apigee-watcher.json" \
-n $APIGEE_NAMESPACE
kubectl create secret generic apigee-udca-svc-account \
--from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/service-accounts/$PROJECT_ID-apigee-udca.json" \
-n $APIGEE_NAMESPACE
kubectl create secret generic apigee-mart-svc-account \
--from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/service-accounts/$PROJECT_ID-apigee-mart.json" \
-n $APIGEE_NAMESPACE
kubectl create secret generic apigee-synchronizer-svc-account \
--from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/service-accounts/$PROJECT_ID-apigee-synchronizer.json" \
-n $APIGEE_NAMESPACE
kubectl create secret generic apigee-runtime-svc-account \
--from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/service-accounts/$PROJECT_ID-apigee-runtime.json" \
-n $APIGEE_NAMESPACEApigee ハイブリッドの収益化を使用している場合は、apigee-mint-task-scheduler サービス アカウントの Kubernetes Secret も作成する必要があります。
kubectl create secret generic apigee-mint-task-scheduler-svc-account \ --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/service-accounts/$PROJECT_ID-apigee-mint-task-scheduler.json" \ -n APIGEE_NAMESPACE
非本番環境
kubectl create secret generic apigee-non-prod-svc-account \ --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/service-accounts/$PROJECT_ID-apigee-non-prod.json" \ -n $APIGEE_NAMESPACE
省略可: Kubernetes Secret を作成したら、サービス アカウントの JSON ファイルを削除できます。
Apigee ハイブリッドで Kubernetes Secret を使用する方法については、Kubernetes Secret にサービス アカウント キーを保存するをご覧ください。
JSON ファイル
JSON ファイルで認証を設定するために追加の手順は必要ありません。ステップ 6: TLS 証明書を作成するに進みます。
Vault
Vault にサービス アカウントの Secret を保存するように設定する
CSI ドライバと Vault プロバイダをインストールする
Helm を使用してクラスタに CSI ドライバをまだインストールしていない場合は、Secrets Store CSI ドライバ: インストールの手順に沿って対応します。詳細については、Vault ドキュメントの Vault CSI プロバイダのインストールをご覧ください。
Apigee ハイブリッドでサポートされている CSI ドライバの最小バージョンについては、Apigee ハイブリッドでサポートされているプラットフォームとバージョンをご覧ください。
Vault の Secret、ポリシー、ロールを作成する
Vault UI または API を使用して Secret を作成し、Apigee ハイブリッドで使用される Kubernetes サービス アカウントに、それらの Secret を読み取る権限を付与します。
-
組織と環境固有の Secret を次の形式で作成します。
秘密鍵 Secret データ secret/data/apigee/orgsakeys
{ "cassandraBackup": "***", "cassandraRestore": "***", "connectAgent": "***", "logger": "***", "mart": "***", "metrics": "***", "mint": "***", "udca": "***", "watcher": "***" }secret/data/apigee/envsakeys-ENV_NAME
{ "runtime": "***", "synchronizer": "***", "udca": "***". }各ペアの
"***"を、apigee コンポーネントに対応する Google サービス アカウントの .json ファイルの内容に置き換えます。apigee-cassandra-backupとapigee-cassandra-restoreはどちらもapigee-cassandraサービス アカウントを使用します。次に例を示します。{ "cassandraBackup": "{ "type": "service_account", "project_id": "myhybridorg", "private_key_id": "PRIVATE_KEY_ID", "private_key": "-----BEGIN PRIVATE KEY-----\nPRIVATE_KEY_TEXT\n-----END PRIVATE KEY-----\n", "client_email": "apigee-cassandra@myhybridorg.iam.gserviceaccount.com", "client_id": "123456789012345678901", "auth_uri": "https://accounts.google.com/o/oauth2/auth", "token_uri": "https://oauth2.googleapis.com/token", "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/apigee-cassandra%40myhybridorg.iam.gserviceaccount.com", "universe_domain": "googleapis.com" }", "cassandraRestore":... ... } - 組織の Secret にアクセス権を付与します。次の内容を含むテキスト ファイルを、orgsakeys-auth-policy.txt という名前で作成します。
path "secret/data/apigee/orgsakeys" { capabilities = ["read"] } -
Vault 内で、組織の Secret へのアクセス権を付与するポリシーを作成します。
vault policy write apigee-orgsakeys-auth orgsakeys-auth-policy.txt
-
環境ごとに、次の内容を含むテキスト ファイルを
envsakeys-ENV_NAME-auth-policy.txtという名前で作成します。path "secret/data/apigee/envsakeys-ENV_NAME" { capabilities = ["read"] }この手順を環境ごとに繰り返します。
-
Vault 内で、環境の Secret へのアクセス権を付与するポリシーを作成します。
vault policy write apigee-envsakeys-ENV_NAME-auth envsakeys-ENV_NAME-auth-policy.txt
この手順を環境ごとに繰り返します。
-
次の内容のスクリプトを
generate-encoded-sas.shという名前で作成します。# generate-encoded-sas.sh ORG=$APIGEE_ORG # Apigee organization name ENVS=$APIGEE_ENV_LIST # comma separated env names, for example: dev,prod ORG_SHORT_NAME=$(echo $ORG | head -c 15) ENCODE=$(echo -n $ORG | shasum -a 256 | head -c 7) ORG_ENCODE=$(echo "$ORG_SHORT_NAME-$ENCODE") NAMES=apigee-manager,apigee-cassandra-default,apigee-cassandra-backup-sa,apigee-cassandra-restore-sa,apigee-cassandra-schema-setup-${ORG_ENCODE},apigee-cassandra-schema-val-${ORG_ENCODE},apigee-cassandra-user-setup-${ORG_ENCODE},apigee-mart-${ORG_ENCODE},apigee-mint-task-scheduler-${ORG_ENCODE},apigee-connect-agent-${ORG_ENCODE},apigee-watcher-${ORG_ENCODE},apigee-udca-${ORG_ENCODE},apigee-metrics-apigee-telemetry,apigee-open-telemetry-collector-apigee-telemetry,apigee-logger-apigee-telemetry for ENV in ${ENVS//,/ } do ENV_SHORT_NAME=$(echo $ENV | head -c 15) ENCODE=$(echo -n $ORG:$ENV | shasum -a 256 | head -c 7) ENV_ENCODE=$(echo "$ORG_SHORT_NAME-$ENV_SHORT_NAME-$ENCODE") NAMES+=,apigee-synchronizer-${ENV_ENCODE},apigee-runtime-${ENV_ENCODE} done echo $NAMES -
スクリプトを実行して、ポリシーをバインドするサービス アカウント名のリストを生成します。
./generate-encoded-sas.sh
出力は、次の例のように、カンマで区切られた Kubernetes サービス アカウント名のリストになります。
./generate-encoded-sas.shapigee-manager,apigee-cassandra-default,apigee-cassandra-backup-sa, apigee-cassandra-restore-sa,apigee-cassandra-schema-setup-myhybrido rg-5b044c1,apigee-cassandra-schema-val-myhybridorg-5b044c1,apigee-c assandra-user-setup-myhybridorg-5b044c1,apigee-mart-myhybridorg-5b0 44c1,apigee-mint-task-scheduler-myhybridorg-5b044c1,apigee-connect- agent-myhybridorg-5b044c1,apigee-watcher-myhybridorg-5b044c1,apigee -udca-myhybridorg-5b044c1,apigee-metrics-apigee-telemetry,apigee-op en-telemetry-collector-apigee-telemetry,apigee-logger-apigee-teleme try,apigee-synchronizer-myhybridorg-dev-ee52aca,apigee-runtime-myhy bridorg-dev-ee52aca,apigee-synchronizer-myhybridorg-prod-2d0221c,ap igee-runtime-myhybridorg-prod-2d0221c -
出力テキストをコピーして複数のリストに分割します。一つのリストは org サービス アカウント名用で、別のリストは各環境の env サービス アカウント名用です。org サービス アカウントは、
apigee-logger-apigee-telemetryまでの出力リストの先頭にあります。前述の例の org サービス名のリスト:
apigee-manager,apigee-cassandra-default,apigee-cassandra-backup-sa, apigee-cassandra-restore-sa,apigee-cassandra-schema-setup-myhybrido rg-5b044c1,apigee-cassandra-schema-val-myhybridorg-5b044c1,apigee-c assandra-user-setup-myhybridorg-5b044c1,apigee-mart-myhybridorg-5b0 44c1,apigee-mint-task-scheduler-myhybridorg-5b044c1,apigee-connect- agent-myhybridorg-5b044c1,apigee-watcher-myhybridorg-5b044c1,apigee -udca-myhybridorg-5b044c1,apigee-metrics-apigee-telemetry,apigee-op en-telemetry-collector-apigee-telemetry,apigee-logger-apigee-teleme try
env サービス アカウント名にはパターン
apigee-synchronizer-ORG_NAME-ENV_NAME-HASH_TEXTとapigee-runtime-ORG_NAME-ENV_NAME-HASH_TEXTがあります。これらを環境ごとに別個のリストに分割します。たとえば、前述の例の出力は次の 2 つのリストに分割できます。dev環境:apigee-synchronizer-myhybridorg-dev-ee52aca,apigee-runtime-myhybrid org-dev-ee52aca
prod環境:apigee-synchronizer-myhybridorg-prod-2d0221c,apigee-runtime-myhybri dorg-prod-2d0221c
-
ポリシーを使用して、組織固有の Apigee サービス アカウントをバインドする Vault ロールを作成します。
vault write auth/kubernetes/role/apigee-orgsakeys \ bound_service_account_names=LIST_OF_ORG_SA_NAMES \ bound_service_account_namespaces=apigee \ policies=apigee-orgsakeys-auth \ ttl=1m -
環境ごとに、サービス アカウント キーの Vault ロールを作成します。
vault write auth/kubernetes/role/apigee-envsakeys-ENV_NAME \ bound_service_account_names=LIST_OF_ENV_NAME_SA_NAMES \ bound_service_account_namespaces=apigee \ policies=apigee-envsakeys-ENV_NAME-auth \ ttl=1mすべての環境について、この手順を繰り返します。
SecretProviderClass オブジェクトの作成
SecretProviderClass リソースは、Secret をリクエストするときに通信するプロバイダを CSI ドライバに伝えます。サービス アカウント キーは、このオブジェクトを介して構成する必要があります。次の表に、Apigee Hybrid で想定されるファイル名(objectNames)を示します。
| サービス アカウント | 想定される Secret ファイル名 |
|---|---|
| Cassandra バックアップ | cassandraBackup |
| Cassandra の復元 | cassandraRestore |
| Connect Agent | connectAgent |
| Logger | logger |
| MART | mart |
| 指標 | metrics |
| 収益化 (Apigee ハイブリッドの収益化を使用している場合) |
mint |
| ランタイム | runtime |
| Synchronizer | synchronizer |
| UDCA | udca |
| Watcher | watcher |
-
次の
SecretProviderClassテンプレートを使用して、組織固有の Secret 用にこのリソースを構成します。apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: apigee-orgsakeys-spc spec: provider: vault parameters: roleName: apigee-orgsakeys vaultAddress: VAULT_ADDRESS # "objectName" is an alias used within the SecretProviderClass to reference # that specific secret. This will also be the filename containing the secret. # Apigee Hybrid expects these exact values so they must not be changed. # "secretPath" is the path in Vault where the secret should be retrieved. # "secretKey" is the key within the Vault secret response to extract a value from. objects: | - objectName: "cassandraBackup" secretPath: "" secretKey: "" - objectName: "cassandraRestore" secretPath: "" secretKey: "" - objectName: "connectAgent" secretPath: "" secretKey: "" - objectName: "logger" secretPath: "" secretKey: "" - objectName: "mart" secretPath: "" secretKey: "" - objectName: "metrics" secretPath: "" secretKey: "" - objectName: "mint" secretPath: "" secretKey: "" - objectName: "udca" secretPath: "" secretKey: "" - objectName: "watcher" secretPath: "" secretKey: ""VAULT_ADDRESS は、Vault サーバーが実行されているエンドポイントです。Vault が Apigee と同じクラスタで実行されている場合、一般的な形式は
http://vault.$APIGEE_NAMESPACE.svc.cluster.local:VAULT_SERVICE_PORTです。テンプレートを
spc-org.yamlという名前のファイルに保存します。 -
組織固有の
SecretProviderClassを apigee Namespace に適用します。kubectl -n $APIGEE_NAMESPACE apply -f spc-org.yaml
-
環境ごとに、次の
SecretProviderClassテンプレートを使用して、環境固有の Secret 用にこのリソースを構成します。すべての環境について、この手順を繰り返します。apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: apigee-envsakeys-ENV_NAME-spc spec: provider: vault parameters: roleName: apigee-envsakeys-ENV_NAME vaultAddress: VAULT_ADDRESS # "objectName" is an alias used within the SecretProviderClass to reference # that specific secret. This will also be the filename containing the secret. # Apigee Hybrid expects these exact values so they must not be changed. # "secretPath" is the path in Vault where the secret should be retrieved. # "secretKey" is the key within the Vault secret response to extract a value from. objects: | - objectName: "runtime" secretPath: "" secretKey: "" - objectName: "synchronizer" secretPath: "" secretKey: "" - objectName: "udca" secretPath: "" secretKey: ""VAULT_ADDRESS は、Vault サーバーが実行されているエンドポイントです。Vault が Apigee と同じクラスタと名前空間で実行されている場合、一般的な形式は
http://vault.$APIGEE_NAMESPACE.svc.cluster.local:VAULT_SERVICE_PORTです。テンプレートを
spc-env-ENV_NAME.yamlという名前のファイルに保存します。 -
環境ごとに、環境固有の
SecretProviderClassを apigee Namespace に適用します。kubectl -n $APIGEE_NAMESPACE apply -f spc-env-ENV_NAME.yaml
すべての環境について、この手順を繰り返します。
-
省略可:
SecretProviderClassオブジェクトを作成したら、サービス アカウントの JSON ファイルを削除できます。
GKE 用 WIF
Workload Identity Federation for GKE の構成を準備する
- オーバーライド ファイルで Workload Identity Federation for GKE が有効になっていることを確認します。オーバーライド ファイルの次のプロパティで有効にする必要があります。
namespaceは必須です。次に例を示します。instanceID: "hybrid-instance-1" namespace: "apigee"
- すべてのコンポーネントに 1 つのサービス アカウント(非本番環境)を使用する場合は、
gcp.workloadIdentity.gsaで指定します。次に例を示します。gcp: workloadIdentity: enabled: true gsa: "apigee-non-prod@my-hybrid-project.iam.gserviceaccount.com" - コンポーネント(本番環境)ごとに個別のサービス アカウントを使用する場合は、コンポーネントの
gsaプロパティでサービス アカウントを指定します。次に例を示します。logger: gsa: "apigee-logger@my-hybrid-project.iam.gserviceaccount.com"
- 次のコマンドを使用して、Google Cloud プロジェクト ID に設定されている現在の
gcloud構成を確認します。gcloud config get project
- GKE クラスタで Workload Identity Federation for GKE が有効になっていることを確認します。ステップ 1: クラスタを作成するでクラスタを作成したとき、ステップ 6 で GKE 用 Workload Identity 連携を有効にしました。次のコマンドを使用して、有効になっていることを確認します。
リージョン クラスタ
gcloud container clusters describe $CLUSTER_NAME \ --region $CLUSTER_LOCATION \ --project $PROJECT_ID \ --flatten 'workloadIdentityConfig'
ゾーンクラスタ
gcloud container clusters describe $CLUSTER_NAME \ --zone $CLUSTER_LOCATION \ --project $PROJECT_ID \ --flatten 'workloadIdentityConfig'
出力は次のようになります。
--- workloadPool: $PROJECT_ID.svc.id.goog
結果に
nullが表示された場合は、次のコマンドを実行してクラスタで Workload Identity Federation for GKE を有効にします。リージョン クラスタ
gcloud container clusters update $CLUSTER_NAME \ --workload-pool=$PROJECT_ID.svc.id.goog \ --project $PROJECT_ID \ --region $CLUSTER_LOCATION
ゾーンクラスタ
gcloud container clusters update $CLUSTER_NAME \ --workload-pool=$PROJECT_ID.svc.id.goog \ --zone $CLUSTER_LOCATION \ --project $PROJECT_ID
-
次のコマンドを使用して、各ノードプールで Workload Identity Federation for GKE を有効にします。このオペレーションは、ノードごとに最大 30 分かかることがあります。
リージョン クラスタ
gcloud container node-pools update NODE_POOL_NAME \ --cluster=$CLUSTER_NAME \ --region $CLUSTER_LOCATION \ --project $PROJECT_ID \ --workload-metadata=GKE_METADATA
ゾーンクラスタ
gcloud container node-pools update NODE_POOL_NAME \ --cluster=$CLUSTER_NAME \ --zone $CLUSTER_LOCATION \ --project $PROJECT_ID \ --workload-metadata=GKE_METADATA
ここで、NODE_POOL_NAME は各ノードプールの名前です。ほとんどの Apigee ハイブリッド インストールでは、2 つのデフォルト ノードプールは
apigee-dataとapigee-runtimeという名前になっています。 - 次のコマンドを使用して、ノードプールで Workload Identity Federation for GKE が有効になっていることを確認します。
リージョン クラスタ
gcloud container node-pools describe apigee-data \ --cluster $CLUSTER_NAME \ --region $CLUSTER_LOCATION \ --project $PROJECT_ID \ --flatten "config:"
gcloud container node-pools describe apigee-runtime \ --cluster $CLUSTER_NAME \ --region $CLUSTER_LOCATION \ --project $PROJECT_ID \ --flatten "config:"
ゾーンクラスタ
gcloud container node-pools describe apigee-data \ --cluster $CLUSTER_NAME \ --zone $CLUSTER_LOCATION \ --project $PROJECT_ID \ --flatten "config:"
gcloud container node-pools describe apigee-runtime \ --cluster $CLUSTER_NAME \ --zone $CLUSTER_LOCATION \ --project $PROJECT_ID \ --flatten "config:"
出力は次のようになります。
--- diskSizeGb: 100 diskType: pd-standard ... workloadMetadataConfig: mode: GKE_METADATA
必要に応じて、現在の gcloud 構成を設定します。
gcloud config set project $PROJECT_ID
他のプラットフォームでの WIF
GKE 以外のプラットフォームで Workload Identity 連携を使用する場合は、次の方法で SA 認証を構成できます。
- Kubernetes Secret
- サービス アカウントの JSON ファイル
- Vault
以降の手順では、使用している認証方法のタブを選択してください。
この手順では、ステップ 2: Apigee Helm チャートをダウンロードするで定義した次の 2 つの環境変数を使用します。これらの変数は省略可能です。これらを定義していない場合は、コードサンプルの各変数を適切なディレクトリ パスで置き換えてください。
-
$APIGEE_HELM_CHARTS_HOME: ステップ 2: Apigee Helm チャートをダウンロードするで定義した、Apigee Helm チャートをダウンロードしたディレクトリ。 -
$PROJECT_ID: パート 1: プロジェクトと組織を設定する - ステップ 1: API を有効にするで定義した Google Cloud プロジェクト ID。
AKS へのインストールの場合は、OpenID Connect(OIDC)発行元が有効になっていることを確認します。Workload Identity 連携が OpenID Connect メタデータとクラスタの JSON Web Key Set(JWKS)にアクセスできるように、この機能を有効にする必要があります。
Workload Identity 連携を使用するようにクラスタを構成します。
-
次のコマンドを使用して、Google Cloud プロジェクト ID に設定されている現在の
gcloud構成を確認します。gcloud config get project
-
Security Token Service API を有効にします。
次のコマンドを使用して、Security Token Service API が有効になっていることを確認します。
gcloud services list --enabled --project $PROJECT_ID | grep sts.googleapis.com
API が有効になっていない場合:
コンソール
Enable the Security Token Service API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.コマンドライン
次のコマンドで API を有効にします。
gcloud services enable sts.googleapis.com --project $PROJECT_ID
-
Workload Identity のプールとプロバイダを作成します。
必要なロール
Workload Identity 連携の構成に必要な権限を取得するには、プロジェクトに対する次の IAM ロールを付与するよう管理者に依頼してください。
-
Workload Identity プール管理者(
roles/iam.workloadIdentityPoolAdmin) -
サービス アカウント管理者(
roles/iam.serviceAccountAdmin)
ロールの付与については、プロジェクト、フォルダ、組織に対するアクセス権の管理をご覧ください。
必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。
また、IAM オーナー(
roles/owner)の基本ロールには ID 連携を構成する権限も含まれています。本番環境では基本ロールを付与すべきではありません。基本ロールは、開発環境またはテスト環境で付与してください。Workload Identity のプールとプロバイダを作成する手順は次のとおりです。
-
AKS クラスタの発行元 URL を確認します。
AKS
az aks show -n CLUSTER_NAME -g RESOURCE_GROUP --query "oidcIssuerProfile.issuerUrl" -otsv
次のように置き換えます。
CLUSTER_NAME: クラスタの名前。RESOURCE_GROUP: クラスタのリソース グループ。
このコマンドによって発行元の URL が出力されます。次のいずれかの手順で発行元の URL が必要になります。
コマンドで発行元の URL が返されない場合は、OIDC 発行者機能が有効になっていることを確認します。
EKS
aws eks describe-cluster --name CLUSTER_NAME --query "cluster.identity.oidc.issuer" --output text
CLUSTER_NAMEは、クラスタの名前に置き換えます。このコマンドによって発行元の URL が出力されます。次のいずれかの手順で発行元の URL が必要になります。
その他の Kubernetes
Kubernetes クラスタに接続し、kubectl を使用してクラスタの発行元 URL を確認します。
kubectl get --raw /.well-known/openid-configuration | jq -r .issuer
次のいずれかの手順で発行元の URL が必要になります。
-
省略可: OIDC 発行元が一般公開されていない場合は、クラスタの JSON Web Key Set(JWKS)をダウンロードします。
kubectl get --raw /openid/v1/jwks > cluster-jwks.json
OIDC プロバイダが一般公開されているかどうか確認するには、CURL コマンドでプロバイダの URL にアクセスします。200 レスポンスが返されれば、一般公開されています。
-
Workload Identity プールを新規作成します。
gcloud iam workload-identity-pools create POOL_ID \ --location="global" \ --description="DESCRIPTION" \ --display-name="DISPLAY_NAME"次のように置き換えます。
POOL_ID: プールの一意の ID。DISPLAY_NAME: (省略可)プールの名前。DESCRIPTION: (省略可)選択したプールの説明。この説明は、プール ID へのアクセス権を付与するときに表示されます。
例:
gcloud iam workload-identity-pools create my-wi-pool --display-name="My workload pool" --description="My workload pool description" -
クラスタを Workload Identity プール プロバイダとして追加します。OIDC 発行者が一般公開されているかいないかに応じて、プロバイダを作成するコマンドを選択します。
一般公開されている
OIDC 発行者が一般公開されている場合は、次のコマンドでプロバイダを作成します。
gcloud iam workload-identity-pools providers create-oidc WORKLOAD_PROVIDER_ID \ --location="global" \ --workload-identity-pool="POOL_ID" \ --issuer-uri="ISSUER" \ --attribute-mapping="google.subject=assertion.sub"一般公開されていない
OIDC 発行者が一般公開されていない場合は、次のコマンドでプロバイダを作成します。
gcloud iam workload-identity-pools providers create-oidc WORKLOAD_PROVIDER_ID \ --location="global" \ --workload-identity-pool="POOL_ID" \ --issuer-uri="ISSUER" \ --jwks-file="cluster-jwks.json" \ --attribute-mapping="google.subject=assertion.sub"次のように置き換えます。
-
WORKLOAD_PROVIDER_ID: 一意の Workload Identity プール プロバイダ ID。 -
POOL_ID: 前に作成した Workload Identity プール ID。 -
ISSUER: 前に確認した発行元 URL を使用します。
attribute-mapping="google.subject=assertion.sub"は、Kubernetes サブジェクトを IAM サブジェクトにマッピングします。 -
-
Workload Identity プール管理者(
必要に応じて、現在の gcloud 構成を設定します。
gcloud config set project $PROJECT_ID
認証情報構成ファイルを作成する
Google Cloud リソースにアクセスできる Kubernetes ワークロードをデプロイするには、まず IAM サービス アカウントごとに認証情報構成ファイルを作成する必要があります。
-
次のコマンドを使用して、IAM サービス アカウント(Google サービス アカウント)のリストを取得します。
gcloud iam service-accounts list --project $PROJECT_ID
次の IAM サービス アカウントの認証情報構成ファイルを作成する必要があります。
本番環境
本番環境の場合:
DISPLAY NAME EMAIL DISABLED apigee-cassandra apigee-cassandra@my_project_id.iam.gserviceaccount.com False apigee-mart apigee-mart@my_project_id.iam.gserviceaccount.com False apigee-metrics apigee-metrics@my_project_id.iam.gserviceaccount.com False apigee-runtime apigee-runtime@my_project_id.iam.gserviceaccount.com False apigee-synchronizer apigee-synchronizer@my_project_id.iam.gserviceaccount.com False apigee-udca apigee-udca@my_project_id.iam.gserviceaccount.com False apigee-watcher apigee-watcher@my_project_id.iam.gserviceaccount.com False
v1.15.1 以降で Apigee ハイブリッドの収益化を使用している場合は、
apigee-mint-task-schedulerサービス アカウントの認証情報構成ファイルも作成する必要があります。DISPLAY NAME EMAIL DISABLED ... apigee-mint-task-scheduler apigee-mint-task-scheduler@my_project_id.iam.gserviceaccount.com False ...
非本番環境
非本番環境の場合:
DISPLAY NAME EMAIL DISABLED apigee-non-prod apigee-non-prod@my_project_id.iam.gserviceaccount.com False
-
前のリストの IAM サービス アカウントごとに認証情報構成ファイルを作成します。
WIF: シークレット
このアプローチでは、Kubernetes Secret に保存されている認証情報構成を使用します。ステップ 7: オーバーライドを作成するでオーバーライド ファイルを作成するときに、
serviceAccountRefプロパティまたはenvs.serviceAccountRefsプロパティを使用して、各サービス アカウントのシークレットの名前を指定します。認証情報構成ファイルを作成する
本番環境
次のサービス アカウントの認証情報構成ファイルを作成する必要があります。
apigee-cassandraapigee-martapigee-metricsapigee-mint-task-schedulerApigee ハイブリッドの収益化を使用している場合。apigee-runtimeapigee-synchronizerapigee-udca
- 認証情報構成ファイルのディレクトリを作成します。ディレクトリには任意の名前を付けることができます。この手順では、ディレクトリの名前は
credential-configurationsです。mkdir $APIGEE_HELM_CHARTS_HOME/credential-configurations
-
apigee-cassandraの認証情報構成ファイルを作成します。gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \ --service-account=apigee-cassandra@$PROJECT_ID.iam.gserviceaccount.com \ --credential-source-file=/var/run/service-account/token \ --credential-source-type=text \ --output-file=$APIGEE_HELM_CHARTS_HOME/credential-configurations/apigee-cassandra-credential-configuration.json
ここで
-
PROJECT_NUMBER: Workload Identity プールを含むプロジェクトのプロジェクト番号。これはプロジェクト ID ではなく、プロジェクト番号にする必要があります。 -
POOL_ID: Workload Identity プールの ID -
WORKLOAD_PROVIDER_ID: Workload Identity プール プロバイダの ID
-
-
apigee-martの認証情報構成ファイルを作成します。gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \ --service-account=apigee-mart@$PROJECT_ID.iam.gserviceaccount.com \ --credential-source-file=/var/run/service-account/token \ --credential-source-type=text \ --output-file=$APIGEE_HELM_CHARTS_HOME/credential-configurations/apigee-mart-credential-configuration.json
-
apigee-metricsの認証情報構成ファイルを作成します。gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \ --service-account=apigee-metrics@$PROJECT_ID.iam.gserviceaccount.com \ --credential-source-file=/var/run/service-account/token \ --credential-source-type=text \ --output-file=$APIGEE_HELM_CHARTS_HOME/credential-configurations/apigee-metrics-credential-configuration.json
-
apigee-runtimeの認証情報構成ファイルを作成します。gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \ --service-account=apigee-runtime@$PROJECT_ID.iam.gserviceaccount.com \ --credential-source-file=/var/run/service-account/token \ --credential-source-type=text \ --output-file=$APIGEE_HELM_CHARTS_HOME/credential-configurations/apigee-runtime-credential-configuration.json
-
apigee-synchronizerの認証情報構成ファイルを作成します。gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \ --service-account=apigee-synchronizer@$PROJECT_ID.iam.gserviceaccount.com \ --credential-source-file=/var/run/service-account/token \ --credential-source-type=text \ --output-file=$APIGEE_HELM_CHARTS_HOME/credential-configurations/apigee-synchronizer-credential-configuration.json
-
apigee-udcaの認証情報構成ファイルを作成します。gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \ --service-account=apigee-udca@$PROJECT_ID.iam.gserviceaccount.com \ --credential-source-file=/var/run/service-account/token \ --credential-source-type=text \ --output-file=$APIGEE_HELM_CHARTS_HOME/credential-configurations/apigee-udca-credential-configuration.json
-
apigee-watcherの認証情報構成ファイルを作成します。gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \ --service-account=apigee-watcher@$PROJECT_ID.iam.gserviceaccount.com \ --credential-source-file=/var/run/service-account/token \ --credential-source-type=text \ --output-file=$APIGEE_HELM_CHARTS_HOME/credential-configurations/apigee-watcher-credential-configuration.json
-
Apigee ハイブリッドの収益化を使用している場合は、
apigee-mint-task-schedulerの認証情報構成ファイルも作成する必要があります。gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \ --service-account=apigee-mint-task-scheduler@$PROJECT_ID.iam.gserviceaccount.com \ --credential-source-file=/var/run/service-account/token \ --credential-source-type=text \ --output-file=$APIGEE_HELM_CHARTS_HOME/credential-configurations/apigee-mint-task-scheduler-credential-configuration.json
非本番環境
- 認証情報構成ファイルのディレクトリを作成します。ディレクトリには任意の名前を付けることができます。この手順では、ディレクトリの名前は
credential-configurationsです。mkdir $APIGEE_HELM_CHARTS_HOME/credential-configurations
-
次のコマンドを使用して、
credential-configurationsディレクトリのapigee-non-prodサービス アカウントの認証情報構成ファイルを作成します。gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \ --service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com \ --credential-source-file=/var/run/service-account/token \ --credential-source-type=text \ --output-file=$APIGEE_HELM_CHARTS_HOME/credential-configurations/apigee-non-prod-credential-configuration.json
ここで
-
PROJECT_NUMBER: Workload Identity プールを含むプロジェクトのプロジェクト番号。これはプロジェクト ID ではなく、プロジェクト番号にする必要があります。 -
POOL_ID: Workload Identity プールの ID -
WORKLOAD_PROVIDER_ID: Workload Identity プール プロバイダの ID
-
Kubernetes Secret を作成する
各サービス アカウントの認証情報構成ファイルを保存する Kubernetes Secret を作成します。
次のコードサンプルの
kubectl create secretコマンドの構造は次のとおりです。kubectl create secret generic SECRET_NAME \ --from-file="client_secret.json=PATH_TO_CREDENTIAL_CONFIGURATION_FILE" \ -n APIGEE_NAMESPACE本番環境
-
apigee-cassandraのシークレット ファイルを作成します。kubectl create secret generic apigee-cassandra-svc-account \ --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/credential-configurations/$PROJECT_ID-apigee-cassandra.json" \ -n APIGEE_NAMESPACE
-
apigee-martのシークレット ファイルを作成します。kubectl create secret generic apigee-mart-svc-account \ --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/credential-configurations/$PROJECT_ID-apigee-mart.json" \ -n APIGEE_NAMESPACE
-
apigee-metricsのシークレット ファイルを作成します。kubectl create secret generic apigee-metrics-svc-account \ --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/credential-configurations/$PROJECT_ID-apigee-metrics.json" \ -n APIGEE_NAMESPACE
-
apigee-runtimeのシークレット ファイルを作成します。kubectl create secret generic apigee-runtime-svc-account \ --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/credential-configurations/$PROJECT_ID-apigee-runtime.json" \ -n APIGEE_NAMESPACE
-
apigee-synchronizerのシークレット ファイルを作成します。kubectl create secret generic apigee-synchronizer-svc-account \ --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/credential-configurations/$PROJECT_ID-apigee-synchronizer.json" \ -n APIGEE_NAMESPACE
-
apigee-udcaのシークレット ファイルを作成します。kubectl create secret generic apigee-udca-svc-account \ --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/credential-configurations/$PROJECT_ID-apigee-udca.json" \ -n APIGEE_NAMESPACE
-
apigee-watcherのシークレット ファイルを作成します。kubectl create secret generic apigee-watcher-svc-account \ --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/credential-configurations/$PROJECT_ID-apigee-watcher.json" \ -n APIGEE_NAMESPACE
-
Apigee ハイブリッドの収益化を使用している場合は、
apigee-mint-task-schedulerのシークレット ファイルを作成します。kubectl create secret generic apigee-mint-task-scheduler-svc-account \ --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/credential-configurations/$PROJECT_ID-apigee-mint-task-scheduler.json" \ -n APIGEE_NAMESPACE
apigee-non-prodのシークレット ファイルを作成します。非本番環境
kubectl create secret generic apigee-non-prod-svc-account \ --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/credential-configurations/$PROJECT_ID-apigee-non-prod.json" \ -n APIGEE_NAMESPACEWIF: files
このアプローチでは、Google サービス アカウント キーファイルの代わりに認証情報の構成ファイルを使用します。ステップ 7: オーバーライドを作成するでオーバーライド ファイルを作成するときに、各
serviceAccountPathプロパティまたはenvs.serviceAccountPathsプロパティの認証情報構成ファイルのパスを指定します。本番環境
対応するチャート ディレクトリに認証情報構成ファイルを作成する必要があります。
サービス アカウント Apigee Helm チャート ディレクトリ apigee-cassandraapigee-datastore/apigee-martapigee-org/apigee-metricsapigee-telemetry/apigee-mint-task-scheduler
(Apigee ハイブリッドの収益化を使用している場合)apigee-org/apigee-runtimeapigee-env/apigee-synchronizerapigee-env/apigee-udcaapigee-org/
apigee-env/apigee-watcherapigee-org/次のコマンドを使用して、認証情報構成ファイルを作成します。
-
apigee-cassandra:gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \ --service-account=apigee-cassandra@$PROJECT_ID.iam.gserviceaccount.com \ --credential-source-file=/var/run/service-account/token \ --credential-source-type=text \ --output-file=$APIGEE_HELM_CHARTS_HOME/apigee-datastore/apigee-cassandra-credential-configuration.json
ここで
-
PROJECT_NUMBER: Workload Identity プールを含むプロジェクトのプロジェクト番号。これはプロジェクト ID ではなく、プロジェクト番号にする必要があります。 -
POOL_ID: Workload Identity プールの ID -
WORKLOAD_PROVIDER_ID: Workload Identity プール プロバイダの ID
-
-
apigee-mart:gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \ --service-account=apigee-mart@$PROJECT_ID.iam.gserviceaccount.com \ --credential-source-file=/var/run/service-account/token \ --credential-source-type=text \ --output-file=$APIGEE_HELM_CHARTS_HOME/apigee-org/apigee-mart-credential-configuration.json
-
apigee-metrics:gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \ --service-account=apigee-metrics@$PROJECT_ID.iam.gserviceaccount.com \ --credential-source-file=/var/run/service-account/token \ --credential-source-type=text \ --output-file=$APIGEE_HELM_CHARTS_HOME/apigee-telemetry/apigee-metrics-credential-configuration.json
-
apigee-runtime:gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \ --service-account=apigee-runtime@$PROJECT_ID.iam.gserviceaccount.com \ --credential-source-file=/var/run/service-account/token \ --credential-source-type=text \ --output-file=$APIGEE_HELM_CHARTS_HOME/apigee-env/apigee-runtime-credential-configuration.json
-
apigee-synchronizer:gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \ --service-account=apigee-synchronizer@$PROJECT_ID.iam.gserviceaccount.com \ --credential-source-file=/var/run/service-account/token \ --credential-source-type=text \ --output-file=$APIGEE_HELM_CHARTS_HOME/apigee-env/apigee-synchronizer-credential-configuration.json
-
apigee-udca:apigee-udcaサービス アカウントは、apigee-orgとapigee-envの両方のグラフで使用されます。-
apigee-orgチャート ディレクトリに認証情報構成ファイルを作成します。gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \ --service-account=apigee-udca@$PROJECT_ID.iam.gserviceaccount.com \ --credential-source-file=/var/run/service-account/token \ --credential-source-type=text \ --output-file=$APIGEE_HELM_CHARTS_HOME/apigee-org/apigee-udca-credential-configuration.json
-
認証情報構成ファイルを
apigee-envグラフ ディレクトリにコピーします。cp $APIGEE_HELM_CHARTS_HOME/apigee-org/apigee-udca-credential-configuration.json \ $APIGEE_HELM_CHARTS_HOME/apigee-env/apigee-udca-credential-configuration.json
-
-
apigee-watcher:gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \ --service-account=apigee-watcher@$PROJECT_ID.iam.gserviceaccount.com \ --credential-source-file=/var/run/service-account/token \ --credential-source-type=text \ --output-file=$APIGEE_HELM_CHARTS_HOME/apigee-org/apigee-watcher-credential-configuration.json
-
href="monetization-for-hybrid">Apigee ハイブリッドの収益化を使用している場合は、
apigee-mint-task-schedulerの認証情報構成ファイルも作成する必要があります。gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \ --service-account=apigee-mint-task-scheduler@$PROJECT_ID.iam.gserviceaccount.com \ --credential-source-file=/var/run/service-account/token \ --credential-source-type=text \ --output-file=$APIGEE_HELM_CHARTS_HOME/apigee-org/apigee-mint-task-scheduler-credential-configuration.json
非本番環境
認証情報構成ファイルを作成して、対応するチャート ディレクトリにコピーする必要があります。
サービス アカウント Apigee Helm チャート apigee-non-prodapigee-datastore/
apigee-telemetry/
apigee-org/
apigee-env/-
次のコマンドを使用して、
apigee-datastoreチャート ディレクトリに認証情報構成ファイルを作成します。gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \ --service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com \ --credential-source-file=/var/run/service-account/token \ --credential-source-type=text \ --output-file=$APIGEE_HELM_CHARTS_HOME/apigee-datastore/apigee-non-prod-credential-configuration.json
ここで
-
PROJECT_NUMBER: Workload Identity プールを含むプロジェクトのプロジェクト番号。これはプロジェクト ID ではなく、プロジェクト番号にする必要があります。 -
POOL_ID: Workload Identity プールの ID -
WORKLOAD_PROVIDER_ID: Workload Identity プール プロバイダの ID
-
-
認証情報構成ファイルを
apigee-env、apigee-org/、apigee-telemetry/のチャート ディレクトリにコピーします。cp $APIGEE_HELM_CHARTS_HOME/apigee-datastore/apigee-non-prod-credential-configuration.json \ $APIGEE_HELM_CHARTS_HOME/apigee-env/apigee-non-prod-credential-configuration.json
cp $APIGEE_HELM_CHARTS_HOME/apigee-datastore/apigee-non-prod-credential-configuration.json \ $APIGEE_HELM_CHARTS_HOME/apigee-org/apigee-non-prod-credential-configuration.jsoncp $APIGEE_HELM_CHARTS_HOME/apigee-datastore/apigee-non-prod-credential-configuration.json \ $APIGEE_HELM_CHARTS_HOME/apigee-telemetry/apigee-non-prod-credential-configuration.json
WIF: Vault
このアプローチでは、外部シークレット マネージャーである Hashicorp Vault に保存されている認証情報の構成を使用します。ステップ 7: オーバーライドを作成するでオーバーライド ファイルをビルドするときに、
serviceAccountSecretProviderClassプロパティまたはenvs.serviceAccountSecretProviderClassプロパティを使用して、組織レベルと環境レベルの Vault シークレットを指定します。認証情報構成ファイルを作成する
本番環境
次のサービス アカウントの認証情報構成ファイルを作成する必要があります。
apigee-cassandraapigee-martapigee-metricsapigee-mint-task-scheduler(Apigee ハイブリッドの収益化を使用している場合)apigee-runtimeapigee-synchronizerapigee-udca
- 認証情報構成ファイルのディレクトリを作成します。ディレクトリには任意の名前を付けることができます。この手順では、ディレクトリの名前は
credential-configurationsです。mkdir $APIGEE_HELM_CHARTS_HOME/credential-configurations
-
apigee-cassandraの認証情報構成ファイルを作成します。gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \ --service-account=apigee-cassandra@$PROJECT_ID.iam.gserviceaccount.com \ --credential-source-file=/var/run/service-account/token \ --credential-source-type=text \ --output-file=$APIGEE_HELM_CHARTS_HOME/credential-configurations/apigee-cassandra-credential-configuration.json
ここで
-
PROJECT_NUMBER: Workload Identity プールを含むプロジェクトのプロジェクト番号。これはプロジェクト ID ではなく、プロジェクト番号にする必要があります。 -
POOL_ID: Workload Identity プールの ID -
WORKLOAD_PROVIDER_ID: Workload Identity プール プロバイダの ID
-
-
apigee-martの認証情報構成ファイルを作成します。gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \ --service-account=apigee-mart@$PROJECT_ID.iam.gserviceaccount.com \ --credential-source-file=/var/run/service-account/token \ --credential-source-type=text \ --output-file=$APIGEE_HELM_CHARTS_HOME/credential-configurations/apigee-mart-credential-configuration.json
-
apigee-metricsの認証情報構成ファイルを作成します。gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \ --service-account=apigee-metrics@$PROJECT_ID.iam.gserviceaccount.com \ --credential-source-file=run/service-account/token \ --credential-source-type=text \ --output-file=$APIGEE_HELM_CHARTS_HOME/credential-configurations/apigee-metrics-credential-configuration.json
-
apigee-runtimeの認証情報構成ファイルを作成します。gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \ --service-account=apigee-runtime@$PROJECT_ID.iam.gserviceaccount.com \ --credential-source-file=/var/run/service-account/token \ --credential-source-type=text \ --output-file=$APIGEE_HELM_CHARTS_HOME/credential-configurations/apigee-runtime-credential-configuration.json
-
apigee-synchronizerの認証情報構成ファイルを作成します。gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \ --service-account=apigee-synchronizer@$PROJECT_ID.iam.gserviceaccount.com \ --credential-source-file=/var/run/service-account/token \ --credential-source-type=text \ --output-file=$APIGEE_HELM_CHARTS_HOME/credential-configurations/apigee-synchronizer-credential-configuration.json
-
apigee-udcaの認証情報構成ファイルを作成します。gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \ --service-account=apigee-udca@$PROJECT_ID.iam.gserviceaccount.com \ --credential-source-file=/var/run/service-account/token \ --credential-source-type=text \ --output-file=$APIGEE_HELM_CHARTS_HOME/credential-configurations/apigee-udca-credential-configuration.json
-
apigee-watcherの認証情報構成ファイルを作成します。gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \ --service-account=apigee-watcher@$PROJECT_ID.iam.gserviceaccount.com \ --credential-source-file=/var/run/service-account/token \ --credential-source-type=text \ --output-file=$APIGEE_HELM_CHARTS_HOME/credential-configurations/apigee-watcher-credential-configuration.json
-
Apigee ハイブリッドの収益化を使用している場合は、
apigee-mint-task-schedulerの認証情報構成ファイルも作成する必要があります。gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \ --service-account=apigee-mint-task-scheduler@$PROJECT_ID.iam.gserviceaccount.com \ --credential-source-file=/var/run/service-account/token \ --credential-source-type=text \ --output-file=$APIGEE_HELM_CHARTS_HOME/credential-configurations/apigee-mint-task-scheduler-credential-configuration.json
非本番環境
- 認証情報構成ファイルのディレクトリを作成します。ディレクトリには任意の名前を付けることができます。この手順では、ディレクトリの名前は
credential-configurationsです。mkdir $APIGEE_HELM_CHARTS_HOME/credential-configurations
-
次のコマンドを使用して、
credential-configurationsディレクトリのapigee-non-prodサービス アカウントの認証情報構成ファイルを作成します。gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \ --service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com \ --credential-source-file=/var/run/service-account/token \ --credential-source-type=text \ --output-file=$APIGEE_HELM_CHARTS_HOME/credential-configurations/apigee-non-prod-credential-configuration.json
ここで
-
PROJECT_NUMBER: Workload Identity プールを含むプロジェクトのプロジェクト番号。これはプロジェクト ID ではなく、プロジェクト番号にする必要があります。」 -
POOL_ID: Workload Identity プールの ID -
WORKLOAD_PROVIDER_ID: Workload Identity プール プロバイダの ID
-
CSI ドライバと Vault プロバイダをインストールする
Helm を使用してクラスタに CSI ドライバをまだインストールしていない場合は、Secrets Store CSI ドライバ: インストールの手順に沿って対応します。詳細については、Vault ドキュメントの Vault CSI プロバイダのインストールをご覧ください。
Apigee ハイブリッドでサポートされている CSI ドライバの最小バージョンについては、Apigee ハイブリッドでサポートされているプラットフォームとバージョンをご覧ください。
Vault の Secret、ポリシー、ロールを作成する
Vault UI または API を使用して Secret を作成し、Apigee ハイブリッドで使用される Kubernetes サービス アカウントに、それらの Secret を読み取る権限を付与します。
-
組織と環境固有の Secret を次の形式で作成します。
秘密鍵 Secret データ secret/data/apigee/orgsakeys
{ "cassandraBackup": "***", "cassandraRestore": "***", "connectAgent": "***", "logger": "***", "mart": "***", "metrics": "***", "mint": "***", "udca": "***", "watcher": "***" }secret/data/apigee/envsakeys-ENV_NAME
{ "runtime": "***", "synchronizer": "***", "udca": "***". }本番環境
各ペアの
"***"を、apigee コンポーネントに対応する Google サービス アカウントの認証情報構成ファイルの内容に置き換えます。apigee-cassandra-backupとapigee-cassandra-restoreはどちらもapigee-cassandraサービス アカウントを使用します。次に例を示します。{ "cassandraBackup": "{ "universe_domain": "googleapis.com", "type": "external_account:," "audience": "//iam.googleapis.com/projects/123123123123/locations/global/workloadIdentityPools/my-wi-pool/providers/my-wi-provider", "subject_token_type": "urn:ietf:params:oauth: token-type:jwt", "token_url": "https://sts.googleapis.com/v1/token", "service "impersonation_url": "https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/apigee-cassandra@my-project.iam.gserviceaccount.com:generateAccessToken", "credential_source": { "file": "/var/run/service-account/token", "format": { "type": "text" } } }", "cassandraRestore":... ... }非本番環境
各ペアの
"***"を、apigee-non-prodサービス アカウントの認証情報構成ファイルの内容に置き換えます。apigee-cassandra-backupとapigee-cassandra-restoreはどちらもapigee-cassandraサービス アカウントを使用します。次に例を示します。{ "cassandraBackup": "{ "universe_domain": "googleapis.com", "type": "external_account:," "audience": "//iam.googleapis.com/projects/123123123123/locations/global/workloadIdentityPools/my-wi-pool/providers/my-wi-provider", "subject_token_type": "urn:ietf:params:oauth: token-type:jwt", "token_url": "https://sts.googleapis.com/v1/token", "service "impersonation_url": "https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/apigee-non-prod@my-project.iam.gserviceaccount.com:generateAccessToken", "credential_source": { "file": "/var/run/service-account/token", "format": { "type": "text" } } }", "cassandraRestore":... ... } - 組織の Secret にアクセス権を付与します。次の内容を含むテキスト ファイルを、orgsakeys-auth-policy.txt という名前で作成します。
path "secret/data/apigee/orgsakeys" { capabilities = ["read"] } -
Vault 内で、組織の Secret へのアクセス権を付与するポリシーを作成します。
vault policy write apigee-orgsakeys-auth orgsakeys-auth-policy.txt
-
環境ごとに、次の内容を含むテキスト ファイルを
envsakeys-ENV_NAME-auth-policy.txtという名前で作成します。path "secret/data/apigee/envsakeys-ENV_NAME" { capabilities = ["read"] }この手順を環境ごとに繰り返します。
-
Vault 内で、環境の Secret へのアクセス権を付与するポリシーを作成します。
vault policy write apigee-envsakeys-ENV_NAME-auth envsakeys-ENV_NAME-auth-policy.txt
この手順を環境ごとに繰り返します。
-
次の内容のスクリプトを
generate-encoded-sas.shという名前で作成します。# generate-encoded-sas.sh ORG=$APIGEE_ORG # Apigee organization name ENVS=$APIGEE_ENV_LIST # comma separated env names, for example: dev,prod ORG_SHORT_NAME=$(echo $ORG | head -c 15) ENCODE=$(echo -n $ORG | shasum -a 256 | head -c 7) ORG_ENCODE=$(echo "$ORG_SHORT_NAME-$ENCODE") NAMES=apigee-manager,apigee-cassandra-default,apigee-cassandra-backup-sa,apigee-cassandra-restore-sa,apigee-cassandra-schema-setup-${ORG_ENCODE},apigee-cassandra-schema-val-${ORG_ENCODE},apigee-cassandra-user-setup-${ORG_ENCODE},apigee-mart-${ORG_ENCODE},apigee-mint-task-scheduler-${ORG_ENCODE},apigee-connect-agent-${ORG_ENCODE},apigee-watcher-${ORG_ENCODE},apigee-udca-${ORG_ENCODE},apigee-metrics-apigee-telemetry,apigee-open-telemetry-collector-apigee-telemetry,apigee-logger-apigee-telemetry for ENV in ${ENVS//,/ } do ENV_SHORT_NAME=$(echo $ENV | head -c 15) ENCODE=$(echo -n $ORG:$ENV | shasum -a 256 | head -c 7) ENV_ENCODE=$(echo "$ORG_SHORT_NAME-$ENV_SHORT_NAME-$ENCODE") NAMES+=,apigee-synchronizer-${ENV_ENCODE},apigee-runtime-${ENV_ENCODE} done echo $NAMES -
スクリプトを実行して、ポリシーをバインドするサービス アカウント名のリストを生成します。
./generate-encoded-sas.sh
出力は、次の例のように、カンマで区切られた Kubernetes サービス アカウント名のリストになります。
./generate-encoded-sas.shapigee-manager,apigee-cassandra-default,apigee-cassandra-backup-sa, apigee-cassandra-restore-sa,apigee-cassandra-schema-setup-myhybrido rg-5b044c1,apigee-cassandra-schema-val-myhybridorg-5b044c1,apigee-c assandra-user-setup-myhybridorg-5b044c1,apigee-mart-myhybridorg-5b0 44c1,apigee-mint-task-scheduler-myhybridorg-5b044c1,apigee-connect- agent-myhybridorg-5b044c1,apigee-watcher-myhybridorg-5b044c1,apigee -udca-myhybridorg-5b044c1,apigee-metrics-apigee-telemetry,apigee-op en-telemetry-collector-apigee-telemetry,apigee-logger-apigee-teleme try,apigee-synchronizer-myhybridorg-dev-ee52aca,apigee-runtime-myhy bridorg-dev-ee52aca,apigee-synchronizer-myhybridorg-prod-2d0221c,ap igee-runtime-myhybridorg-prod-2d0221c -
出力テキストをコピーして複数のリストに分割します。一つのリストは org サービス アカウント名用で、別のリストは各環境の env サービス アカウント名用です。org サービス アカウントは、
apigee-logger-apigee-telemetryまでの出力リストの先頭にあります。前述の例の org サービス名のリスト:
apigee-manager,apigee-cassandra-default,apigee-cassandra-backup-sa, apigee-cassandra-restore-sa,apigee-cassandra-schema-setup-myhybrido rg-5b044c1,apigee-cassandra-schema-val-myhybridorg-5b044c1,apigee-c assandra-user-setup-myhybridorg-5b044c1,apigee-mart-myhybridorg-5b0 44c1,apigee-mint-task-scheduler-myhybridorg-5b044c1,apigee-connect- agent-myhybridorg-5b044c1,apigee-watcher-myhybridorg-5b044c1,apigee -udca-myhybridorg-5b044c1,apigee-metrics-apigee-telemetry,apigee-op en-telemetry-collector-apigee-telemetry,apigee-logger-apigee-teleme try
env サービス アカウント名にはパターン
apigee-synchronizer-ORG_NAME-ENV_NAME-HASH_TEXTとapigee-runtime-ORG_NAME-ENV_NAME-HASH_TEXTがあります。これらを環境ごとに別個のリストに分割します。たとえば、前述の例の出力は次の 2 つのリストに分割できます。dev環境:apigee-synchronizer-myhybridorg-dev-ee52aca,apigee-runtime-myhybrid org-dev-ee52aca
prod環境:apigee-synchronizer-myhybridorg-prod-2d0221c,apigee-runtime-myhybri dorg-prod-2d0221c
-
ポリシーを使用して、組織固有の Apigee サービス アカウントをバインドする Vault ロールを作成します。
vault write auth/kubernetes/role/apigee-orgsakeys \ bound_service_account_names=LIST_OF_ORG_SA_NAMES \ bound_service_account_namespaces=apigee \ policies=apigee-orgsakeys-auth \ ttl=1m -
環境ごとに、サービス アカウント キーの Vault ロールを作成します。
vault write auth/kubernetes/role/apigee-envsakeys-ENV_NAME \ bound_service_account_names=LIST_OF_ENV_NAME_SA_NAMES \ bound_service_account_namespaces=apigee \ policies=apigee-envsakeys-ENV_NAME-auth \ ttl=1m
すべての環境について、この手順を繰り返します。
SecretProviderClassオブジェクトの作成SecretProviderClassリソースは、Secret をリクエストするときに通信するプロバイダを CSI ドライバに伝えます。サービス アカウント キーは、このオブジェクトを介して構成する必要があります。次の表に、Apigee Hybrid で想定されるファイル名(objectNames)を示します。サービス アカウント 想定される Secret ファイル名 Cassandra バックアップ cassandraBackupCassandra の復元 cassandraRestoreConnect Agent connectAgentMART mart指標 metrics収益化
(Apigee ハイブリッドの収益化を使用している場合)mintランタイム runtimeSynchronizer synchronizerUDCA udcaWatcher watcher-
次の
SecretProviderClassテンプレートを使用して、組織固有の Secret 用にこのリソースを構成します。apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: apigee-orgsakeys-spc spec: provider: vault parameters: roleName: apigee-orgsakeys vaultAddress: VAULT_ADDRESS # "objectName" is an alias used within the SecretProviderClass to reference # that specific secret. This will also be the filename containing the secret. # Apigee Hybrid expects these exact values so they must not be changed. # "secretPath" is the path in Vault where the secret should be retrieved. # "secretKey" is the key within the Vault secret response to extract a value from. objects: | - objectName: "cassandraBackup" secretPath: "" secretKey: "" - objectName: "cassandraRestore" secretPath: "" secretKey: "" - objectName: "connectAgent" secretPath: "" secretKey: "" - objectName: "logger" secretPath: "" secretKey: "" - objectName: "mart" secretPath: "" secretKey: "" - objectName: "metrics" secretPath: "" secretKey: "" - objectName: "mint" secretPath: "" secretKey: "" - objectName: "udca" secretPath: "" secretKey: "" - objectName: "watcher" secretPath: "" secretKey: ""VAULT_ADDRESS は、Vault サーバーが実行されているエンドポイントです。Vault が Apigee と同じクラスタで実行されている場合、一般的な形式は
http://vault.$APIGEE_NAMESPACE.svc.cluster.local:VAULT_SERVICE_PORTです。テンプレートを
spc-org.yamlという名前のファイルに保存します。 -
組織固有の
SecretProviderClassを apigee Namespace に適用します。kubectl -n $APIGEE_NAMESPACE apply -f spc-org.yaml
-
環境ごとに、次の
SecretProviderClassテンプレートを使用して、環境固有の Secret 用にこのリソースを構成します。すべての環境について、この手順を繰り返します。apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: apigee-envsakeys-ENV_NAME-spc spec: provider: vault parameters: roleName: apigee-envsakeys-ENV_NAME vaultAddress: VAULT_ADDRESS # "objectName" is an alias used within the SecretProviderClass to reference # that specific secret. This will also be the filename containing the secret. # Apigee Hybrid expects these exact values so they must not be changed. # "secretPath" is the path in Vault where the secret should be retrieved. # "secretKey" is the key within the Vault secret response to extract a value from. objects: | - objectName: "runtime" secretPath: "" secretKey: "" - objectName: "synchronizer" secretPath: "" secretKey: "" - objectName: "udca" secretPath: "" secretKey: ""VAULT_ADDRESS は、Vault サーバーが実行されているエンドポイントです。Vault が Apigee と同じクラスタと名前空間で実行されている場合、一般的な形式は
http://vault.$APIGEE_NAMESPACE.svc.cluster.local:VAULT_SERVICE_PORTです。テンプレートを
spc-env-ENV_NAME.yamlという名前のファイルに保存します。 -
環境ごとに、環境固有の
SecretProviderClassを apigee Namespace に適用します。kubectl -n $APIGEE_NAMESPACE apply -f spc-env-ENV_NAME.yaml
すべての環境について、この手順を繰り返します。