使用 Workload Identity Federation 驗證遠端代理程式

支援:

本文說明如何使用 Workload Identity Federation (WIF),為 Google SecOps 遠端代理程式設定無金鑰驗證。有了 Workload Identity Federation,您就不必在遠端代理主機環境中下載、管理及儲存長期服務帳戶 JSON 金鑰檔案。

透過 Workload Identity Federation,在外部雲端服務供應商、地端部署基礎架構、Kubernetes 叢集或 CI/CD 管道上執行的遠端代理程式,會使用從外部身分識別提供者衍生的短期聯盟 Google Cloud 存取權杖。

事前準備

設定 Workload Identity Federation 前,請先確認下列必要條件:

  • 遠端代理程式最低版本:2.6.2。
  • 設定 Workload Identity Federation 的使用者必須在 Google Cloud 中具備必要的 IAM 權限,才能建立及管理 Workload Identity 集區 (roles/iam.workloadIdentityPoolAdmin) 和服務帳戶 (roles/iam.serviceAccountAdmin)。
  • 在 Google Cloud 中建立專屬服務帳戶,並指派 Chronicle SOAR Remote Agent 角色 (roles/chronicle.soarAgent)。如需建立服務帳戶的步驟,請參閱「建立服務帳戶」。
  • 存取外部身分識別提供者 (AWS、Azure、Active Directory/ADFS、Kubernetes、CI/CD 管道、X.509 CA 或自訂 OIDC/SAML 提供者)。

步驟 1:建立 workload identity pool 和提供者

在 Google Cloud中,workload identity pool 會管理外部身分,而 workload identity provider 則會定義外部 IdP 與 Google Cloud之間的連線參數。

  1. 前往 Google Cloud 控制台的「Workload Identity Pools」(工作負載身分集區) 頁面。 前往「Workload Identity Pools」(workload identity pool) 頁面
  2. 按一下「Create Pool」(建立集區)。
  3. 輸入集區的「名稱」和「說明」 (例如 soar-remote-agent-pool)。
  4. 按一下「繼續」。
  5. 在「Add a provider to pool」(將供應商新增至集區) 區段中,選取供應商類型,並輸入供應商連線詳細資料 (例如 AWS 帳戶 ID 或 OIDC 發行者和目標對象),詳情請參閱上方的供應商指南。
  6. 在「設定屬性對應」部分,將外部權杖中的聲明 (例如 google.subject=assertion.sub) 對應至 Google Cloud IAM 屬性,如供應商指南所述。
  7. 按一下 [儲存]。

步驟 2:授予服務帳戶模擬權限

允許工作負載身分集區中的外部身分模擬遠端代理程式服務帳戶。

  1. 前往 Google Cloud 控制台的「Service Accounts」(服務帳戶) 頁面。
  2. 選取遠端代理程式服務帳戶。
  3. 按一下「具備存取權的主體」分頁標籤。
  4. 按一下「授予存取權」。
  5. 在「New principals」(新增主體) 欄位中,輸入與 workload identity pool 對應的主體 ID:
    principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/*
  6. 在「Select a role」(選取角色) 清單中,選取「Workload Identity User」(Workload Identity 使用者) (roles/iam.workloadIdentityUser)。
  7. 按一下 [儲存]。

步驟 3:下載或產生外部帳戶憑證 (agent-key.json)

在遠端代理程式主機上,使用下列其中一個選項,取得名為 agent-key.json 的外部帳戶憑證設定檔。

方法 A:從 Google Cloud 控制台下載 (建議)

  1. 前往 Google Cloud 控制台的「Workload Identity Pools」(工作負載身分集區) 頁面。
  2. 選取 Workload Identity Pool,然後按一下「授予存取權」。
  3. 在「授予存取權」面板中,選取「透過服務帳戶模擬功能授予存取權」。
  4. 在「選取服務帳戶」清單中,選取遠端代理程式服務帳戶。
  5. 在「選取主體 (可以存取服務帳戶的身分)」部分,指定哪些身分可以存取服務帳戶 (例如選取屬性名稱和值)。
  6. 按一下 [儲存]。
  7. 在「Configure your application」視窗中:
    • 選取「Workload Identity Provider」。
    • 在「OIDC ID 權杖路徑」欄位中,輸入外部權杖的掛接或儲存位置的確切檔案路徑 (如果是 Kubernetes 投影權杖,這必須與 Pod 資訊清單中定義的 mountPath + path 相符,例如 /var/run/secrets/tokens/gcp-kms-token)。
    • 將「格式類型」設為「文字」 (原始 JWT 字串)。請勿為標準權杖檔案選取 JSON。
    • 按一下「下載設定檔」,然後將檔案儲存為 agent-key.json (或將下載的檔案重新命名為 agent-key.json)。
  8. 將 agent-key.json 檔案轉移至遠端代理程式主體機器。

選項 B:使用 gcloud CLI 產生

執行 gcloud iam workload-identity-pools create-cred-config 指令,產生憑證設定檔:

gcloud iam workload-identity-pools create-cred-config \
    projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID \
    --service-account=SERVICE_ACCOUNT_EMAIL \
    --output-file=agent-key.json \
    --credential-source-file=/var/run/secrets/tokens/gcp-kms-token

設定檔參考範例

供您參考,產生的 agent-key.json 檔案包含類似下列的結構:

{
  "type": "external_account",
  "audience": "//iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID",
  "subject_token_type": "urn:ietf:params:oauth:token-type:jwt",
  "token_url": "https://sts.googleapis.com/v1/token",
  "credential_source": {
    "file": "/var/run/secrets/tokens/gcp-kms-token"
  },
  "service_account_impersonation_url": "https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/SERVICE_ACCOUNT_EMAIL:generateAccessToken"
}

步驟 4:在 Google SecOps 中對應服務帳戶

部署遠端代理程式前,請在 Google SecOps 中授權服務帳戶電子郵件地址:

  1. 依序前往「SOAR 設定」>「進階」>「群組對應」。
  2. 按一下「新增」。
  3. 在「Add Role」(新增角色) 對話方塊中,於「IAM Role / IdP group」(IAM 角色/IdP 群組) 欄位輸入服務帳戶的完整電子郵件地址。
  4. 選取遠端代理程式要管理的適當環境。
  5. 按一下「新增」。

步驟 5:部署或更新遠端代理程式驗證

Podman

如要在 Podman 設定遠端代理程式驗證,請按照下列步驟操作:

  1. 列出正在執行的 Podman 容器:
    podman ps
  2. 輸入代理商的容器 ID:
    CONTAINER_ID
  3. 使用下列指令,將憑證設定檔複製到容器中的專屬路徑:

    podman cp PATH_TO_AGENT_KEY/agent-key.json CONTAINER_ID:/opt/SiemplifyAgent/agent-key.json
  4. 使用下列指令變更容器中憑證設定檔的擁有者:

    podman exec -u 0 CONTAINER_ID chown siemplify_agent:siemplify_agent /opt/SiemplifyAgent/agent-key.json
  5. 執行下列指令來套用變更:
    podman restart CONTAINER_ID

Docker

如要在 Docker 設定遠端代理程式驗證,請按照下列步驟操作:

  1. 列出執行中的 Docker 容器:
    docker ps
  2. 輸入代理商的容器 ID:
    CONTAINER_ID
  3. 使用下列指令,將憑證設定檔複製到容器中的專屬路徑:

    docker cp PATH_TO_AGENT_KEY/agent-key.json CONTAINER_ID:/opt/SiemplifyAgent/agent-key.json
  4. 使用下列指令變更容器中憑證設定檔的擁有者:

    docker exec -u 0 CONTAINER_ID chown siemplify_agent:siemplify_agent /opt/SiemplifyAgent/agent-key.json
  5. 執行下列指令來套用變更:
    docker restart CONTAINER_ID

安裝程式

如要在 CentOS/RHEL 上設定遠端代理程式驗證,請按照下列步驟操作:

  1. 將憑證設定檔移至預期路徑:

    mv PATH_TO_AGENT_KEY/agent-key.json /opt/SiemplifyAgent/agent-key.json
  2. 使用下列指令變更憑證設定檔的擁有者:

    chown siemplify_agent:siemplify_agent /opt/SiemplifyAgent/agent-key.json
  3. 執行下列指令,重新啟動代理程式服務:
    supervisorctl restart siemplify_agent

還有其他問題嗎?向社群成員和 Google SecOps 專業人員尋求解答。