このトピックでは、AKS プラットフォームと EKS プラットフォームで Apigee ハイブリッドのインストール用に Workload Identity を有効にする方法について説明します。
概要
Workload Identity 連携を使用すると、Google Cloud の外部で実行されているアプリケーションが、外部 ID プロバイダの認証情報を使用して Google Cloud Platform サービス アカウントの権限を借用できます。
Workload Identity 連携を使用すると、外部環境の認証メカニズムをアプリケーションで使用できるようになり、セキュリティを強化できます。また、サービス アカウント キーを置き換えることもできます。
概要については、Workload Identity 連携の使用に関するベスト プラクティスをご覧ください。
Workload Identity 連携を設定する
Apigee ハイブリッドで Workload Identity 連携を使用するには、まずクラスタを構成してから、Apigee ハイブリッド インストールに機能を適用します。
Workload Identity 連携を使用するようにクラスタを構成します。
Google Cloud の手順に沿って Kubernetes 用 Workload Identity 連携を構成するの手順を実施します。ただし、次の変更を行います。
-
次のコマンドを使用して、IAM サービス アカウントと Kubernetes サービス アカウントを一覧取得します。
-
IAM サービス アカウント: 通常、Apigee ハイブリッドの初回インストール時に
create-service-accountツールを使用して IAM サービス アカウント(Google サービス アカウント)を作成しています。Apigee ハイブリッドに必要な IAM サービス アカウントの一覧については、サービス アカウントについてをご覧ください。プロジェクト内の IAM サービス アカウントの一覧を表示するには、次のコマンドを使用します。
gcloud iam service-accounts list --project PROJECT_ID
-
Kubernetes サービス アカウント: Apigee ハイブリッド チャートは、
helm installまたはhelm updateコマンドを実行するときに、コンポーネントごとに必要な Kubernetes サービス アカウントを作成します。クラスタ内の Kubernetes サービス アカウントは、
kubectl get saコマンドを使用して確認できます。kubectl get sa -n APIGEE_NAMESPACE
kubectl get sa -n apigee-system
-
IAM サービス アカウント: 通常、Apigee ハイブリッドの初回インストール時に
-
Workload Identity 連携の構成の手順で、作成された Workload Identity プールとプロバイダのデフォルトの対象は次のとおりです。このデフォルトを使用するか、カスタムの想定オーディエンスを設定します。後で使用できるように、この値は保存しておいてください。
https://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID
-
「Kubernetes ワークロードをデプロイする」のステップ 1 で停止します。Google サービス アカウントごとに 1 つの認証情報構成ファイルがあります。各認証情報構成ファイルを保存し、
--credential-source-fileパラメータに入力したパス(/var/run/service-account/tokenなど)を保存します。
Workload Identity 連携を使用するように Apigee ハイブリッドを構成する
-
認証情報のソースファイルと出力ファイル(
credential-configuration.json)を次のチャート ディレクトリにコピーします。これらの値は、ステップ 1 の「Kubernetes ワークロードをデプロイする」で指定した値です。apigee-datastore/apigee-envapigee-org/apigee-telemetry/
-
クラスタのオーバーライド ファイルに次のグローバルな変更を加えます。
gcp: workloadIdentity: enabled: false # must be set to false to use Workload Identity Federation federatedWorkloadIdentity: enabled: true audience: "AUDIENCE" credentialSourceFile: "CREDENTIAL_SOURCE_FILE"ここで
-
AUDIENCE は、Workload Identity プロバイダの許可されたオーディエンスです。これは、ステップ 1 の「Kubernetes ワークロードをデプロイする」で構成した認証情報構成 JSON ファイルの
.audienceの値です。 -
CREDENTIAL_SOURCE_FILE は、Workload Identity 連携でサービス アカウントの認証情報を取得するために使用される認証情報ソースファイルのファイル名とパスです。これは、ステップ 1 の「Kubernetes ワークロードをデプロイする」で、
create-cred-configコマンドを使用して Workload Identity 連携を構成するときにcredential-source-fileに指定する値です。次に例を示します。
例:
gcp: workloadIdentity: enabled: false federatedWorkloadIdentity: enabled: true audience: "//iam.googleapis.com/projects/123456789012/locations/global/workloadIdentityPools/aws-pool/providers/aws-provider" credentialSourceFile: "/var/run/service-account/token" -
AUDIENCE は、Workload Identity プロバイダの許可されたオーディエンスです。これは、ステップ 1 の「Kubernetes ワークロードをデプロイする」で構成した認証情報構成 JSON ファイルの
-
Workload Identity 連携を使用して、各コンポーネントのオーバーライドを構成します。インストールに応じて、証明書ファイル、Kubernetes Secret、Vault の手順を選択します。
証明書ファイル
serviceAccountPathの値は、認証情報のソースファイルに置き換えます。これは、チャート ディレクトリからの相対パスにする必要があります。例:udca: serviceAccountPath: fwi/credential-configuration.json
K8s Secret
-
認証情報ソースファイルを使用して新しい Kubernetes Secret を作成します。
kubectl create secret -n apigee generic SECRET_NAME --from-file="client_secret.json=CREDENTIAL_CONFIGURATION_FILE"
例:
kubectl create secret -n apigee generic udca-fwi-secret --from-file="client_secret.json=./fwi/credential-configuration.json"
-
serviceAccountRefの値を新しい Secret に置き換えます。次に例を示します。udca: serviceAccountRef: udca-fwi-secret
Vault
Vault のサービス アカウント キー
SAKEYを、認証情報ソースファイルで更新します。たとえば、UDCA の場合(手順はすべてのコンポーネントで同様です)は次のようにします。SAKEY=$(cat ./fwi/credential-configuration.json); kubectl -n apigee exec vault-0 -- vault kv patch secret/apigee/orgsakeys udca="$SAKEY"
-
認証情報ソースファイルを使用して新しい Kubernetes Secret を作成します。
-
helm updateコマンドを使用して、影響を受ける各コンポーネントに変更を適用します。このクラスタで初めて Vault を使用する場合は、
apigee-operatorチャートを更新します。helm upgrade operator apigee-operator/ \ --namespace apigee-system \ --atomic \ -f overrides.yaml
影響を受ける残りのチャートを次の順序で更新します。
helm upgrade datastore apigee-datastore/ \ --namespace apigee \ --atomic \ -f overrides.yaml
helm upgrade telemetry apigee-telemetry/ \ --namespace apigee \ --atomic \ -f overrides.yaml
helm upgrade $ORG_NAME apigee-org/ \ --namespace apigee \ --atomic \ -f overrides.yaml
環境ごとに
apigee-envチャートを更新し、毎回 ENV_NAME を置き換えます。helm upgrade $ENV_NAME apigee-env/ \ --namespace apigee \ --atomic \ --set env=$ENV_NAME \ -f overrides.yaml
コンポーネントと対応するチャートのリストについては、Apigee ハイブリッド Helm リファレンスをご覧ください。
Workload Identity 連携とベスト プラクティスの詳細については、Workload Identity 連携の使用に関するベスト プラクティスをご覧ください。