本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
聯合至 Snowflake Iceberg 目錄
AWS Glue Data Catalog Snowflake使用Snowflake服務主體的 OAuth2 登入資料聯合到 。您可以使用此聯合來連線至 Snowflake Horizon和 Snowflake Polaris目錄。此身分驗證機制允許 Data Catalog 根據與服務主體相關聯的權限,存取目錄中各種物件 (例如目錄、資料庫和資料表) 的中繼資料。為了確保存取正確的物件,請務必授予 中的服務主體Snowflake讀取這些物件中繼資料的必要許可。
先決條件
在由 Lake Formation 管理的 Data Catalog 中建立聯合目錄之前,請確定您具有下列許可:
您的 IAM 主體 (使用者或角色) 必須具有下列許可:
-
Lake Formation 許可 –
lakeformation:RegisterResource、lakeformation:DescribeResource -
AWS Glue 許可 –
glue:CreateConnection、glue:CreateCatalog、glue:GetConnection、glue:PassConnection -
Secrets Manager 許可 –
secretsmanager:CreateSecret、secretsmanager:GetSecretValue -
IAM 許可 –
iam:CreateRole、iam:AttachRolePolicy、iam:PassRole
您必須是 Lake Formation 資料湖管理員或具有 Data Catalog 的CREATE_CATALOG許可
建立聯合目錄
登入 主控台,並在 https://https://console.aws.amazon.com/lakeformation/
開啟 Lake Formation 主控台。 在右上角頁面區段中選擇偏好的 AWS 區域。
在左側導覽窗格中,選擇型錄。
選擇建立目錄以開啟建立目錄工作流程。
在選擇資料來源步驟中,Snowflake從可用的選項中選取 。
在設定目錄詳細資訊步驟中,您提供三種資訊:目錄詳細資訊、連線詳細資訊和註冊詳細資訊。
在目錄詳細資訊容器中,提供 AWS Glue 聯合目錄的唯一名稱,然後輸入現有Snowflake目錄的名稱。
在連線詳細資訊容器中,您可以選擇您有權存取的現有連線,或提供組態來建立新的連接器。
新的連線組態包括:
連線名稱 – AWS Glue 連線物件的唯一名稱。
執行個體 URL – 現有Snowflake帳戶的端點 URL。
身分驗證 – 指定 AWS Glue 用來連線至遠端目錄伺服器的身分驗證組態。 同時 AWS Glue 支援 OAuth2 和自訂身分驗證。
權杖 URL – 指定遠端目錄身分提供者的 URL。
OAuth2 用戶端 ID – 指定與遠端目錄相關聯之 OAuth2 憑證的用戶端 ID。
秘密 – 使用 儲存並使用 OAuth2 用戶端秘密, AWS Secrets Manager 或在文字方塊中輸入秘密值。當您在主控台中手動輸入秘密時, 會代表您 AWS Glue 建立秘密。
權杖 URL 範圍 – 指定身分驗證的 OAuth 範圍。
目錄大小寫篩選條件 – 選擇從遠端目錄將小寫或大寫物件帶入 Data Catalog。
建立 IAM 角色,讓 AWS Glue 和 Lake Formation 服務主體分別用來存取遠端 Iceberg 資料表的 AWS Secrets Manager 和 Amazon S3 位置中的秘密。在註冊下拉式清單中選取 IAM 角色。如需 IAM 政策詳細資訊,請參閱下列 CLI 章節中的步驟 2 和 3。
選取測試連線以測試您的連線屬性和 IAM 角色存取是否已正確設定。
選取下一步以檢閱您的設定。
在檢閱頁面中選取建立目錄。
-
建立 AWS Secrets Manager 秘密
AWS Glue 連接器支援兩種身分驗證類型:OAuth2 和 Custom。使用 OAuth2 選項時,請使用 AWS Secrets Manager 來存放Snowflake服務主體的用戶端秘密。您稍後會在建立 AWS Glue 連線時使用此秘密。對於自訂身分驗證,請使用 AWS Secrets Manager 來存放和擷取存取權杖。
在下列範例中,將
、your-snowflake-secret取代client_secret為您自己的資訊。regionaws secretsmanager create-secret \ --nameyour-snowflake-secret\ --description "Snowflake secret" \ --secret-string '{ "USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET": "client_secret" }' \ --regionregion注意
USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET是預留關鍵字, AWS Glue 用來參考秘密中的用戶端秘密值。當您在 Lake Formation 主控台中建立秘密時,也請使用相同的關鍵字。 -
建立 IAM 角色,讓 AWS Glue 連線物件存取上一個步驟中建立的秘密
當您使用 AWS Secrets Manager 存放、擷取和重新整理 OAuth AWS Secrets Manager 秘密字符時, AWS Glue 連線物件需要存取秘密。當您使用 Amazon VPC 端點限制Snowflake與帳戶的連線時, AWS Glue 連線物件也需要存取才能建立、描述和使用 Amazon VPC 網路介面。
建立 IAM 政策並將其連接至 IAM 角色。將 AWS Glue 服務主體新增至信任政策。
在下列範例中,將
、your-secrets-manager-ARN和 取代your-vpc-id為您自己的資訊。your-subnet-id1範例 IAM 政策
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret", "secretsmanager:PutSecretValue" ], "Resource": [ "your-secrets-manager-ARN" ] }, { "Effect": "Allow", "Action": [ "ec2:CreateNetworkInterface", "ec2:DeleteNetworkInterface", "ec2:DescribeNetworkInterfaces" ], "Resource": "*", "Condition": { "ArnEquals": { "ec2:Vpc": "arn:aws:ec2:region:account-id:vpc/your-vpc-id", "ec2:Subnet": ["arn:aws:ec2:region:account-id:subnet/your-subnet-id1"] } } } ] }範例 信任政策
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": { "Service": "glue.amazonaws.com" }, "Action": "sts:AssumeRole" }] } -
建立 IAM 政策,讓 Lake Formation 能夠讀取目錄的 Amazon S3 位置
身為 Data Catalog 中聯合目錄的目錄擁有者,您可以使用 Lake Formation 將粗粒資料表存取、精細 - 資料欄層級、資料列層級和儲存格層級 - 存取,以及標籤型存取授予資料團隊。Lake Formation 使用 IAM 角色,讓其存取遠端 Iceberg 資料表的基礎 Amazon S3 位置。此存取可讓 Lake Formation 將範圍存取憑證提供給查詢遠端資料表的分析引擎。
建立 IAM 政策並連接至 IAM 角色。將 Lake Formation 服務主體新增至角色信任政策。
在下列範例中,將
和 取代amzn-s3-demo-bucketN為您自己的資訊。your-kms-key範例 IAM 政策
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket1/*", "arn:aws:s3:::amzn-s3-demo-bucket2/*" ] }, { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket1", "arn:aws:s3:::amzn-s3-demo-bucket2" ] }, { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:Encrypt" ], "Resource": [ "your-kms-key" ] } ] }範例 信任政策
{ "Version": "2012-10-17", "Statement": [{ "Sid": "", "Effect": "Allow", "Principal": { "Service": "lakeformation.amazonaws.com" }, "Action": "sts:AssumeRole" }] }注意
當您使用 Lake Formation 主控台建立聯合目錄時,主控台會使用單一 IAM 角色,並連接兩個政策以完成設定。
-
建立 AWS Glue 連線物件
AWS Glue 連接器支援 OAuth2 和自訂身分驗證方法。Data Catalog 連線物件支援
CATALOG_CASING_FILTER組態,可讓您將遠端目錄中的小寫或大寫物件帶到 Data Catalog。下列範例使用 OAuth2 身分驗證組態來建立 AWS Glue 連線。將 取代
為您的資訊。highlighted sectionsaws glue create-connection \ --connection-input '{ "Name": "your-glue-connection-to-snowflake-account", "ConnectionType": "SNOWFLAKEICEBERGRESTCATALOG", "ConnectionProperties": { "INSTANCE_URL": "your-snowflake-account-URL", "ROLE_ARN": "your-IAM-role-for-secrets-and-VPC-access", "CATALOG_CASING_FILTER": "LOWERCASE_ONLY" }, "AuthenticationConfiguration": { "AuthenticationType": "OAUTH2", "OAuth2Properties": { "OAuth2GrantType": "CLIENT_CREDENTIALS", "TokenUrl": "your-internal-or-external-token-server-url", "OAuth2ClientApplication": { "UserManagedClientApplicationClientId": "our-client-id" }, "TokenUrlParametersMap": { "scope": "all-apis" } }, "SecretArn": "arn:aws:secretsmanager:your-aws-region:your-aws-account-id:secret:snowflake-secret" } }' -
將 AWS Glue 連線註冊為 Lake Formation 資源
使用 AWS Glue 連線物件 (在步驟 4 中建立) 和 IAM 角色 (在步驟 3 中建立),您現在可以將 AWS Glue 連線物件註冊為 Lake Formation 受管資源。
將
和 取代your-glue-connector-arn為您的資訊。your-IAM-role-ARN-having-LF-accessaws lakeformation register-resource \ --resource-arnyour-glue-connector-arn\ --role-arnyour-IAM-role-ARN-having-LF-access\ --with-federation \ --with-privileged-access -
在 Data Catalog 中建立聯合目錄
建立 AWS Glue 連線物件並使用 Lake Formation 註冊後,您可以在 Data Catalog 中建立聯合目錄:
在 提供聯合目錄唯一名稱
、在 Snowflake中參考目錄your-federated-catalog-name,以及在 中稍早建立的輸入連線名稱catalog-name-in-Snowflake。your-glue-connection-nameaws glue create-catalog \ --nameyour-federated-catalog-name\ --catalog-input '{ "FederatedCatalog": { "Identifier":catalog-name-in-Snowflake", "ConnectionName":your-glue-connection-name" }, "CreateTableDefaultPermissions": [], "CreateDatabaseDefaultPermissions": [] }'
與 整合時的考量事項 Snowflake
-
當您在 中捨棄資源 (例如資料庫和資料表) 時Snowflake,Lake Formation 不會自動撤銷在該聯合資源上授予的許可。若要移除存取許可,您需要使用 Lake Formation 明確撤銷先前在聯合資源上授予的許可。
-
當您使用
CATALOG_CASING_FILTER='UPPERCASE_ONLY'組態掛載遠端目錄時,具有大寫識別符的資料庫和資料表是聯合的,但具有小寫識別符的物件不是聯合的。 -
您可以重複使用相同的 AWS Glue 連線來建立多個聯合目錄。刪除目錄不會刪除相關聯的連線。若要刪除連線,請使用 AWS CLI
aws glue delete-connection命令,並確保先刪除所有相關聯的目錄。 -
Polaris 目錄中不支援巢狀命名空間。也就是說,目錄聯合可以存取遵循 3 部分表示法 的遠端Iceberg資料表
catalog.database.table。