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

Kubernetes Secret へのサービス アカウント Secret の保存

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

サービス アカウント

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

本番環境

非本番環境

  • apigee-non-prod

始める前に

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

  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

本番環境

次のコマンドを使用してシークレットを作成します。

  • 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 として保存したら、Hybrid 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
    

次のステップ