使用 IAM 限制 Cloud Deploy 存取權

與所有 Google Cloud 產品一樣,Identity and Access Management 會控管哪些已通過驗證的使用者和服務帳戶可以執行哪些動作,藉此保護 Cloud Deploy。

本文說明身分與存取權管理機制的部分功能,並提供相關操作說明,協助您保護透過 Cloud Deploy 管理的應用程式推送作業。以下列舉幾種限制 Cloud Deploy 中動作和資源存取權的具體方法:

事前準備

關於 IAM 進階功能

除了角色和權限,Cloud Deploy 也會使用 IAM 的下列功能來提供這些控制項:

關於 IAM 政策

IAM 政策是指繫結和中繼資料的集合。角色繫結會將單一角色授予一或多個主體 (使用者、群組或服務帳戶),以及任何可控制繫結是否生效的環境專屬條件

如要進一步瞭解 IAM 政策,請參閱「瞭解政策」。

關於 IAM 條件

透過 IAM 條件,您可以根據執行階段計算的條件,控管 Cloud Deploy 資源和動作的存取權。舉例來說,您可以限制宣傳活動只能在指定時間範圍內進行。

關於 API 屬性

建構 IAM 條件時,您可以參照 API 屬性,取得要求的執行階段資訊。舉例來說,您可以使用 API 屬性取得要求所指資源的名稱。然後與主體可存取的資源進行比較。

使用進階 IAM 功能授予精細存取權

這些進階 IAM 功能可讓您在特定條件下,控管特定資源和資源類型的存取權。

本節中的程序會授予特定資源 (目標、傳送管道) 的存取權。您也可以在專案層級授予存取權,這會影響該專案中的所有交付管道或所有目標。如要為專案設定 IAM 政策,請使用 gcloud projects set-iam-policy 指令:

gcloud projects set-iam-policy PROJECT_ID POLICY_FILE

授予特定推送管道的存取權

只要授予適當的角色,即可授予主體建立、修改及刪除所有發布管道的權限。但有時您可能會想為一或多個特定管道授予主體這項存取權。

如要這麼做,請使用角色繫結,將 roles/clouddeploy.developer 角色繫結至該主體,然後套用政策 (使用 setIamPolicy) 時,指定要授予存取權的交付管道。

如要授予特定推送管道的存取權,請按照下列步驟操作:

  1. 建立政策檔案,並加入下列繫結:

    bindings:
    - role: roles/clouddeploy.developer
      members:
      - user:fatima@example.com
    

    上述範例是將角色授予使用者,但您也可以將角色授予群組或服務帳戶。

  2. 呼叫下列指令,將政策檔案套用至特定發布管道:

    gcloud deploy delivery-pipelines set-iam-policy --delivery-pipeline=PIPELINE_NAME --region=REGION POLICY_FILE
    

授予設定特定目標的存取權

如要授予主體特定目標的存取權,可以使用角色繫結。如要這麼做,請將 roles/clouddeploy.operator 角色繫結至該主體,然後在套用政策 (使用 setIamPolicy) 時,指定要授予存取權的目標。

主體可透過特定目標的存取權更新及刪除該目標。

  1. 建立政策檔案,並加入下列繫結:

    bindings:
    - role: roles/clouddeploy.operator
      members:
      - group:cd_operators@example.com
    

    上述範例是將角色授予群組,但您也可以將角色授予使用者或服務帳戶。

  2. 呼叫下列指令,將政策檔案套用至特定目標:

    gcloud deploy targets set-iam-policy TARGET --region=REGION POLICY_FILE
    

授予將版本推送至特定目標的權限

此程序假設您已制定政策,將角色繫結至主體。在此,我們新增指定目標的條件:

  1. 建立具有下列繫結的政策檔案:

    bindings:
    - role: roles/clouddeploy.operator
      members:
      - serviceAccount:prod_operator@project-12345.iam.gserviceaccount.com
      condition:
        expression: api.getAttribute("clouddeploy.googleapis.com/rolloutTarget", "") == "prod"
        title: Deploy to prod
    

    在這個角色繫結中,condition 會採用鍵/值組合,其中鍵為 expression,值為 CEL 運算式。這個運算式會參照一組與要求相關的內容屬性,並評估為布林值。

    在本例中,當主體嘗試宣傳發行內容時,系統會評估運算式,確認宣傳目標與運算式中的目標相符。

    這個運算式會使用 API 屬性 clouddeploy.googleapis.com/rolloutTarget,這是主體嘗試升級的目標。運算式會將其與主體獲得宣傳存取權的目標進行比較。

  2. 為特定推送管道設定繫結:

    gcloud deploy delivery-pipelines set-iam-policy PIPELINE_NAME --region=REGION POLICY_FILE
    

    如要為所有傳送管道設定這個繫結,可以在專案層級設定:

    gcloud projects set-iam-policy PROJECT POLICY_FILE
    

授予核准特定目標推出作業的權限

本節中的繫結會授予主體核准管道推出作業的權限,並包含將權限套用至prod目標的條件。

  1. 建立具有下列繫結的政策檔案:

    bindings:
    - role: roles/clouddeploy.approver
      members:
      - serviceAccount:prod_operator@project-12345.iam.gserviceaccount.com
      condition:
        expression: api.getAttribute("clouddeploy.googleapis.com/rolloutTarget", "") == "prod"
        title: Deploy to prod
    

    在這個角色繫結中,condition 會採用鍵/值組合,其中鍵為 expression,值為 CEL 運算式。運算式會參照一組與要求相關的內容屬性,並評估為布林值。

    在本例中,當主體嘗試核准推出作業時,系統會評估運算式,確認目標符合運算式中的目標。

    運算式會使用 API 屬性 clouddeploy.googleapis.com/rolloutTarget (即推出目標),並與主體獲得核准存取權的目標進行比較。clouddeploy.googleapis.com/rolloutTarget 屬性是 Cloud Deploy 支援的唯一 API 屬性。

  2. 為特定推送管道設定繫結:

    gcloud deploy delivery-pipelines set-iam-policy PIPELINE_NAME --region=REGION POLICY_FILE
    

    如要為所有傳送管道設定這個繫結,可以在專案層級設定:

    gcloud projects set-iam-policy PROJECT POLICY_FILE
    

授予在特定時間範圍內宣傳發行內容的權限

本節中的繫結會授予主體權限,以升級管道的版本,並包含指定繫結生效時間範圍的條件。

  1. 建立具有下列繫結的政策檔案:

    bindings:
    - role: roles/clouddeploy.operator
      members:
      - serviceAccount:prod_operator@project-12345.iam.gserviceaccount.com
      condition:
        expression: request.time.getDayOfWeek("America/Los_Angeles") > 0 && request.time.getDayOfWeek("America/Los_Angeles") < 6
        title: Promote during safe window
    

    在這個角色繫結中,condition 會採用鍵/值組合,其中鍵為 expression,值為 CEL 運算式。運算式會參照一組與要求相關的內容屬性,並評估為布林值。這個運算式會檢查要求時間是否為週一至週五。

    在本例中,當主體嘗試宣傳發行內容時,系統會評估運算式,確認宣傳目標符合運算式中的目標。

  2. 為特定推送管道設定繫結:

    gcloud deploy delivery-pipelines set-iam-policy PIPELINE_NAME --region=REGION POLICY_FILE
    

    如要為所有傳送管道設定這個繫結,可以在專案層級設定:

    gcloud projects set-iam-policy PROJECT POLICY_FILE
    

在特定時間範圍內授予核准推出動作的權限

本節中的繫結會授予主體核准推出作業的權限,並包含指定繫結生效時間範圍的條件

  1. 建立具有下列繫結的政策檔案:

    bindings:
    - role: roles/clouddeploy.approver
      members:
      - serviceAccount:prod_operator@project-12345.iam.gserviceaccount.com
      condition:
        expression: request.time.getDayOfWeek("America/Los_Angeles") > 0 && request.time.getDayOfWeek("America/Los_Angeles") < 6
        title: Approve during safe window
    

    在這個角色繫結中,condition 會採用鍵/值組合,其中鍵為 expression,值則為 CEL 運算式,該運算式會參照一組與要求相關的內容屬性,並評估為布林值。這個運算式會檢查要求時間是否為週一至週五。

    在本例中,當主體嘗試核准推出作業時,系統會評估運算式,確認推出目標與運算式中的目標相符。

  2. 為特定推送管道設定繫結:

    gcloud deploy delivery-pipelines set-iam-policy PIPELINE_NAME --region=REGION POLICY_FILE
    

    如要為所有傳送管道設定這個繫結,可以在專案層級設定:

    gcloud projects set-iam-policy PROJECT POLICY_FILE
    

根據工作類型授予重試工作的權限

本節中的繫結會根據工作類型,授予主體重試 Cloud Deploy 工作的權限

  1. 建立具有下列繫結的政策檔案:

    bindings:
    - role: roles/clouddeploy.operator
      members:
      - serviceAccount:prod_operator@project-12345.iam.gserviceaccount.com
      condition:
        expression: api.getAttribute("clouddeploy.googleapis.com/jobType", "") == "deploy"
        title: Retry deploy job
    

    在這個角色繫結中,condition 會採用鍵/值組合,其中鍵為 expression,值為 CEL 運算式。運算式會參照一組與要求相關的內容屬性,並評估為布林值。

    在本例中,當主體嘗試重試工作時,系統會評估運算式,確認工作類型與運算式中的工作類型相符。

    運算式會使用 API 屬性 clouddeploy.googleapis.com/jobType,可以是 deployverify

  2. 為特定推送管道設定繫結:

    gcloud deploy delivery-pipelines set-iam-policy PIPELINE_NAME --region=REGION POLICY_FILE
    

    如要為所有傳送管道設定這個繫結,可以在專案層級設定:

    gcloud projects set-iam-policy PROJECT POLICY_FILE