使用角色型存取權控管

本頁說明如何在 Cloud Data Fusion 執行個體中開始使用角色型存取權控管 (RBAC)。RBAC 適用於 6.5 以上版本的 Cloud Data Fusion 執行個體。

詳情請參閱角色型存取權控管 (RBAC) 總覽

建議:除非是為了自動化,否則請使用 Google Cloud 控制台執行 RBAC 工作。

為現有執行個體啟用 RBAC

您可以為執行 6.5 以上版本的現有 Cloud Data Fusion 執行個體啟用 RBAC。

控制台

如要在現有的 Cloud Data Fusion 執行個體上啟用 RBAC,請按照下列步驟操作:

  1. 前往執行個體詳細資料:
    1. 在 Google Cloud 控制台中,前往 Cloud Data Fusion 頁面。

    2. 按一下「Instances」(執行個體) ,然後點選執行個體名稱,前往「Instance details」(執行個體詳細資料) 頁面。

      前往「Instances」(執行個體)

  2. 確認執行個體已升級至 6.5 以上版本。如果執行個體版本低於 6.5,請升級至 6.5 以上版本。
  3. 按一下「啟用 RBAC」
  4. 按一下 [儲存]
  5. 等待執行個體更新作業完成。

gcloud

如要在現有的 Cloud Data Fusion 執行個體上啟用 RBAC,請執行下列指令:

gcloud beta data-fusion instances update --enable_rbac --location=REGION INSTANCE_ID

REST API

使用 Cloud Data Fusion patch API,為現有執行個體啟用 RBAC。將 enableRbac 旗標設為 true,並使用 updateMask 查詢參數,範例如下:

export PROJECT=PROJECT_ID
export LOCATION=REGION
export INSTANCE=INSTANCE_ID
export DATA_FUSION_API_NAME=datafusion.googleapis.com
alias gcurl='curl --header "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json"'
gcurl https://$DATA_FUSION_API_NAME/v1beta1/projects/$PROJECT/locations/$LOCATION/instances/$INSTANCE?updateMask=enable_rbac -X PATCH -d '{"enable_rbac": "true"}'

停用現有執行個體的 RBAC

如果您有已啟用 RBAC 的現有執行個體,可以視需要停用 RBAC。停用 RBAC 不會影響執行個體中的任何現有管道或設定。這項功能只會停用跨命名空間的安全隔離機制。

控制台

如要停用現有 Cloud Data Fusion 執行個體的 RBAC,請按照下列步驟操作:

  1. 前往執行個體詳細資料:

    1. 在 Google Cloud 控制台中,前往 Cloud Data Fusion 頁面。

    2. 按一下「Instances」(執行個體) ,然後點選執行個體名稱,前往「Instance details」(執行個體詳細資料) 頁面。

      前往「Instances」(執行個體)

  2. 按一下「停用 RBAC」

  3. 按一下 [儲存]

  4. 等待執行個體更新作業完成。

gcloud

如要為現有執行個體停用 RBAC,請使用 --no-enable_rbac 引數,而非 --enable-rbac。

gcloud beta data-fusion instances update --no-enable_rbac --location=REGION INSTANCE_ID

使用範例:

gcloud beta data-fusion instances update --no-enable_rbac --location=us-east1 cdf-test-instance

REST API

使用 Cloud Data Fusion patch API,為現有執行個體停用 RBAC。將 enableRbac 旗標設為 false,並使用 updateMask 查詢參數,範例如下:

export PROJECT=PROJECT_ID
export LOCATION=REGION
export INSTANCE=INSTANCE_ID
export DATA_FUSION_API_NAME=datafusion.googleapis.com
alias gcurl='curl --header "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json"'
gcurl https://$DATA_FUSION_API_NAME/v1beta1/projects/$PROJECT/locations/$LOCATION/instances/$INSTANCE?updateMask=enable_rbac -X PATCH -d '{"enable_rbac": "false"}'

建立啟用 RBAC 的新執行個體

控制台

如要建立已啟用 RBAC 的新 Cloud Data Fusion 執行個體,請按照下列步驟操作:

  1. 前往 Cloud Data Fusion 的「Instances」(執行個體) 頁面

  2. 按一下「執行個體」

    前往「Instances」(執行個體)

  3. 按一下「建立執行個體」,然後輸入執行個體詳細資料。

  4. 選取「Enterprise」。RBAC 僅支援 Enterprise 版。

  5. 在「進階選項」中,選取「啟用精細的角色型存取控管」

    這項功能僅適用於使用 Cloud Data Fusion 6.5 以上版本的執行個體。

  6. 點選「建立」

gcloud

如要建立啟用 RBAC 的新執行個體,請執行下列指令:

gcloud beta data-fusion instances create --edition=enterprise \
--enable_rbac \
--location=REGION INSTANCE_ID \
--version=6.5.0

使用範例:

gcloud beta data-fusion instances create --edition=enterprise \
--enable_rbac \
--location=us-east1 \
--version=6.5.0

REST API

如要使用 REST API 建立啟用 RBAC 的執行個體,請在執行個體選項中傳遞設為 trueenableRbac 旗標,如下列指令所示:

export PROJECT=PROJECT_ID
export LOCATION=REGION
export INSTANCE=INSTANCE_ID
export DATA_FUSION_API_NAME=datafusion.googleapis.com
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://$DATA_FUSION_API_NAME/v1beta1/projects/$PROJECT/locations/$LOCATION/instances?instanceId=$INSTANCE -X POST -d '{"description": "RBAC CDF instance created through REST", "type": "ENTERPRISE", "enableRbac": "true"}'

將預先定義的 Cloud Data Fusion 角色授予使用者 (必要)

啟用 RBAC 後,您可以將角色授予主體,讓他們在執行個體或命名空間中執行特定動作。如要決定最符合您需求的角色,請參閱預先定義的 Cloud Data Fusion 角色安全性建議

控制台

如要將預先定義的 Cloud Data Fusion 角色授予主體,請按照下列步驟操作:

  1. 前往 Cloud Data Fusion 的「Permissions」(權限) 頁面。

    前往「權限」

  2. 按一下「新增」圖示

    系統隨即會開啟「新增使用者存取權」對話方塊。

  3. 在「New members」(新增成員) 欄位中,輸入要授予角色的主體清單 (使用者、群組或服務帳戶電子郵件)。

  4. 選取要授予這些權限的每個執行個體旁邊的方塊。

    選取執行個體

  5. 前往「角色」欄,然後選取所選執行個體旁邊的下拉式選單。

    1. 如要授予執行個體管理員權限,請選取「執行個體管理員」

    2. 如要授予命名空間層級的權限,請選取「命名空間使用者」

      選取命名空間使用者角色

      1. 如要授予命名空間層級的權限,請按一下「選取」

        「新增存取權」對話方塊隨即開啟。

      2. 選取命名空間,然後選取要為命名空間授予的預先定義 Cloud Data Fusion 角色。

      3. 按一下「選取」即可儲存新設定。

      4. 選用:如要授予其他執行個體的命名空間權限,請重複執行步驟 5。

  6. 按一下 [儲存]

    如要驗證已授予的角色,請參閱「在 Google Cloud 控制台中驗證角色」。

gcloud

您可以使用 Google Cloud CLI 透過程式輔助方式控管存取權

如要使用 gcloud CLI 授予角色,請使用以半形逗號分隔的使用者 ID 清單,格式如下:

[user|group|serviceAccount][email_address]

提供以下這些值:

  • user:useremail@example.com
  • group:groupemail@example.com
  • serviceAccount:serviceaccount@project.iam.gserviceaccount.com

如需更多範例,請參閱「授予角色」。

授予執行個體存取者角色 (必要)

您必須先授予使用者執行個體的存取權,方法是在執行個體上授予「存取者」角色:

  1. 使用下列指令匯出下列變數,並將變數換成您自己的值:

    export PROJECT=PROJECT_ID
    export INSTANCE=INSTANCE_ID
    export REGION=REGION
    export USER_ID=EMAIL
    export USER_TYPE=USER_TYPE
    

    將下列變數替換為您自己的值:

    • PROJECT_ID:專案名稱。
    • INSTANCE_ID:執行個體的名稱。
    • REGION:專案所屬的區域。
    • EMAIL:主體的電子郵件地址。
    • USER_TYPE:使用者類型可以是 user、group 或 serviceAccount。
  2. 執行下列指令來指派角色:

    gcloud beta data-fusion add-iam-policy-binding ${INSTANCE} --project ${PROJECT} --location=${REGION} --member="${USER_TYPE}:${USER_ID}" --role="roles/datafusion.accessor"
    

將角色授予命名空間 (視用途而定)

視用途而定,使用下列指令授予角色:

  1. 使用下列指令匯出下列變數,並將變數換成您自己的值:

    export PROJECT=PROJECT_ID
    export INSTANCE=INSTANCE_ID
    export REGION=REGION
    export NAMESPACE=NAMESPACE
    export USER_ID=EMAIL
    export USER_TYPE=USER_TYPE
    

    將下列變數替換為您自己的值:

    • PROJECT_ID:專案名稱。
    • INSTANCE_ID:執行個體的名稱。
    • REGION:專案所屬的區域。
    • NAMESPACE:命名空間名稱。
    • EMAIL:主體的電子郵件地址。
    • USER_TYPE:使用者類型可以是 user、group 或 serviceAccount。
  2. 執行下列指令,在指定命名空間中將角色指派給主體:

    gcloud beta data-fusion add-iam-policy-binding ${INSTANCE} --project ${PROJECT} --location=${REGION} --namespace=${NAMESPACE} --member="${USER_TYPE}:${USER_ID}" --role="roles/ROLE_NAME"
    

    ROLE_NAME 替換為下列其中一個值:

    • 如要為命名空間指派編輯者角色,請使用 datafusion.editor
    • 如要為命名空間設定「運算子」角色,請使用 datafusion.operator
    • 如要為命名空間指派開發人員角色,請使用 datafusion.developer
    • 如要為命名空間指派檢視者角色,請使用 datafusion.viewer

選用:撤銷命名空間角色

如要撤銷授予使用者的特定命名空間角色,請使用下列指令:

export PROJECT=PROJECT_ID
export INSTANCE=INSTANCE_ID
export REGION=REGION
export NAMESPACE=NAMESPACE
export USER_ID=EMAIL
# User type can be one of: user, group, or serviceAccount.
export USER_TYPE=USER_TYPE
export ROLE=ROLE_NAME
gcloud beta data-fusion remove-iam-policy-binding ${INSTANCE} --project ${PROJECT} --location=${REGION} --namespace=${NAMESPACE} --member="${USER_TYPE}:${USER_ID}" --role="${ROLE}"

選用:列出在特定命名空間中授予的角色

如要列出特定命名空間中授予的所有角色,請使用下列指令擷取 IAM 政策:

export PROJECT=PROJECT_ID
export INSTANCE=INSTANCE_ID
export REGION=REGION
export NAMESPACE=NAMESPACE
gcloud beta data-fusion get-iam-policy ${INSTANCE} --project ${PROJECT} --location=${REGION} --namespace=${NAMESPACE}

REST API

授予執行個體存取者角色 (必要)

您必須先授予使用者執行個體的存取權,方法是在執行個體上授予「存取者」角色。

強烈建議:使用 gcloud CLI 授予「存取者」角色。

  1. 授予執行個體的存取者角色:

    export PROJECT=PROJECT_ID
    export INSTANCE=INSTANCE_ID
    export REGION=REGION
    export USER_ID=EMAIL
    # User type can be one of: user, group, or serviceAccount.
    export USER_TYPE=USER_TYPE
    alias gcurl='curl --header "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json"'
    
  2. 擷取目前的身分與存取權管理政策,並儲存至檔案:

    gcurl https://datafusion.googleapis.com/v1beta1/projects/${PROJECT}/locations/${REGION}/instances/${INSTANCE}:getIamPolicy > iam_policy.json
    
  3. 在政策中新增角色和使用者的繫結。例如:

    {
      "policy": {
        "bindings": [
          {
            "role": "roles/datafusion.accessor",
            "members": [
              "${USER_TYPE}:${USER_ID}"
            ]
          }
        ]
      }
    }
    
  4. 更新執行個體的 IAM 政策:

    gcurl \
      -d @iam_policy.json \
      https://datafusion.googleapis.com/v1beta1/projects/${PROJECT}/locations/${REGION}/instances/${INSTANCE}:setIamPolicy
    

將角色授予命名空間 (視用途而定)

視用途而定,使用下列指令授予角色:

  1. 使用下列指令匯出下列變數,並將變數換成您自己的值:

    export PROJECT=PROJECT_ID
    export INSTANCE=INSTANCE_ID
    export REGION=REGION
    export NAMESPACE=NAMESPACE
    export USER_ID=EMAIL
    export USER_TYPE=USER_TYPE
    alias gcurl='curl --header "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json"'
    

    將下列變數替換為您自己的值:

    • PROJECT_ID:專案名稱。
    • INSTANCE_ID:執行個體的名稱。
    • REGION:專案所屬的區域。
    • NAMESPACE:命名空間名稱。
    • EMAIL:主體的電子郵件地址。
    • USER_TYPE:使用者類型可以是 user、group 或 serviceAccount。
  2. 擷取目前的身分與存取權管理政策,並儲存至檔案:

      gcurl https://datafusion.googleapis.com/v1beta1/projects/${PROJECT}/locations/${REGION}/instances/${INSTANCE}/namespaces/{NAMESPACE}:getIamPolicy > iam_policy.json
    

    請將 iam_policy.json 替換成您的檔案名稱。

  3. 在政策檔案中新增角色和使用者的繫結。舉例來說,政策檔案可能如下所示:

    {
      "policy": {
        "bindings": [
          {
            "role": "roles/ROLE_NAME",
              "members": [
              "${USER_TYPE}:${USER_ID}"
            ]
          }
        ]
      }
    }
    

    您可以為特定政策指定多個角色繫結,也可以在特定角色繫結的成員清單中指定多個主體。針對指定主體,將 ROLE_NAME 替換為下列其中一個值:

    • 如要為命名空間指派編輯者角色,請使用 datafusion.editor
    • 如要為命名空間設定「運算子」角色,請使用 datafusion.operator
    • 如要為命名空間指派開發人員角色,請使用 datafusion.developer
    • 如要為命名空間指派檢視者角色,請使用 datafusion.viewer
  4. 執行下列指令來更新政策檔案:

    gcurl -d @iam_policy.json \
    https://datafusion.googleapis.com/v1beta1/projects/${PROJECT}/locations/${REGION}/instances/${INSTANCE}/namespaces/{NAMESPACE}:setIamPolicy
    

    請將 iam_policy.json 替換成您的檔案名稱。

在 Google Cloud 控制台中驗證角色

在 Cloud Data Fusion 的「Permissions」(權限) 頁面中,查看及編輯現有角色。

前往「權限」

使用政策檔案驗證角色

使用 gcloud CLI 或 REST API,在 IAM 政策檔案中,確認角色已授予正確的使用者。

在下列 IAM 政策檔案範例中,使用者 alice@example.com 具有 Data Fusion 開發人員角色:

bindings:
- members:
  - user:alice@example.com
  role: roles/datafusion.developer
- members:
  - user:bob@example.com
  - serviceAccount:myserviceaccount@myproject.iam.gserviceaccount.com
  role: roles/datafusion.operator
- members:
  - user:james@example.com
  - user:mike@example.com
  - group:mygroup@googlegroups.com
  role: roles/datafusion.editor
etag: BwXA8BAHYmw=

取得執行個體的 IAM 政策

gcloud

export PROJECT=PROJECT_ID
export INSTANCE=INSTANCE_ID
export REGION=REGION
gcloud beta data-fusion get-iam-policy ${INSTANCE} --project ${PROJECT} --location=${REGION}

cURL

export PROJECT=PROJECT_ID
export INSTANCE=INSTANCE_ID
export REGION=REGION
curl -H "Authorization: Bearer "$(gcloud auth print-access-token) \
https://datafusion.googleapis.com/v1beta1/projects/${PROJECT}/locations/${REGION}/instances/${INSTANCE}:getIamPolicy

取得命名空間的身分與存取權管理政策

gcloud

export PROJECT=PROJECT_ID
export INSTANCE=INSTANCE_ID
export REGION=REGION
export NAMESPACE=NAMESPACE
gcloud beta data-fusion get-iam-policy ${INSTANCE} --project ${PROJECT} --location=${REGION} --namespace=${NAMESPACE}

cURL

export PROJECT=PROJECT_ID
export INSTANCE=INSTANCE_ID
export NAMESPACE=NAMESPACE
export REGION=REGION
curl -H "Authorization: Bearer "$(gcloud auth print-access-token) \
https://datafusion.googleapis.com/v1beta1/projects/${PROJECT}/locations/${REGION}/instances/${INSTANCE}/namespaces/${NAMESPACE}:getIamPolicy

後續步驟