從 Hadoop 遷移權限
本文說明如何將 Apache Hadoop 分散式檔案系統 (HDFS)、Ranger HDFS 和 Apache Hive 的權限,遷移至 Cloud Storage 或 BigQuery 中的 Identity and Access Management (IAM) 角色。
權限遷移程序包含下列步驟:
- 首先建立主體規則集 YAML 設定檔,產生主體對應檔案。接著,請使用主體規則集 YAML 檔案和 HDFS 或 Ranger 中繼資料檔案,執行權限遷移工具,產生主體對應檔案。
- 首先建立權限規則集 YAML 檔案,產生目標權限對應檔案。接著,使用權限規則集 YAML 檔案、表格對應設定檔,以及 HDFS 或 Ranger 中繼資料檔案,執行權限遷移工具,產生目標權限對應檔案。
- 使用目標權限檔案執行權限遷移工具,將權限套用至 Cloud Storage 或 BigQuery。您也可以使用提供的 Python 指令碼產生 Terraform 檔案,自行套用權限。
事前準備
遷移權限前,請先確認您已完成下列事項:
- 安裝
dwh-migration-dumper
工具。 - 執行
dwh-migration-dumper
工具,為資料來源產生必要的中繼資料。
您也可以在發行套件中的 terraform.zip
檔案內找到 Terraform 產生器指令碼。
產生主體對應檔
主體對應檔案會定義對應規則,將來源中的主體對應至 Trusted Cloud IAM 主體。
如要產生主體對應檔,您必須先手動建立主體規則集 YAML 檔案,定義如何將來源主體對應至 Trusted Cloud IAM 主體。在主體規則集 YAML 檔案中,為每個來源定義對應規則,可以是 ranger
、HDFS
或兩者皆是。
以下範例顯示主體規則集 YAML 檔案,將 Apache Ranger 群組對應至 Trusted Cloud by S3NS中的服務帳戶:
ranger: user_rules: - skip: true group_rules: # Skip internal Ranger groups. - skip: true when: "group.groupSource == 0" # Map all roles to Google Cloud Platform service accounts. - map: type: value: serviceAccount email_address: expression: "group.name + 'my-service-account@my-project.s3ns-system.iam.gserviceaccount.com'" role_rules: - skip: true hdfs: user_rules: - skip: true group_rules: - skip: true other_rules: - skip: true
以下範例顯示主體規則集 YAML 檔案,將 HDFS 使用者對應至特定 Trusted Cloud 使用者:
ranger: user_rules: - skip: true group_rules: - skip: true role_rules: - skip: true hdfs: user_rules: # Skip user named 'example' - when: "user.name == 'example'" skip: true # Map all other users to their name at google.com - when: "true" map: type: value: user email_address: expression: "user.name + '@google.com'" group_rules: - skip: true other_rules: - skip: true
如要進一步瞭解如何建立主體規則集 YAML 檔案,請參閱「規則集 YAML 檔案」。
建立主體規則集 YAML 檔案後,請將檔案上傳至 Cloud Storage bucket。您也必須納入 HDFS 檔案、dwh-migration-dumper
工具產生的 Apache Ranger 檔案,或兩者皆納入,具體取決於您要從哪個來源遷移權限。接著,您可以執行權限遷移工具,產生主體對應檔案。
以下範例說明如何執行權限遷移工具,從 HDFS 和 Apache Ranger 遷移,產生名為 principals.yaml
的主體對應檔案。
./dwh-permissions-migration expand \ --principal-ruleset gs://MIGRATION_BUCKET/principals-ruleset.yaml \ --hdfs-dumper-output gs://MIGRATION_BUCKET/hdfs-dumper-output.zip \ --ranger-dumper-output gs://MIGRATION_BUCKET/ranger-dumper-output.zip \ --output-principals gs://MIGRATION_BUCKET/principals.yaml
請將 MIGRATION_BUCKET
改成包含移轉檔案的 Cloud Storage 值區名稱。
執行工具後,請檢查產生的 principals.yaml
檔案,確認其中包含從來源對應至 IAM 主體的 Trusted Cloudprincipals.yaml
主體。您可以在執行後續步驟前手動編輯檔案。
產生目標權限檔案
目標權限檔案包含 Hadoop 叢集中來源權限集的對應資訊,可對應至 BigQuery 或 Cloud Storage 受管理資料夾的 IAM 角色。如要產生目標權限檔案,您必須先手動建立權限規則集 YAML 檔案,指定 Ranger 或 HDFS 的權限如何對應至 Cloud Storage 或 BigQuery。
以下範例會接受 Cloud Storage 的所有 Ranger 權限:
gcs: ranger_hive_rules: - map: {} log: true
以下範例接受所有 HDFS 權限,但 hadoop
主體除外:
gcs: hdfs_rules: - when: source_principal.name == 'hadoop' skip: true - map: {}
以下範例會覆寫資料表 tab0
的預設角色對應,並使用所有其他權限的預設值
gcs: ranger_hive_rules: ranger_hive_rules: - when: table.name == 'tab0' map: role: value: "roles/customRole" - map: {}
如要進一步瞭解如何建立權限規則集 YAML 檔案,請參閱「規則集 YAML 檔案」。
建立權限規則集 YAML 檔案後,請將其上傳至 Cloud Storage bucket。您也必須納入 HDFS 檔案、dwh-migration-dumper
工具產生的 Apache Ranger 檔案,或兩者皆納入,具體取決於您要從哪個來源遷移權限。您也必須加入表格設定 YAML 檔案和主體對應檔案。
接著,您可以執行權限遷移工具,產生目標權限檔案。
以下範例說明如何執行權限遷移工具,從 HDFS 和 Apache Ranger 遷移,並使用名為 principals.yaml
的資料表對應設定檔和主體對應檔,產生名為 permissions.yaml
的主體對應檔。
./dwh-permissions-migration build \ --permissions-ruleset gs://MIGRATION_BUCKET/permissions-config.yaml \ --tables gs://MIGRATION_BUCKET/tables/ \ --principals gs://MIGRATION_BUCKET/principals.yaml \ --ranger-dumper-output gs://MIGRATION_BUCKET/ranger-dumper-output.zip \ --hdfs-dumper-output gs://MIGRATION_BUCKET/hdfs-dumper-output.zip \ --output-permissions gs://MIGRATION_BUCKET/permissions.yaml
將 MIGRATION_BUCKET
換成包含移轉檔案的 Cloud Storage bucket 名稱。
執行工具後,請檢查產生的 permissions.yaml
檔案,確認檔案包含從來源對應至 Cloud Storage 或 BigQuery IAM 繫結的權限。您可以在下一個步驟前手動編輯。
套用權限
產生目標權限檔案後,您就可以執行權限遷移工具,將 IAM 權限套用至 Cloud Storage 或 BigQuery。
執行權限遷移工具前,請確認您符合下列先決條件:
- 您已在Trusted Cloud中建立必要主體 (使用者、群組、服務帳戶)。
- 您已建立 Cloud Storage 代管資料夾或資料表,用於存放遷移的資料。
- 執行工具的使用者有權管理 Cloud Storage 受管理資料夾或資料表的角色。
您可以執行下列指令來套用權限:
./dwh-permissions-migration apply \ --permissions gs://MIGRATION_BUCKET/permissions.yaml
MIGRATION_BUCKET
是包含移轉檔案的 Cloud Storage bucket 名稱。
以 Terraform 設定的形式套用權限
如要套用遷移的權限,您也可以將目標權限檔案轉換為 Terraform 基礎架構即程式碼 (IaC) 設定,然後套用至 Cloud Storage。
- 確認您使用的是 Python 3.7 以上版本。
- 建立新的虛擬環境並啟用。
從
permissions-migration/terraform
目錄中,使用下列指令安裝requirements.txt
檔案中的依附元件:python -m pip install -r requirements.txt
執行產生器指令:
python tf_generator PATH LOCATION OUTPUT
更改下列內容:
PATH
:產生的permissions.yaml
檔案路徑。LOCATION
:Cloud Storage 值區的位置,指令碼會根據權限設定檢查及建立資料夾。OUTPUT
:輸出檔案的路徑,即main.tf
。
規則集 YAML 檔案
從 HDFS 或 Apache Ranger 遷移權限至Trusted Cloud時,系統會使用規則集 YAML 檔案對應主體和角色。規則集 YAML 檔案會使用一般運算語言 (CEL),指定述詞 (結果為布林值) 和運算式 (結果為字串)。
規則集 YAML 檔案具有下列特性:
- 系統會依序從上到下執行每種型別的對應規則,處理每個輸入物件。
- CEL 運算式可存取環境變數,而環境變數取決於規則集的區段。舉例來說,您可以使用
user
變數對應至來源使用者物件,並使用group
變數對應至群組。 - 您可以透過 CEL 運算式或靜態值變更預設值。舉例來說,在對應群組時,您可以將輸出值
type
從預設值group
覆寫為其他值,例如serviceAccount
。 - 每個輸入物件都必須至少符合一項規則。
在 HDFS 或 Apache Ranger 權限遷移作業中,規則集 YAML 檔案可用於定義主體對應檔案或角色對應檔案。
規則集 YAML 檔案中的對應規則
規則集 YAML 檔案包含對應規則,可指定權限遷移作業期間,物件如何從來源對應至目標。對應規則可以包含下列章節或子句:
when
:限制規則適用性的述詞子句- 字串代表布林值 CEL 運算式。值可以是
true
或false
- 只有在
when
子句評估結果為true
時,規則才會生效 - 預設值為
true
- 字串代表布林值 CEL 運算式。值可以是
map
:指定結果欄位內容的子句。這個子句的值取決於處理的物件類型,可定義為:expression
,以評估為字串value
代表常數字串
skip
:指定不應對應輸入物件- 可以是
true
或false
- 可以是
log
:有助於偵錯或開發規則的述詞子句- 字串代表布林值 CEL 運算式。值可以是
true
或false
- 預設值為
false
- 如果設為
true
,輸出內容會包含執行記錄,可用於監控或診斷執行作業中的問題
- 字串代表布林值 CEL 運算式。值可以是
建立主體規則集 YAML 檔案
主體對應檔案用於提供 email_address
和 type
的值,藉此產生主體 ID。
- 使用
email_address
指定 Trusted Cloud 主體的電子郵件地址。 - 使用
type
指定主體在 Trusted Cloud中的性質。type
的值可以是user
、group
或serviceAccount
。
規則中使用的任何 CEL 運算式,都能存取代表已處理物件的變數。變數中的欄位會根據 HDFS 或 Apache Ranger 中繼資料檔案的內容而定。可用的變數取決於規則集的區段:
- 如為
user_rules
,請使用變數user
- 如為
group_rules
,請使用變數group
- 如為
other_rules
,請使用變數other
- 如為
role_rules
,請使用變數role
以下範例會將 HDFS 中的使用者對應至 Trusted Cloud中的使用者,並以 @google.com
做為電子郵件地址:
hdfs: user_rules: # Skip user named 'example' - when: "user.name == 'example'" skip: true # Map all other users to their name at google.com - when: "true" map: type: value: user email_address: expression: "user.name + '@google.com'"
覆寫預設角色對應
如要使用非預設主體,可以略過或修改規則集檔案中的預設角色對應。
以下範例說明如何略過規則區段:
hdfs: user_rules: - skip: true group_rules: - skip: true other_rules: - skip: true
建立權限規則集 YAML 檔案
權限規則集 YAML 檔案用於產生目標權限對應檔案。如要建立權限規則集 YAML 檔案,請在權限規則集 YAML 中使用 CEL 運算式,將 HDFS 或 Apache Ranger 權限對應至 Cloud Storage 或 BigQuery 角色。
預設角色對應
HDFS 檔案角色取決於來源檔案權限:
- 如果設定了
w
位元,預設角色為writer
- 如果設定了
r
位元,預設角色為reader
- 如果未設定任何位元,角色就會空白
Ranger HDFS:
- 如果存取權集包含
write
,預設角色為writer
- 如果存取權集包含
read
,預設角色為reader
- 如果存取權集不包含這兩者,角色就會空白
Ranger:
- 如果存取權集包含
update
、create
、drop
、alter
、index
、lock
、all
、write
或refresh
,則預設角色為writer
- 如果存取權集包含
select
或read
,則預設角色為reader
- 如果存取權集不包含上述任何權限,則角色為空白
Cloud Storage:
roles/storage.objectUser
- Writerroles/storage.objectViewer
- 讀取者
BigQuery:
roles/bigquery.dataOwner
- Writerroles/bigquery.dataViewer
- 讀取者
以下範例說明如何接受預設對應,而不對規則集 YAML 檔案進行任何變更:
ranger_hdfs_rules: - map: {}
覆寫預設角色對應
如要使用非預設角色,可以略過或修改規則集檔案中的預設角色對應。
以下範例說明如何使用含有角色欄位的對應子句,並透過值子句覆寫預設角色對應:
ranger_hdfs_rules: - map: role: value: "roles/customRole"
合併權限對應
如果為同一個目標資源產生多個權限對應,系統會使用存取權範圍最廣的對應。舉例來說,如果 HDFS 規則將讀取者角色授予 HDFS 位置上的主體 pa1
,而 Ranger 規則將寫入者角色授予相同位置上的相同主體,則系統會指派寫入者角色。
CEL 運算式中的字串引號
請使用引號 ""
將整個 CEL 運算式包在 YAML 中。在 CEL 運算式中,請使用單引號 ''
引用字串。例如:
"'permissions-migration-' + group.name + '@google.com'"