Kubernetes Secret にサービス アカウント キーを保存する

Kubernetes Secret にサービス アカウント Secret を保存する

このページでは、Apigee ハイブリッド サービス アカウント キーを Kubernetes Secret に保存する方法について説明します。サービス アカウント キーを Kubernetes Secret に保存すると、Kubernetes 環境内のセキュリティが強化され、管理が効率化されます。Secret に保存したキーは、ファイル システムに保存する必要はありません。

サービス アカウント

ハイブリッドでは、次のサービス アカウントが使用されます。

本番環境

非本番環境

  • apigee-non-prod

始める前に

この手順では、2 つのオプションの環境変数($APIGEE_HELM_CHARTS_HOME$PROJECT_ID)を使用します。これらの変数を定義していない場合は、コードサンプルの各変数を適切な値で置き換えてください。

  1. $APIGEE_HELM_CHARTS_HOME ディレクトリにサービス アカウント キーのディレクトリを作成します。
    mkdir -p $APIGEE_HELM_CHARTS_HOME/service-accounts
  2. create-service-account ツールを実行できることを確認します。チャートをダウンロードしてからそれほど時間が経過していない場合は、create-service-account ファイルが実行可能モードになっていない可能性があります。$APIGEE_HELM_CHARTS_HOME ディレクトリで、次のコマンドを実行します。
    $APIGEE_HELM_CHARTS_HOME/apigee-operator/etc/tools/create-service-account \
    --help

    出力に権限拒否エラーが表示された場合は、ファイルを実行可能にします。たとえば、Linux、macOS、UNIX で chmod を使用します。

    chmod +x $APIGEE_HELM_CHARTS_HOME/apigee-operator/etc/tools/create-service-account

サービス アカウント キーを作成する

create-service-account ツールを使用して、サービス アカウントを作成または更新し、キーファイルをダウンロードします。この操作により、サービス アカウントごとに 1 つの JSON ファイルがダウンロードされます。

サービス アカウント キーのファイル名は、$PROJECT_ID-apigee-SERVICE_ACCOUNT_NAME.json という形式で表示されます。

本番環境

$APIGEE_HELM_CHARTS_HOME/apigee-operator/etc/tools/create-service-account \
  --env prod \
  --dir $APIGEE_HELM_CHARTS_HOME/service-accounts

非本番環境

$APIGEE_HELM_CHARTS_HOME/apigee-operator/etc/tools/create-service-account \
  --env non-prod \
  --dir $APIGEE_HELM_CHARTS_HOME/service-accounts

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

本番環境

次のコマンドを使用して Secret を作成します。

  • apigee-cassandraCloud Storage へのバックアップをスケジュール設定する場合)
    kubectl create secret generic apigee-cassandra-svc-account \
      --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/service-accounts/$PROJECT_ID-apigee-cassandra.json" \
      -n APIGEE_NAMESPACE
  • apigee-logger
    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
  • apigee-mart
    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
  • apigee-metrics
    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
  • apigee-mint-task-schedulerApigee ハイブリッドの収益化を使用している場合)
    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
  • apigee-runtime
    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_NAMESPACE
  • apigee-synchronizer
    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
  • apigee-udca
    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
  • apigee-watcher
    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-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 として保存したら、ハイブリッド overrides.yaml ファイルを更新して、直接ファイルパスではなくこれらの Secret を参照するようにします。関連する serviceAccountPath プロパティを、serviceAccountSecretRef を使用するように変更します。

overrides.yaml の適切なセクションで、次の serviceAccountSecretRefsserviceAccountRef の構成を使用します。

本番環境

envs:
- name: test
  serviceAccountSecretRefs:
    synchronizer: apigee-synchronizer-svc-account
    runtime: apigee-runtime-svc-account
    udca: apigee-udca-svc-account

mart:
  serviceAccountRef: apigee-mart-svc-account
  # Use the same service account for mart.serviceAccountRef and connectAgent.serviceAccountRef

connectAgent:
  serviceAccountRef: apigee-mart-svc-account
  # Use the same service account for mart.serviceAccountRef and connectAgent.serviceAccountRef

logger:
  serviceAccountRef: apigee-logger-svc-account

metrics:
  serviceAccountRef: apigee-metrics-svc-account

udca:
  serviceAccountRef: apigee-udca-svc-account

watcher:
  serviceAccountRef: apigee-watcher-svc-account

# If Scheduling backups in Cloud Storage
cassandra:
  backup:
    serviceAccountRef: apigee-cassandra-svc-account

# If using Monetization for Apigee hybrid
mintTaskScheduler:
  serviceAccountRef: apigee-mint-task-scheduler-svc-account

非本番環境

envs:
- name: test-env
  serviceAccountSecretRefs:
    synchronizer: apigee-non-prod-svc-account
    runtime: apigee-non-prod-svc-account
    udca: apigee-non-prod-svc-account

mart:
  serviceAccountRef: apigee-non-prod-svc-account

connectAgent:
  serviceAccountRef: apigee-non-prod-svc-account

logger:
  serviceAccountRef: apigee-non-prod-svc-account

metrics:
  serviceAccountRef: apigee-non-prod-svc-account

udca:
  serviceAccountRef: apigee-non-prod-svc-account

watcher:
  serviceAccountRef: apigee-non-prod-svc-account

# If Scheduling backups in Cloud Storage
cassandra:
  backup:
    serviceAccountRef: apigee-non-prod-svc-account

# If using Monetization for Apigee hybrid
mintTaskScheduler:
  serviceAccountRef: apigee-non-prod-svc-account

構成の変更を適用する

次のコマンドを使用して、変更を apigee-telemetryapigee-orgapigee-env の各チャートに適用します。

  1. Apigee テレメトリーをアップグレードします。
    helm upgrade telemetry apigee-telemetry/ \
      --install \
      --namespace APIGEE_NAMESPACE \
      -f OVERRIDES_FILE
    
  2. Apigee 組織をアップグレードします。
    helm upgrade ORG_NAME apigee-org/ \
      --install \
      --namespace APIGEE_NAMESPACE \
      -f OVERRIDES_FILE
    
  3. 環境をアップグレードします。

    --set env=ENV_NAME で環境を指定します。環境ごとにこのコマンドを繰り返します。

    helm upgrade ENV_RELEASE_NAME apigee-env/ \
      --install \
      --namespace APIGEE_NAMESPACE \
      --set env=ENV_NAME \
      -f OVERRIDES_FILE
    

次のステップ