개요
이 단계에서는 이전 단계에서 만든 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 서비스 계정에 대한 권한을 부여합니다.
-
다음 형식으로 조직 및 환경별 보안 비밀을 만듭니다.
비밀번호 키 보안 비밀 데이터 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":... ... }
- 조직 보안 비밀에 액세스 권한을 부여합니다. 다음 콘텐츠로 orgsakeys-auth-policy.txt라는 텍스트 파일을 만듭니다.
path "secret/data/apigee/orgsakeys" { capabilities = ["read"] }
-
Vault 내에서 조직 보안 비밀에 대해 액세스 권한을 부여하는 정책을 만듭니다.
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 내에서 환경 보안 비밀에 대해 액세스 권한을 부여하는 정책을 만듭니다.
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.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 -
출력 텍스트를 목록에 구분해서 복사하여 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_TEXT
및apigee-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
-
정책을 사용해서 조직별 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
리소스는 보안 비밀을 요청할 때 CSI 드라이버에 통신할 제공업체를 알려줍니다. 서비스 계정 키는 이 객체를 통해 구성해야 합니다. 다음 표에서는 Apigee Hybrid에서 예상하는 파일 이름(objectNames
)을 보여줍니다.
서비스 계정 | 예상 보안 비밀 파일 이름 |
---|---|
Cassandra 백업 | cassandraBackup |
Cassandra 복원 | cassandraRestore |
Connect 에이전트 | connectAgent |
Logger | logger |
MART | mart |
측정항목 | metrics |
수익 창출 (Apigee Hybrid 수익 창출을 사용하는 경우) |
mint |
런타임 | runtime |
동기화 담당자 | synchronizer |
UDCA | udca |
감시자 | watcher |
-
다음
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
파일에 저장합니다. -
조직별
SecretProviderClass
를 apigee 네임스페이스에 적용합니다.kubectl -n $APIGEE_NAMESPACE apply -f spc-org.yaml
-
각 환경에 대해 다음
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
파일에 저장합니다. -
각 환경에 대해 환경별
SecretProviderClass
를 Apigee 네임스페이스에 적용합니다.kubectl -n $APIGEE_NAMESPACE apply -f spc-env-ENV_NAME.yaml
모든 환경에 대해 이 단계를 반복합니다.
-
선택사항:
SecretProviderClass
객체를 만든 후 서비스 계정 JSON 파일을 삭제할 수 있습니다.
GKE용 WIF
GKE용 워크로드 아이덴티티 제휴 구성 준비
- 재정의 파일에서 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"
- 다음 명령어를 사용하여 현재
gcloud
구성이 Google Cloud 프로젝트 ID로 설정되었는지 확인합니다.gcloud config get project
- 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
-
다음 명령어를 사용하여 각 노드 풀에 대해 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-data
및apigee-runtime
입니다. - 다음 명령어를 사용하여 노드 풀에서 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 이외의 플랫폼에서 워크로드 아이덴티티 제휴를 사용하는 경우 다음 방법을 사용하여 SA 인증을 구성할 수 있습니다.
- Kubernetes 보안 비밀
- 서비스 계정 JSON 파일
- Vault
다음 안내에서 사용 중인 인증 방법의 탭을 선택하세요.
이 절차에서는 2단계: Apigee Helm 차트 다운로드에 정의된 두 가지 환경 변수를 사용합니다. 이러한 변수는 선택사항입니다. 아직 정의하지 않은 경우 코드 샘플에서 각 변수에 대해 적절한 디렉터리 경로를 대체합니다.
-
$APIGEE_HELM_CHARTS_HOME
: 2단계: Apigee Helm 차트 다운로드에 정의된 Apigee Helm 차트를 다운로드한 디렉터리입니다. -
$PROJECT_ID
: 1부: 프로젝트 및 조직 설정 -- 1단계: API 사용 설정에 정의된 Google Cloud 프로젝트 ID입니다.
AKS에 설치하는 경우 OpenID Connect(OIDC) 발급기관을 사용 설정해야 합니다. 워크로드 아이덴티티 제휴에서 OpenID Connect 메타데이터와 클러스터의 JSON 웹 키 집합(JWKS)에 액세스할 수 있도록 이 기능을 사용 설정해야 합니다.
워크로드 아이덴티티 제휴를 사용하도록 클러스터 구성
-
다음 명령어를 사용하여 현재
gcloud
구성이 Google Cloud 프로젝트 ID로 설정되었는지 확인합니다.gcloud config get project
-
보안 토큰 서비스 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 theserviceusage.services.enable
permission. Learn how to grant roles.명령줄
다음 명령어를 사용하여 API를 사용 설정합니다.
gcloud services enable sts.googleapis.com --project $PROJECT_ID
-
워크로드 아이덴티티 풀과 제공업체를 만듭니다.
필요한 역할
워크로드 아이덴티티 제휴를 구성하는 데 필요한 권한을 얻으려면 관리자에게 프로젝트에 대한 다음 IAM 역할을 부여해 달라고 요청하세요.
-
워크로드 아이덴티티 풀 관리자(
roles/iam.workloadIdentityPoolAdmin
) -
서비스 계정 관리자(
roles/iam.serviceAccountAdmin
)
역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.
커스텀 역할이나 다른 사전 정의된 역할을 통해 필요한 권한을 얻을 수도 있습니다.
또는 IAM 소유자 (
roles/owner
) 기본 역할에는 ID 제휴를 구성할 수 있는 권한도 포함됩니다. 프로덕션 환경에서는 기본 역할을 부여하지 말아야 하지만 개발 환경이나 테스트 환경에서는 부여할 수 있습니다.워크로드 아이덴티티 풀과 공급업체를 만들려면 다음을 수행합니다.
-
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 웹 키 집합(JWKS)을 다운로드합니다.
kubectl get --raw /openid/v1/jwks > cluster-jwks.json
OIDC 제공업체를 공개적으로 사용할 수 있는지 확인하려면 CURL 명령어로 제공업체 URL에 액세스하여 200 응답을 수신할 수 있어야 합니다.
-
새 워크로드 아이덴티티 풀을 만듭니다.
gcloud iam workload-identity-pools create POOL_ID \ --location="global" \ --description="DESCRIPTION" \ --display-name="DISPLAY_NAME"
다음을 바꿉니다.
POOL_ID
: 풀의 고유 IDDISPLAY_NAME
: (선택사항) 풀 이름으로 바꿉니다.DESCRIPTION
: (선택사항) 선택한 풀에 대한 설명으로 바꿉니다. 이 설명은 풀 ID에 대한 액세스 권한을 부여할 때 표시됩니다.
예를 들면 다음과 같습니다.
gcloud iam workload-identity-pools create my-wi-pool --display-name="My workload pool" --description="My workload pool description"
-
클러스터를 워크로드 아이덴티티 풀 제공업체로 추가합니다. 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 주체에 매핑합니다. -
-
워크로드 아이덴티티 풀 관리자(
필요한 경우 현재 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 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
-
이전 목록에 있는 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
- 사용자 인증 정보 구성 파일의 디렉터리를 만듭니다. 디렉터리 이름에는 제한이 없습니다. 이 절차에서 디렉터리 이름은
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
: 워크로드 아이덴티티 풀이 포함된 프로젝트의 프로젝트 번호. 프로젝트 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/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 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
비프로덕션
- 사용자 인증 정보 구성 파일의 디렉터리를 만듭니다. 디렉터리 이름에는 제한이 없습니다. 이 절차에서 디렉터리 이름은
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
: 워크로드 아이덴티티 풀이 포함된 프로젝트의 프로젝트 번호. 프로젝트 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
프로덕션
-
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 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-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 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/
-
다음 명령어를 사용하여
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
-
-
사용자 인증 정보 구성 파일을
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
- 사용자 인증 정보 구성 파일의 디렉터리를 만듭니다. 디렉터리 이름에는 제한이 없습니다. 이 절차에서 디렉터리 이름은
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
: 워크로드 아이덴티티 풀이 포함된 프로젝트의 프로젝트 번호. 프로젝트 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/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 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
비프로덕션
- 사용자 인증 정보 구성 파일의 디렉터리를 만듭니다. 디렉터리 이름에는 제한이 없습니다. 이 절차에서 디렉터리 이름은
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
: 워크로드 아이덴티티 풀이 포함된 프로젝트의 프로젝트 번호. 프로젝트 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 서비스 계정에 대한 권한을 부여합니다.
-
다음 형식으로 조직 및 환경별 보안 비밀을 만듭니다.
비밀번호 키 보안 비밀 데이터 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":... ... }
- 조직 보안 비밀에 액세스 권한을 부여합니다. 다음 콘텐츠로 orgsakeys-auth-policy.txt라는 텍스트 파일을 만듭니다.
path "secret/data/apigee/orgsakeys" { capabilities = ["read"] }
-
Vault 내에서 조직 보안 비밀에 대해 액세스 권한을 부여하는 정책을 만듭니다.
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 내에서 환경 보안 비밀에 대해 액세스 권한을 부여하는 정책을 만듭니다.
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.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 -
출력 텍스트를 목록에 구분해서 복사하여 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_TEXT
및apigee-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
-
정책을 사용해서 조직별 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
리소스는 보안 비밀을 요청할 때 CSI 드라이버에 통신할 제공업체를 알려줍니다. 서비스 계정 키는 이 객체를 통해 구성해야 합니다. 다음 표에서는 Apigee Hybrid에서 예상하는 파일 이름(objectNames
)을 보여줍니다.서비스 계정 예상 보안 비밀 파일 이름 Cassandra 백업 cassandraBackup
Cassandra 복원 cassandraRestore
Connect 에이전트 connectAgent
MART mart
측정항목 metrics
수익 창출
(Apigee Hybrid 수익 창출을 사용하는 경우)mint
런타임 runtime
동기화 담당자 synchronizer
UDCA udca
감시자 watcher
-
다음
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
파일에 저장합니다. -
조직별
SecretProviderClass
를 apigee 네임스페이스에 적용합니다.kubectl -n $APIGEE_NAMESPACE apply -f spc-org.yaml
-
각 환경에 대해 다음
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
파일에 저장합니다. -
각 환경에 대해 환경별
SecretProviderClass
를 Apigee 네임스페이스에 적용합니다.kubectl -n $APIGEE_NAMESPACE apply -f spc-env-ENV_NAME.yaml
모든 환경에 대해 이 단계를 반복합니다.