5단계: 서비스 계정 인증 설정

개요

이 단계에서는 이전 단계에서 만든 Google Cloud 서비스 계정의 인증 방법을 설정하는 방법을 설명합니다.

사용할 인증 방법의 안내를 선택합니다. 다양한 인증 방법의 개요는 Apigee Hybrid의 서비스 계정 인증 방법을 참고하세요.

Kubernetes 보안 비밀

서비스 계정

다음 서비스 계정의 Kubernetes 보안 비밀을 만들어야 합니다.

프로덕션

  • apigee-cassandra
  • apigee-logger
  • apigee-mart
  • apigee-metrics
  • apigee-mint-task-scheduler (Apigee Hybrid용 수익 창출을 사용하는 경우)
  • apigee-runtime
  • apigee-synchronizer
  • apigee-udca
  • apigee-watcher

비프로덕션

  • apigee-non-prod

재정의 파일 만들기 단계에서 이러한 각 보안 비밀을 제공합니다.

이 절차에서는 다음 선택적 환경 변수를 사용합니다.

  • $APIGEE_HELM_CHARTS_HOME
  • $APIGEE_NAMESPACE
  • $PROJECT_ID

이러한 변수를 정의하지 않은 경우 코드 샘플에서 각 변수에 대해 적절한 값을 대체합니다.

Kubernetes 보안 비밀 만들기

서비스 계정 키를 저장할 Kubernetes 보안 비밀을 만듭니다.

다음 코드 샘플의 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_NAMESPACE

Apigee Hybrid용 수익 창출을 사용하는 경우 apigee-mint-task-scheduler 서비스 계정에 대한 Kubernetes 보안 비밀도 만들어야 합니다.

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 보안 비밀을 만든 후 서비스 계정 JSON 파일을 삭제할 수 있습니다.

Apigee Hybrid에서 Kubernetes 보안 비밀을 사용하는 방법에 대한 자세한 내용은 Kubernetes 보안 비밀에 서비스 계정 키 저장을 참고하세요.

JSON 파일

JSON 파일을 사용한 인증을 설정하는 데 추가 단계는 필요하지 않습니다. 6단계: TLS 인증서 만들기로 진행합니다.

Vault

Vault에 서비스 계정 보안 비밀을 저장하도록 설정

CSI 드라이버 및 Vault 제공업체 설치

아직 Helm을 사용하여 클러스터에 CSI 드라이버를 설치하지 않았으면 보안 비밀 저장소 CSI 드라이버: 설치의 안내를 따릅니다. 자세한 내용은 Vault 문서의 Vault CSI 제공업체 설치를 참조하세요.

Apigee Hybrid에서 지원되는 최소 CSI 드라이버 버전은 Apigee Hybrid 지원 플랫폼 및 버전을 참조하세요.

Vault 보안 비밀, 정책, 역할 만들기

Vault UI 또는 API를 사용하여 보안 비밀을 만들고 Apigee Hybrid가 이러한 보안 비밀을 읽는 데 사용되는 Kubernetes 서비스 계정에 대한 권한을 부여합니다.

  1. 다음 형식으로 조직 및 환경별 보안 비밀을 만듭니다.
    비밀번호 키보안 비밀 데이터
    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-backupapigee-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":...
    ...
    }
  2. 조직 보안 비밀에 액세스 권한을 부여합니다. 다음 콘텐츠로 orgsakeys-auth-policy.txt라는 텍스트 파일을 만듭니다.
    path "secret/data/apigee/orgsakeys" {
        capabilities = ["read"]
    }
  3. Vault 내에서 조직 보안 비밀에 대해 액세스 권한을 부여하는 정책을 만듭니다.
    vault policy write apigee-orgsakeys-auth orgsakeys-auth-policy.txt
  4. 각 환경에 대해 다음 콘텐츠가 포함된 envsakeys-ENV_NAME-auth-policy.txt라는 텍스트 파일을 만듭니다.
    path "secret/data/apigee/envsakeys-ENV_NAME" {
        capabilities = ["read"]
    }

    환경마다 이 단계를 반복합니다.

  5. Vault 내에서 환경 보안 비밀에 대해 액세스 권한을 부여하는 정책을 만듭니다.
    vault policy write apigee-envsakeys-ENV_NAME-auth envsakeys-ENV_NAME-auth-policy.txt

    환경마다 이 단계를 반복합니다.

  6. 다음 콘텐츠가 포함된 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
    
  7. 스크립트를 실행하여 정책을 바인딩할 서비스 계정 이름 목록을 생성합니다.
    ./generate-encoded-sas.sh

    다음 예시와 비슷하게, 쉼표로 구분된 Kubernetes 서비스 계정 이름 목록이 출력되어야 합니다.

    ./generate-encoded-sas.sh
    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,apigee-synchronizer-myhybridorg-dev-ee52aca,apigee-runtime-myhy
    bridorg-dev-ee52aca,apigee-synchronizer-myhybridorg-prod-2d0221c,ap
    igee-runtime-myhybridorg-prod-2d0221c
  8. 출력 텍스트를 목록에 구분해서 복사하여 org 서비스 계정 이름 목록 하나와 각 환경의 env 서비스 계정 이름 목록 하나를 만듭니다. 조직 서비스 계정은 출력 목록에서 최대 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_TEXTapigee-runtime-ORG_NAME-ENV_NAME-HASH_TEXT 패턴이 포함됩니다. 각 환경에 맞게 별도 목록으로 구분합니다. 예를 들어 이전 예시의 출력을 다음 두 목록으로 구분할 수 있습니다.

    dev 환경:

    apigee-synchronizer-myhybridorg-dev-ee52aca,apigee-runtime-myhybrid
    org-dev-ee52aca

    prod 환경:

    apigee-synchronizer-myhybridorg-prod-2d0221c,apigee-runtime-myhybri
    dorg-prod-2d0221c
  9. 정책을 사용해서 조직별 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
    
  10. 각 환경에 대해 서비스 계정 키의 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 리소스는 보안 비밀을 요청할 때 CSI 드라이버에 통신할 제공업체를 알려줍니다. 서비스 계정 키는 이 객체를 통해 구성해야 합니다. 다음 표에서는 Apigee Hybrid에서 예상하는 파일 이름(objectNames)을 보여줍니다.

서비스 계정예상 보안 비밀 파일 이름
Cassandra 백업 cassandraBackup
Cassandra 복원 cassandraRestore
Connect 에이전트 connectAgent
Logger logger
MART mart
측정항목 metrics
수익 창출
(Apigee Hybrid 수익 창출을 사용하는 경우)
mint
런타임 runtime
동기화 담당자 synchronizer
UDCA udca
감시자 watcher
  1. 다음 SecretProviderClass 템플릿을 사용하여 조직별 보안 비밀에 대해 이 리소스를 구성합니다.
    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 파일에 저장합니다.

  2. 조직별 SecretProviderClass를 apigee 네임스페이스에 적용합니다.
    kubectl -n $APIGEE_NAMESPACE apply -f spc-org.yaml
  3. 각 환경에 대해 다음 SecretProviderClass 템플릿을 사용해서 환경별 보안 비밀에 맞게 이 리소스를 구성합니다. 모든 환경에 대해 이 단계를 반복합니다.
    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 파일에 저장합니다.

  4. 각 환경에 대해 환경별 SecretProviderClass를 Apigee 네임스페이스에 적용합니다.
    kubectl -n $APIGEE_NAMESPACE apply -f spc-env-ENV_NAME.yaml

    모든 환경에 대해 이 단계를 반복합니다.

  5. 선택사항: SecretProviderClass 객체를 만든 후 서비스 계정 JSON 파일을 삭제할 수 있습니다.

GKE용 WIF

GKE용 워크로드 아이덴티티 제휴 구성 준비

  1. 재정의 파일에서 GKE용 워크로드 아이덴티티 제휴가 사용 설정되어 있는지 확인합니다. 재정의 파일의 다음 속성에서 사용 설정해야 합니다.
    • namespace 필드는 필수 항목입니다. 예를 들면 다음과 같습니다.
      instanceID: "hybrid-instance-1"
      namespace: "apigee"
      
    • 모든 구성요소에 단일 서비스 계정(비프로덕션)을 사용하는 경우 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"
        

    참조: gcp.workloadIdentity.enabled.

  2. 다음 명령어를 사용하여 현재 gcloud 구성이 Google Cloud 프로젝트 ID로 설정되었는지 확인합니다.
    gcloud config get project
  3. 필요한 경우 현재 gcloud 구성을 설정합니다.

    gcloud config set project $PROJECT_ID
  4. GKE 클러스터에 GKE용 워크로드 아이덴티티 제휴가 사용 설정되어 있는지 확인합니다. 1단계: 클러스터 만들기에서 클러스터를 만든 경우 6단계는 GKE용 워크로드 아이덴티티 제휴를 사용 설정하는 것이었습니다. 다음 명령어를 사용하여 사용 설정되었는지 확인합니다.

    리전 클러스터

    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가 대신 표시되면 다음 명령어를 실행하여 클러스터에 대해 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
  5. 다음 명령어를 사용하여 각 노드 풀에 대해 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 Hybrid 설치에서 두 기본 노드 풀의 이름은 apigee-dataapigee-runtime입니다.

  6. 다음 명령어를 사용하여 노드 풀에서 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
        

기타 플랫폼의 WIF

GKE 이외의 플랫폼에서 워크로드 아이덴티티 제휴를 사용하는 경우 다음 방법을 사용하여 SA 인증을 구성할 수 있습니다.

  • Kubernetes 보안 비밀
  • 서비스 계정 JSON 파일
  • Vault

다음 안내에서 사용 중인 인증 방법의 탭을 선택하세요.

이 절차에서는 2단계: Apigee Helm 차트 다운로드에 정의된 두 가지 환경 변수를 사용합니다. 이러한 변수는 선택사항입니다. 아직 정의하지 않은 경우 코드 샘플에서 각 변수에 대해 적절한 디렉터리 경로를 대체합니다.

AKS에 설치하는 경우 OpenID Connect(OIDC) 발급기관을 사용 설정해야 합니다. 워크로드 아이덴티티 제휴에서 OpenID Connect 메타데이터와 클러스터의 JSON 웹 키 집합(JWKS)에 액세스할 수 있도록 이 기능을 사용 설정해야 합니다.

워크로드 아이덴티티 제휴를 사용하도록 클러스터 구성

  1. 다음 명령어를 사용하여 현재 gcloud 구성이 Google Cloud 프로젝트 ID로 설정되었는지 확인합니다.
    gcloud config get project
  2. 필요한 경우 현재 gcloud 구성을 설정합니다.

    gcloud config set project $PROJECT_ID
  3. 보안 토큰 서비스 API를 사용 설정합니다.

    다음 명령어를 사용하여 보안 토큰 서비스 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 the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

    명령줄

    다음 명령어를 사용하여 API를 사용 설정합니다.

    gcloud services enable sts.googleapis.com --project $PROJECT_ID
  4. 워크로드 아이덴티티 풀과 제공업체를 만듭니다.

    필요한 역할

    워크로드 아이덴티티 제휴를 구성하는 데 필요한 권한을 얻으려면 관리자에게 프로젝트에 대한 다음 IAM 역할을 부여해 달라고 요청하세요.

    역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.

    커스텀 역할이나 다른 사전 정의된 역할을 통해 필요한 권한을 얻을 수도 있습니다.

    또는 IAM 소유자 (roles/owner) 기본 역할에는 ID 제휴를 구성할 수 있는 권한도 포함됩니다. 프로덕션 환경에서는 기본 역할을 부여하지 말아야 하지만 개발 환경이나 테스트 환경에서는 부여할 수 있습니다.

    워크로드 아이덴티티 풀과 공급업체를 만들려면 다음을 수행합니다.

    1. 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이 필요합니다.

    2. 선택사항: OIDC 발급자가 공개적으로 액세스할 수 없으면 클러스터의 JSON 웹 키 집합(JWKS)을 다운로드합니다.
      kubectl get --raw /openid/v1/jwks > cluster-jwks.json

      OIDC 제공업체를 공개적으로 사용할 수 있는지 확인하려면 CURL 명령어로 제공업체 URL에 액세스하여 200 응답을 수신할 수 있어야 합니다.

    3. 새 워크로드 아이덴티티 풀을 만듭니다.
      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"
    4. 클러스터를 워크로드 아이덴티티 풀 제공업체로 추가합니다. 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: 선택한 고유 워크로드 아이덴티티 풀 공급업체 ID입니다.
      • POOL_ID: 앞에서 만든 워크로드 아이덴티티 풀 ID입니다.
      • ISSUER: 앞에서 확인한 발급기관 URL을 발급기관 URI로 사용합니다.

      attribute-mapping="google.subject=assertion.sub"는 Kubernetes 주체를 IAM 주체에 매핑합니다.

사용자 인증 정보 구성 파일 만들기

Google Cloud 리소스에 액세스할 수 있는 Kubernetes 워크로드를 배포하려면 먼저 IAM 서비스 계정마다 사용자 인증 정보 구성 파일을 만들어야 합니다.

  1. 다음 명령어를 사용하여 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 Hybrid용 수익 창출을 사용하는 경우 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
    
  2. 이전 목록에 있는 IAM 서비스 계정마다 사용자 인증 정보 구성 파일을 만듭니다.

    WIF: 보안 비밀

    이 접근 방식은 Kubernetes 보안 비밀에 저장된 사용자 인증 정보 구성을 사용합니다. 7단계: 재정의 만들기에서 재정의 파일을 빌드할 때 serviceAccountRef 또는 envs.serviceAccountRefs 속성을 사용하여 각 서비스 계정의 보안 비밀 이름을 제공합니다.

    사용자 인증 정보 구성 파일 만들기

    프로덕션

    다음 서비스 계정의 사용자 인증 정보 구성 파일을 만들어야 합니다.

    • apigee-cassandra
    • apigee-mart
    • apigee-metrics
    • apigee-mint-task-scheduler Apigee Hybrid 수익 창출을 사용하는 경우
    • apigee-runtime
    • apigee-synchronizer
    • apigee-udca
    1. 사용자 인증 정보 구성 파일의 디렉터리를 만듭니다. 디렉터리 이름에는 제한이 없습니다. 이 절차에서 디렉터리 이름은 credential-configurations입니다.
      mkdir $APIGEE_HELM_CHARTS_HOME/credential-configurations
    2. 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: 워크로드 아이덴티티 풀이 포함된 프로젝트의 프로젝트 번호. 프로젝트 ID가 아닌 프로젝트 번호여야 합니다.
      • POOL_ID: 워크로드 아이덴티티 풀의 ID
      • WORKLOAD_PROVIDER_ID: 워크로드 아이덴티티 풀 공급업체의 ID
    3. 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
      
    4. 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
      
    5. 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
      
    6. 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
      
    7. 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
      
    8. 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
      
    9. Apigee Hybrid의 수익 창출을 사용하는 경우 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
      

    비프로덕션

    1. 사용자 인증 정보 구성 파일의 디렉터리를 만듭니다. 디렉터리 이름에는 제한이 없습니다. 이 절차에서 디렉터리 이름은 credential-configurations입니다.
      mkdir $APIGEE_HELM_CHARTS_HOME/credential-configurations
    2. 다음 명령어를 사용하여 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: 워크로드 아이덴티티 풀이 포함된 프로젝트의 프로젝트 번호. 프로젝트 ID가 아닌 프로젝트 번호여야 합니다.
      • POOL_ID: 워크로드 아이덴티티 풀의 ID
      • WORKLOAD_PROVIDER_ID: 워크로드 아이덴티티 풀 공급업체의 ID

    Kubernetes 보안 비밀 만들기

    각 서비스 계정의 사용자 인증 정보 구성 파일을 저장할 Kubernetes 보안 비밀을 만듭니다.

    다음 코드 샘플의 kubectl create secret 명령어는 다음과 같은 구조를 갖습니다.

    kubectl create secret generic SECRET_NAME \
            --from-file="client_secret.json=PATH_TO_CREDENTIAL_CONFIGURATION_FILE" \
            -n APIGEE_NAMESPACE

    프로덕션

    1. 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
      
    2. 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
      
    3. 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
      
    4. 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
    5. 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
      
    6. 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
      
    7. 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
      
    8. Apigee Hybrid의 수익 창출을 사용하는 경우 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_NAMESPACE

    WIF: 파일

    이 접근 방식에서는 Google 서비스 계정 키 파일 대신 사용자 인증 정보 구성 파일을 사용합니다. 7단계: 재정의 만들기에서 재정의 파일을 빌드할 때 각 serviceAccountPath 또는 envs.serviceAccountPaths 속성의 사용자 인증 정보 구성 파일 경로를 제공합니다.

    프로덕션

    해당 차트 디렉터리에 사용자 인증 정보 구성 파일을 만들어야 합니다.

    서비스 계정 Apigee Helm 차트 디렉터리
    apigee-cassandra apigee-datastore/
    apigee-mart apigee-org/
    apigee-metrics apigee-telemetry/
    apigee-mint-task-scheduler
    (Apigee Hybrid용 수익 창출을 사용하는 경우)
    apigee-org/
    apigee-runtime apigee-env/
    apigee-synchronizer apigee-env/
    apigee-udca apigee-org/
    apigee-env/
    apigee-watcher apigee-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: 워크로드 아이덴티티 풀이 포함된 프로젝트의 프로젝트 번호. 프로젝트 ID가 아닌 프로젝트 번호여야 합니다.
      • POOL_ID: 워크로드 아이덴티티 풀의 ID
      • WORKLOAD_PROVIDER_ID: 워크로드 아이덴티티 풀 공급업체의 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-orgapigee-env 차트 모두에서 사용됩니다.

      1. 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
        
      2. 사용자 인증 정보 구성 파일을 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 Hybrid 수익 창출을 사용하는 경우 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-prod apigee-datastore/
    apigee-telemetry/
    apigee-org/
    apigee-env/
    1. 다음 명령어를 사용하여 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: 워크로드 아이덴티티 풀이 포함된 프로젝트의 프로젝트 번호. 프로젝트 ID가 아닌 프로젝트 번호여야 합니다.
      • POOL_ID: 워크로드 아이덴티티 풀의 ID
      • WORKLOAD_PROVIDER_ID: 워크로드 아이덴티티 풀 공급업체의 ID
    2. 사용자 인증 정보 구성 파일을 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.json
      cp $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

    이 접근 방식에서는 외부 Secret Manager인 Hashicorp Vault에 저장된 사용자 인증 정보 구성을 사용합니다. 7단계: 재정의 만들기에서 재정의 파일을 빌드할 때 serviceAccountSecretProviderClass 또는 envs.serviceAccountSecretProviderClass 속성을 사용하여 조직 수준 및 환경 수준 저장소 보안 비밀을 제공합니다.

    사용자 인증 정보 구성 파일 만들기

    프로덕션

    다음 서비스 계정의 사용자 인증 정보 구성 파일을 만들어야 합니다.

    • apigee-cassandra
    • apigee-mart
    • apigee-metrics
    • apigee-mint-task-scheduler (Apigee Hybrid용 수익 창출을 사용하는 경우)
    • apigee-runtime
    • apigee-synchronizer
    • apigee-udca
    1. 사용자 인증 정보 구성 파일의 디렉터리를 만듭니다. 디렉터리 이름에는 제한이 없습니다. 이 절차에서 디렉터리 이름은 credential-configurations입니다.
      mkdir $APIGEE_HELM_CHARTS_HOME/credential-configurations
    2. 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: 워크로드 아이덴티티 풀이 포함된 프로젝트의 프로젝트 번호. 프로젝트 ID가 아닌 프로젝트 번호여야 합니다.
      • POOL_ID: 워크로드 아이덴티티 풀의 ID
      • WORKLOAD_PROVIDER_ID: 워크로드 아이덴티티 풀 공급업체의 ID
    3. 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
      
    4. 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
      
    5. 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
      
    6. 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
      
    7. 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
      
    8. 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
      
    9. Apigee Hybrid의 수익 창출을 사용하는 경우 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
      

    비프로덕션

    1. 사용자 인증 정보 구성 파일의 디렉터리를 만듭니다. 디렉터리 이름에는 제한이 없습니다. 이 절차에서 디렉터리 이름은 credential-configurations입니다.
      mkdir $APIGEE_HELM_CHARTS_HOME/credential-configurations
    2. 다음 명령어를 사용하여 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: 워크로드 아이덴티티 풀이 포함된 프로젝트의 프로젝트 번호. 프로젝트 ID가 아닌 프로젝트 번호여야 합니다. '
      • POOL_ID: 워크로드 아이덴티티 풀의 ID
      • WORKLOAD_PROVIDER_ID: 워크로드 아이덴티티 풀 공급업체의 ID

    CSI 드라이버 및 Vault 제공업체 설치

    아직 Helm을 사용하여 클러스터에 CSI 드라이버를 설치하지 않았으면 보안 비밀 저장소 CSI 드라이버: 설치의 안내를 따릅니다. 자세한 내용은 Vault 문서의 Vault CSI 제공업체 설치를 참조하세요.

    Apigee Hybrid에서 지원되는 최소 CSI 드라이버 버전은 Apigee Hybrid 지원 플랫폼 및 버전을 참조하세요.

    Vault 보안 비밀, 정책, 역할 만들기

    Vault UI 또는 API를 사용하여 보안 비밀을 만들고 Apigee Hybrid가 이러한 보안 비밀을 읽는 데 사용되는 Kubernetes 서비스 계정에 대한 권한을 부여합니다.

    1. 다음 형식으로 조직 및 환경별 보안 비밀을 만듭니다.
      비밀번호 키보안 비밀 데이터
      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-backupapigee-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-backupapigee-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":...
      ...
      }
    2. 조직 보안 비밀에 액세스 권한을 부여합니다. 다음 콘텐츠로 orgsakeys-auth-policy.txt라는 텍스트 파일을 만듭니다.
      path "secret/data/apigee/orgsakeys" {
        capabilities = ["read"]
      }
    3. Vault 내에서 조직 보안 비밀에 대해 액세스 권한을 부여하는 정책을 만듭니다.
      vault policy write apigee-orgsakeys-auth orgsakeys-auth-policy.txt
    4. 각 환경에 대해 다음 콘텐츠가 포함된 envsakeys-ENV_NAME-auth-policy.txt라는 텍스트 파일을 만듭니다.
      path "secret/data/apigee/envsakeys-ENV_NAME" {
        capabilities = ["read"]
      }

      환경마다 이 단계를 반복합니다.

    5. Vault 내에서 환경 보안 비밀에 대해 액세스 권한을 부여하는 정책을 만듭니다.
      vault policy write apigee-envsakeys-ENV_NAME-auth envsakeys-ENV_NAME-auth-policy.txt

      환경마다 이 단계를 반복합니다.

    6. 다음 콘텐츠가 포함된 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
      
    7. 스크립트를 실행하여 정책을 바인딩할 서비스 계정 이름 목록을 생성합니다.
      ./generate-encoded-sas.sh

      다음 예시와 비슷하게, 쉼표로 구분된 Kubernetes 서비스 계정 이름 목록이 출력되어야 합니다.

      ./generate-encoded-sas.sh
      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,apigee-synchronizer-myhybridorg-dev-ee52aca,apigee-runtime-myhy
      bridorg-dev-ee52aca,apigee-synchronizer-myhybridorg-prod-2d0221c,ap
      igee-runtime-myhybridorg-prod-2d0221c
    8. 출력 텍스트를 목록에 구분해서 복사하여 org 서비스 계정 이름 목록 하나와 각 환경의 env 서비스 계정 이름 목록 하나를 만듭니다. 조직 서비스 계정은 출력 목록에서 최대 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_TEXTapigee-runtime-ORG_NAME-ENV_NAME-HASH_TEXT 패턴이 포함됩니다. 각 환경에 맞게 별도 목록으로 구분합니다. 예를 들어 이전 예시의 출력을 다음 두 목록으로 구분할 수 있습니다.

      dev 환경:

      apigee-synchronizer-myhybridorg-dev-ee52aca,apigee-runtime-myhybrid
      org-dev-ee52aca

      prod 환경:

      apigee-synchronizer-myhybridorg-prod-2d0221c,apigee-runtime-myhybri
      dorg-prod-2d0221c
    9. 정책을 사용해서 조직별 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
          
    10. 각 환경에 대해 서비스 계정 키의 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 리소스는 보안 비밀을 요청할 때 CSI 드라이버에 통신할 제공업체를 알려줍니다. 서비스 계정 키는 이 객체를 통해 구성해야 합니다. 다음 표에서는 Apigee Hybrid에서 예상하는 파일 이름(objectNames)을 보여줍니다.

    서비스 계정예상 보안 비밀 파일 이름
    Cassandra 백업 cassandraBackup
    Cassandra 복원 cassandraRestore
    Connect 에이전트 connectAgent
    MART mart
    측정항목 metrics
    수익 창출
    (Apigee Hybrid 수익 창출을 사용하는 경우)
    mint
    런타임 runtime
    동기화 담당자 synchronizer
    UDCA udca
    감시자 watcher
    1. 다음 SecretProviderClass 템플릿을 사용하여 조직별 보안 비밀에 대해 이 리소스를 구성합니다.
      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 파일에 저장합니다.

    2. 조직별 SecretProviderClass를 apigee 네임스페이스에 적용합니다.
      kubectl -n $APIGEE_NAMESPACE apply -f spc-org.yaml
    3. 각 환경에 대해 다음 SecretProviderClass 템플릿을 사용해서 환경별 보안 비밀에 맞게 이 리소스를 구성합니다. 모든 환경에 대해 이 단계를 반복합니다.
      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 파일에 저장합니다.

    4. 각 환경에 대해 환경별 SecretProviderClass를 Apigee 네임스페이스에 적용합니다.
      kubectl -n $APIGEE_NAMESPACE apply -f spc-env-ENV_NAME.yaml

      모든 환경에 대해 이 단계를 반복합니다.

다음 단계

1 2 3 4 5 (다음) 6단계: TLS 인증서 만들기 7 8 9 10 11