使用 Stellar Engine 建立登陸區

登陸區部署程序包含多個階段。在每個階段,您都必須在 terraform.tfvars 檔案中加入特定變數。完成階段後,Terraform 會將 STAGE_NAME-tfvar.auto.tfvars.json 檔案寫入初始階段建立的 Cloud Storage bucket。後續階段會使用 Google Cloud CLI 複製檔案,以及模擬階段專屬服務帳戶的供應商檔案,到新的階段資料夾中。

視租戶數量而定,部署新環境大約需要一小時。

必要條件

部署 Stellar Engine 前,請先完成下列工作。

設定「 Google Cloud」

如要設定 Google Cloud,請完成下列步驟:

  1. 選取 Google Cloud 機構。如果您建立新機構,請至少登入 Google 管理控制台一次。

  2. 設定多位管理員,以實施分散權責。在測試環境中,一位使用者可能擁有所有資源的管理員角色。不過,在正式環境中,您需要多位管理員。詳情請參閱「設定機構資源」。

  3. 為所有具備權限的帳戶啟用兩步驟驗證

  4. 停用 Cloud Shell。Cloud Shell 不支援 IL4 或 IL5 環境,必須由 Google Workspace 管理員停用。

  5. 如果您沒有專案,請建立啟動專案

    建立專案

  6. 在啟動專案中完成下列工作:

    1. 啟用計費功能。如需操作說明,請參閱「確認專案的帳單狀態」一文。

    2. 啟用 Cloud Monitoring API。

      啟用 API 時所需的角色

      如要啟用 API,您必須具備 serviceusage.services.enable 權限。如果您建立了專案,可能已透過「擁有者」角色 (roles/owner) 取得這項權限。否則,您可以透過「服務使用情形管理員」角色 (roles/serviceusage.serviceUsageAdmin) 取得這項權限。瞭解如何授予角色

      啟用 API

  7. 確認使用者帳戶是超級管理員

  8. 如果貴機構沒有資料分類架構,請建立一個。

指派角色

將下列 Identity and Access Management 角色指派給部署 Stellar Engine 的使用者帳戶。

  1. 確認您在機構中具備下列一或多個角色: 資料存取透明化控管機制管理員、Assured Workloads 管理員、帳單帳戶管理員、記錄管理員、組織管理員、組織政策管理員、機構角色管理員、擁有者、專案建立者、服務帳戶管理員、服務帳戶權杖建立者、代碼管理員

    檢查角色

    1. 前往 Google Cloud 控制台的「IAM」頁面。

      前往「IAM」頁面
    2. 選取機構。
    3. 在「主體」欄中,找出所有識別您或您所屬群組的資料列。如要瞭解自己所屬的群組,請與管理員聯絡。

    4. 針對指定或包含您的所有列,請檢查「角色」欄,確認角色清單是否包含必要角色。

    授予角色

    1. 前往 Google Cloud 控制台的「IAM」頁面。

      前往「IAM」頁面
    2. 選取機構。
    3. 按一下「Grant access」(授予存取權)
    4. 在「New principals」(新增主體) 欄位中,輸入您的使用者 ID。 這通常是指 Google 帳戶的電子郵件地址。

    5. 按一下「Select a role」(選取角色),然後搜尋角色。
    6. 如要授予其他角色,請按一下「Add another role」(新增其他角色),然後新增其他角色。
    7. 按一下「Save」(儲存)

如果您要從新機構開始,可以執行 fast/stages-aw/0-bootstrap 資料夾中的下列指令碼,套用角色:

./setIAM.sh EMAIL_ADDRESS ORGANIZATION_ID

更改下列內容:

  • EMAIL_ADDRESS:使用者帳戶的電子郵件地址。
  • ORGANIZATION_ID:您的機構 ID。

這項指令碼會新增所有角色,但「帳單帳戶管理員」和「超級管理員」除外。

新增群組及設定服務

  1. 2. 所述,新增下列群組。使用者和群組

    • gcp-billing-admins@DOMAIN
    • gcp-developers@DOMAIN
    • gcp-devops@DOMAIN
    • gcp-hybrid-connectivity-admins@DOMAIN
    • gcp-logging-monitoring-admins@DOMAIN
    • gcp-logging-monitoring-viewers@DOMAIN
    • gcp-organization-admins@DOMAIN
    • gcp-vpc-network-admins@DOMAIN
    • gcp-security-admins@DOMAIN

    前往第 2 階段

    DOMAIN 替換成您的 FQDN。

    如果系統提示,請略過識別資訊提供者步驟。

    Google 可能會變更預設群組名稱。如果設定指南中沒有您要的群組,可以手動建立群組

  2. 啟用 Assured Workloads、BigQuery、Cloud Billing、Cloud Logging、Cloud KMS、IAM、Pub/Sub、Resource Manager、Service Account Credentials、服務使用情形、組織政策服務 API。

    啟用 API 時所需的角色

    如要啟用 API,您必須具備 serviceusage.services.enable 權限。如果您建立了專案,可能已透過「擁有者」角色 (roles/owner) 取得這項權限。否則,您可以透過「服務使用情形管理員」角色 (roles/serviceusage.serviceUsageAdmin) 取得這項權限。瞭解如何授予角色

    啟用 API

  3. 您也可以使用 fast/stages-aw/0-bootstrap/enableServices.sh 指令碼啟用服務。

  4. 啟用資料存取透明化控管機制

  5. 如果配額少於 13 個專案,請前往「Google Cloud Platform/API 專案:要求提高帳單配額」,申請 13 個專案。詳情請參閱「查看及管理配額」。

設定本機環境

請完成下列步驟,設定本機環境:

  1. 複製 Stellar Engine GitHub 存放區
  2. 安裝 Google Cloud SDK
  3. 將本機 Terraform 更新至 1.8.1 以上版本。
  4. 安裝 jq 二進位檔
  5. 驗證並將啟動程序專案設為有效專案:

    gcloud auth login
    gcloud config set project BOOTSTRAP_PROJECT_ID
    gcloud auth application-default login
    

修改模組

在大多數情況下,您都可以直接使用存放區,不必進行任何變更。如要修改模組,請複製整個模組並使用 <module-se> 命名慣例,以免從 Cloud 基礎架構儲存庫提取定期更新時發生合併衝突。

執行階段 0:啟動

第 0 階段會將網路的現有部分與 Terraform 狀態對齊。階段 0 會建立初始 IaC 啟動程序服務帳戶和專案。第 0 階段:從使用者最初擁有的任何專案,轉換至新的核心專案,並遷移 Terraform 狀態。

  1. 將目錄變更為 fast/stages-aw/0-bootstrap

  2. 複製 terraform.tfvars.sample 檔案:

    cp terraform.tfvars.sample terraform.tfvars
    
  3. providers.tf.tmp 檔案複製到 0-bootstrap-providers.tf 檔案:

    cp providers.tf.tmp 0-bootstrap-providers.tf
    
  4. 更新「fast/stages-aw/0-bootstrap/terraform.tfvars」中的資訊:

    billing_account = {
    id = "BILLING_ACCOUNT_ID"
    }
    regions = {
    primary = "REGION"
    }
    organization = {
    domain = "DOMAIN"
    id = "ORGANIZATION_ID"
    customer_id = "CUSTOMER_ID"
    }
    outputs_location = "~/fast-config"
    prefix = "PREFIX"
    log_sinks = {
    audit-logs = {
    filter = "logName:\"/logs/cloudaudit.googleapis.com%2Factivity\" OR logName:\"/logs/cloudaudit.googleapis.com%2Fsystem_event\" OR protoPayload.metadata.@type=\"type.googleapis.com/google.cloud.audit.TransparencyLog\""
    type = "logging"
    }
    vpc-sc = {
    filter = "protoPayload.metadata.@type=\"type.googleapis.com/google.cloud.audit.VpcServiceControlAuditMetadata\""
    type = "logging"
    }
    workspace-audit-logs = {
    filter = "logName:\"/logs/cloudaudit.googleapis.com%2Fdata_access\" and protoPayload.serviceName:\"login.googleapis.com\""
    type = "logging"
    }
    empty-audit-logs = {
    filter = ""
    type = "logging"
    }
    }
    org_policies_config = {
      constraints = {
        "ALLOWED_POLICY_MEMBER_DOMAINS" = []
        }
      }
    fast_features = {
    envs = true
    }
    assured_workloads = {
    regime = "COMPLIANCE_REGIME"
    location = "LOCATION"
    }
    bootstrap_project = "BOOTSTRAP_PROJECT_ID"
    alert_email = "ALERT_EMAIL"
    

    更改下列內容:

    • BILLING_ACCOUNT_ID:用於部署環境的帳單帳戶。如要查看帳單帳戶資訊,請前往 Google Cloud 控制台。

      前往「帳單」頁面

    • REGION:部署資源的主要區域。IL5 和 FedRAMP 的預設值為 us-east4

      如要新增次要區域來部署資源,請新增 secondary=secondary

    • DOMAIN:完整網域名稱 (FQDN)。如要查看 FQDN,請執行 gcloud organizations list

    • ORGANIZATION:Google Cloud 機構的機構 ID。如要查看機構 ID,請執行 gcloud organizations list

    • CUSTOMER_ID:Google Workspace 目錄客戶 ID。如要查看 ID,請執行 gcloud organizations list

    • PREFIX:要附加至已部署專案和資源名稱的前置字串。專案名稱必須是全域不重複的名稱,且前置字元不得超過六個。如果專案名稱重複,就會發生 409 錯誤。

    • ALLOWED_POLICY_MEMBER_DOMAINS:視需要更新其他顧客 ID。詳情請參閱「透過網域限制分享功能,限制身分」。

    • COMPLIANCE_REGIME:這個環境的法規遵循制度,可以是 IL4IL5FEDRAMP_HIGHCOMPLIANCE_REGIME_UNSPECIFIED。如不想使用 Assured Workloads,請將這個值設為 COMPLIANCE_REGIME_UNSPECIFIED

    • LOCATION:要部署資源的美國區域。不支援雙區域,例如 NAM9 或洲。

    • BOOTSTRAP_PROJECT_ID:您在「設定 Google Cloud」中建立的啟動專案 ID。

    • ALERT_EMAIL:用來接收記錄快訊通知的電子郵件地址。

  5. 執行 terraform init

  6. 執行 terraform apply

    terraform apply -var bootstrap_user=$(gcloud config list --format
     'value(core.account)')
    
  7. 在系統提示時輸入 yes

  8. 切換至新專案:

    gcloud config set project PREFIX-prod-iac-core-0
    
  9. 複製新的本機 Terraform 供應商檔案:

    gcloud storage cp gs://PREFIX-prod-iac-core-outputs-0/providers/0-bootstrap-providers.tf ./
    
  10. 將狀態從本機遷移至遠端:

    terraform init --migrate-state
    
  11. 在系統提示時輸入 yes

  12. 執行 ./import.sh

  13. 再次執行 terraform apply。在系統提示時輸入 yes

執行第 1 階段:資源管理

第 1 階段會在機構層級建立不同的資料夾、專案和服務帳戶,供後續階段使用。如要建立環境,您必須更新 fast/stages-aw/1-resman 中的 terraform.tfvars 檔案,加入 tenants 變數。每個租戶 (例如特定聯邦機構或內部開發群組) 都有專屬的獨立邊界,可執行工作負載。每個租戶都會沿用在第 0 階段和第 2 階段建立的集中式安全控管、網路邊界、政策護欄和稽核記錄接收器。

  1. 如果使用外部帳單帳戶,請參閱「使用外部帳單帳戶時設定帳單」。

  2. 將目錄變更為 fast/stages-aw/1-resman

  3. 複製 terraform.tfvars.sample 檔案:

    cp terraform.tfvars.sample terraform.tfvars
    
  4. 按照下列方式更新 terraform.tfvars

    tenants = {
    ten-1 = {
      admin_principal = "group:gcp-devops@DOMAIN"
      descriptive_name = "TENANT_ONE_NAME"
      locations = {
        gcs = "REGION"
        kms = "REGION"
        }
      },
    ten-2 = {
      admin_principal = "group:gcp-devops@DOMAIN"
      descriptive_name = "TENANT_TWO_NAME"
      locations = {
        gcs = "REGION"
        kms = "REGION"
        }
      }
    }
    fast_features = {
    envs = true
    }
    envs_folders = {
    Prod = {
      admin = "gcp-organization-admins@DOMAIN"
    },
    Int = {
      admin = "gcp-organization-admins@DOMAIN"
    },
    Test = {
      admin = "gcp-organization-admins@DOMAIN"
    }
    }
    

    更改下列內容:

    • DOMAIN:主要完整網域名稱 (FQDN)。如要查看 FQDN,請執行 gcloud organizations list

    • TENANT_ONE_NAME:部署的第一個房客專案名稱。最多只能使用六個字元。

    • REGION:部署資源的主要區域。IL5 和 FedRAMP 的預設值為 us-east4

    • TENANT_TWO_NAME:部署的第二個房客專案名稱。最多只能使用六個字元。

    視需要新增任意數量的租戶定義。

  5. 從 Cloud Storage 複製 tfvars 檔案:

    gcloud storage cp gs://PREFIX-prod-iac-core-outputs-0/providers/1-resman-providers.tf ./ &&
    gcloud storage cp gs://PREFIX-prod-iac-core-outputs-0/tfvars/0-globals.auto.tfvars.json ./ &&
    gcloud storage cp gs://PREFIX-prod-iac-core-outputs-0/tfvars/0-bootstrap.auto.tfvars.json ./
    
  6. 執行 terraform init

  7. 執行 terraform apply。 在系統提示時輸入 yes

執行第 2 階段:建立網路

第 2 階段包含兩種網路選項:FedRAMP 高等風險IL4 或 IL5

設定 FedRAMP 高影響等級網路

  1. 如果使用外部帳單帳戶,請參閱「使用外部帳單帳戶時設定帳單」。

  2. 將目錄變更為 fast/stages-aw/2-networking-a-fedramp-high

  3. 從 Cloud Storage bucket 複製供應商和全域 tfvars 檔案:

    gcloud storage cp gs://PREFIX-prod-iac-core-outputs-0/providers/2-networking-providers.tf ./ && \
    gcloud storage cp gs://PREFIX-prod-iac-core-outputs-0/tfvars/0-globals.auto.tfvars.json ./ && \
    gcloud storage cp gs://PREFIX-prod-iac-core-outputs-0/tfvars/0-bootstrap.auto.tfvars.json ./ && \
    gcloud storage cp gs://PREFIX-prod-iac-core-outputs-0/tfvars/1-resman.auto.tfvars.json ./
    
  4. 複製 terraform.tfvars.sample 檔案:

    cp terraform.tfvars.sample terraform.tfvars
    
  5. terraform.tfvars 檔案中,更新自訂子網路、Proxy 子網路、防火牆規則、具名 CIDR 和 DNS 回應政策規則。

  6. 執行 terraform init

  7. 執行 terraform apply。 在系統提示時輸入 yes

設定 IL4 或 IL5 的網路

這個步驟會在網路帳戶中部署一對 Palo Alto VM 系列新一代防火牆 (NGFW)。NGFW 會使用「自備授權」(BYOL) 部署映像檔,您必須使用 Palo Alto 控制台上傳 VM 程式碼並註冊。如需更多操作說明,請參閱 2-networking-b-il5-ngfw 階段資料夾中的 README。

  1. 如果使用外部帳單帳戶,請參閱「使用外部帳單帳戶時設定帳單」。

  2. 將目錄變更為 fast/stages-aw/2-networking-b-il5-ngfw

  3. 從 Cloud Storage bucket 複製供應商和全域 tfvars 檔案:

    gcloud storage cp gs://PREFIX-prod-iac-core-outputs-0/providers/2-networking-providers.tf ./ && \
    gcloud storage cp gs://PREFIX-prod-iac-core-outputs-0/tfvars/0-globals.auto.tfvars.json ./ && \
    gcloud storage cp gs://PREFIX-prod-iac-core-outputs-0/tfvars/0-bootstrap.auto.tfvars.json ./ && \
    gcloud storage cp gs://PREFIX-prod-iac-core-outputs-0/tfvars/1-resman.auto.tfvars.json ./
    
  4. 複製 terraform.tfvars.sample 檔案:

    cp terraform.tfvars.sample terraform.tfvars
    
  5. terraform.tfvars 檔案中,更新自訂子網路 (包括管理子網路)、Proxy 子網路、防火牆規則、具名 CIDR 和 DNS 回應政策規則。

  6. 執行 terraform init

  7. 執行 terraform apply。 在系統提示時輸入 yes

    如果收到服務帳戶或 Cloud Key Management Service 不存在的錯誤訊息,請在控制台中按一下 PREFIX-net-vdss-host 儲存空間帳戶中的「設定」。系統會產生服務帳戶。

執行第 3 階段:安全性和稽核帳戶設定

階段 3 會設定安全性和稽核專案。安全專案 (prod-sec-core-0) 包含 Cloud KMS,且可包含 Secret Manager。在 IL5 中,Compute Engine、Google Kubernetes Engine (GKE)、Cloud Storage 和 Cloud SQL 預設會啟用 CMEK。系統會強制執行下列組織政策限制:

  • gcp.restrictNonCmekServices
    • denied_values: "compute.googleapis.com"
    • denied_values: "container.googleapis.com"
    • denied_values: "storage.googleapis.com"
    • denied_values: "sqladmin.googleapis.com"
  • gcp.restrictCmekCryptoKeyProjectsgcp.restrictCmekCryptoKeyProjects包含可使用 CMEK 的專案清單。

prod-sec-core-0 專案中,系統會設定下列項目:

  • 系統會授予 Cloud KMS 受限管理員受限管理員角色,方便他們將解密權限授予其他服務。
  • 系統會佈建不同位置的 Cloud KMS 金鑰環。鑰匙圈位置必須與服務位置相符。舉例來說,多區域金鑰環無法用於單一區域的儲存空間值區。

稽核專案包含稽核記錄的記錄儲存區。

安全性管理員負責安全性專案,稽核人員則負責稽核專案。

  1. 如果使用外部帳單帳戶,請參閱「使用外部帳單帳戶時設定帳單」。

  2. 將目錄變更為 fast/stages-aw/3-security

  3. 從 Cloud Storage bucket 複製設定檔:

    gcloud storage cp gs://PREFIX-prod-iac-core-outputs-0/providers/3-security-providers.tf ./ &&
    gcloud storage cp gs://PREFIX-prod-iac-core-outputs-0/tfvars/0-globals.auto.tfvars.json ./ &&
    gcloud storage cp gs://PREFIX-prod-iac-core-outputs-0/tfvars/0-bootstrap.auto.tfvars.json ./ &&
    gcloud storage cp gs://PREFIX-prod-iac-core-outputs-0/tfvars/1-resman.auto.tfvars.json ./
    
  4. 執行 terraform init

  5. 執行 terraform apply。 在系統提示時輸入 yes

    如果服務帳戶發生問題,請重新執行 terraform apply

  6. 執行 ./sa_lockdown.sh,停用部署期間使用的服務帳戶。

使用外部帳單帳戶時設定帳單

如果您使用外部帳單帳戶,必須將「帳單帳戶管理員」角色新增至下列服務帳戶:

  • PREFIX-prod-resman-0@PREFIX-prod-iac-core-0.iam.gserviceaccount.com:這個帳戶是在第 0 階段建立。

  • PREFIX-prod-resman-net-0@PREFIX-prod-iac-core-0.iam.gserviceaccount.com:這個服務帳戶是在第 1 階段建立。

  • PREFIX-security-0@PREFIX-prod-iac-core-0.iam.gserviceaccount.com:這個服務帳戶是在第 2 階段建立。

如要將角色新增至這些服務帳戶,請完成「存取 Cloud Billing 帳戶的「權限」面板」和「在「權限」面板中更新角色和主體」步驟。

修改租戶專案

為現有的 Stellar Engine 部署項目新增或移除房客專案時,請按照下列步驟操作。

  1. 驗證並設定有效專案:

    gcloud auth login
    gcloud config set project PREFIX-prod-iac-core-0
    gcloud auth application-default login
    
  2. 為各階段啟用服務帳戶:

    1. 將目錄變更為 fast/stages-aw/3-security

    2. 執行 ./sa_lockdown.sh --enable

  3. 申請第 1 階段:

    1. 將目錄變更為 fast/stages-aw/1-resman

    2. 根據新規定更新 terraform.tfvars 中的資訊。

    3. 執行 terraform init

    4. 執行 terraform apply。 在系統提示時輸入 yes

  4. 套用第 2 階段:

    1. 將目錄變更為下列其中一個網路資料夾:

    2. 從 Cloud Storage bucket 複製 1-resman tfvars 檔案:

    gcloud storage cp gs://PREFIX-prod-iac-core-outputs-0/tfvars/1-resman.auto.tfvars.json ./
    
    1. 執行 terraform init

    2. 執行 terraform apply。 在系統提示時輸入 yes

  5. 停用各階段的服務帳戶:

    1. 將目錄變更為 fast/stages-aw/3-security

    2. 執行 ./sa_lockdown.sh

疑難排解

本節說明一些常見錯誤和解決方法。

第 1 階段發生 BigQuery 無法使用錯誤

如果收到錯誤訊息,指出 bigquery.googleapis.com 無法在 Assured Workloads 中使用,請完成下列步驟:

  1. 前往控制台的「Assured Workloads」頁面。

    Assured Workloads

  2. 選取 StellarEngine-COMPLIANCE_REGIME 資料夾和「Networking」資料夾 (如有)。

  3. 按一下「查看可用更新」

  4. 前往「允許的服務」

  5. 按一下「允許服務」,新增 BigQuery API。

  6. 如果系統提示,請按一下「是」確認所選項目。

  7. 等待約兩分鐘,然後重新執行 terraform apply

    terraform apply -var bootstrap_user=$(gcloud config list --format 'value(core.account)')
    
  8. 在系統提示時輸入 yes

啟動專案無法再存取帳單帳戶

如果啟動專案無法存取帳單帳戶,請重新啟用啟動專案的計費功能。

啟用計費功能

Cloud KMS 金鑰錯誤

如果建構程序過程中發生金鑰錯誤,您可能必須手動啟用金鑰。如需操作說明,請參閱「啟用金鑰版本」。

如果收到這些錯誤,請稍候約一分鐘,然後重新執行 terraform apply

在 Windows 電腦上,符號連結可能無法運作。您可能需要手動複製特定檔案,特別是第 2 階段的 psc.tflog-metric-alerts.tf

帳單或配額問題

如果遇到帳單或配額問題,請確認配額專案是否已設定。執行下列指令即可設定:

gcloud auth application-default set-quota-project PREFIX-prod-iac-core-0

您也可以視需要使用其他專案。

後續步驟

  • 如需其他安全性設定,請參閱 Gemini 安全性標準

  • 整合 Google Security Operations 等 SIEM 解決方案,監控資源。將 SIEM 分隔到不同的專案和虛擬私有雲,與收集資料的位置分開。 Google Cloud