如何使用 AWS Lake Formation 跨帳戶共享 AWS Glue 資料型錄資料庫和資料表?

上次更新日期:2022 年 5 月 5 日

我想使用 AWS Lake Formation 跨帳戶間共享 AWS Glue 資料型錄資料庫和資料表。

解決方案

使用 Lake Formation 的跨帳戶功能,您可以授予其他 AWS 帳戶存取許可,讓其能在資料湖中讀寫並共享資料。可以使用基於標籤的存取控制或具名資源的方式共享資源。本文將重點介紹如何授予資料型錄資源的跨帳戶存取許可 (使用具名資源方法)。

請確認已滿足前提條件

在與其他帳戶共享資料型錄資源或存取由另一個帳戶分享的資源之前,請注意以下前提條件:

撤銷 Lake Formation 許可

撤銷所有 IAMAllowedPrincipals 群組對資料型錄資源的 Lake Formation 許可。

防止新資料表具有超級權限

對於包含您可能要共享的資料表的資料型錄資料庫,請注意不要讓新資料表的預設許可為超級 IAMAllowedPrincipals:

  1. 開啟 Lake Formation 主控台
  2. 在導覽窗格中的 Data Catalog (資料型錄) 下,選擇 Databases (資料庫)。
  3. 選擇要更新的資料庫。
  4. 選擇 Actions (動作),然後選擇 Edit (編輯)。
  5. Default permissions for newly created tables (新建立資料表的預設許可) 下,取消 Use only IAM access control for new tables in this database (在此資料庫中的新資料表只使用 IAM 存取控制)。
  6. 選擇 Save (儲存)。

如需詳細資訊,請參閱超級

新增跨帳戶存取所需的許可

如果帳戶已啟用 AWS Glue 資料型錄資源政策,則可刪除政策或在政策中新增跨帳戶授權所需的許可。下方是一個資源政策範例,其由帳戶 1111222233334444 向帳戶 5555666677778888 提供跨帳戶 AWS Glue 存取許可。

如需詳細資訊,請參閲授予跨帳戶存取許可

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "ram.amazonaws.com"
      },
      "Action": "glue:ShareResource",
      "Resource": [
        "arn:aws:glue:us-east-1:1111222233334444:table/*/*",
        "arn:aws:glue:us-east-1:1111222233334444:database/*",
        "arn:aws:glue:us-east-1:1111222233334444:catalog"
      ]
    },
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::5555666677778888:root"
      },
      "Action": "glue:*",
      "Resource": [
        "arn:aws:glue:us-east-1:1111222233334444:table/*/*",
        "arn:aws:glue:us-east-1:1111222233334444:database/*",
        "arn:aws:glue:us-east-1:1111222233334444:catalog"
      ]
    }
  ]
}

啟用組織共享

如果資料型錄資源是在組織內共享的,則請在 AWS RAM 主控台啟用 AWS Organizations 共享。啟用此選項的 AWS Identity and Access Management (IAM) 使用者或角色必須具有 ram:EnableSharingWithAwsOrganization IAM 許可。

如需詳細資訊,請參閲跨帳戶存取前提條件

授予所需的 IAM 許可

來源帳戶:要使用具名資源方法授予跨帳戶許可,您必須具有 AWS Glue 和 AWS Resource Access Manager (AWS RAM) 所需的 IAM 許可。您可以選擇授予這些許可的 AWS 受管政策 AWSLakeFormationCrossAccountManager,或是基於此策略建立一個新政策。

目標帳戶:目標帳戶中的資料湖管理員必須具有以下的額外政策。此政策允許管理員接受 AWS RAM 資源共享邀請並啟用組織共享資源:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ram:AcceptResourceShareInvitation",
        "ram:RejectResourceShareInvitation",
        "ec2:DescribeAvailabilityZones",
        "ram:EnableSharingWithAwsOrganization"
      ],
      "Resource": "*"
    }
  ]
}

注意:在 AWS RAM 中接收資源共享邀請的 IAM 使用者或角色必須具有 glue:PutResourcePolicy 所需的 IAM 許可。

與目標帳戶共享資料庫及其資料表

要與不屬於組織的目標帳戶共享資料庫和資料庫中的所有資料表,請執行以下操作:

注意:如果來源帳戶中所有資料庫的資料表都是共享狀態,則來源帳戶中新增的任何資料表都會自動與目標帳戶共享。

請在來源帳戶中執行以下操作:

  1. 開啟 Lake Formation 主控台,以資料湖管理員身份登入。
  2. 在導覽窗格中,選擇 Databases (資料庫)。
  3. 選擇要共享的資料庫。
  4. 選擇 Actions (動作),然後選擇 Grant (授權)。
  5. 選擇 External account (外部帳戶)。
  6. AWS account ID or AWS organization ID (AWS 帳戶 ID 或 AWS 組織 ID) 欄位中,請輸入目標帳戶的帳戶 ID。
  7. Table (資料表) 欄位中,請確認選取了 All tables (所有資料表) 選項。
  8. Table permissions (資料表許可) 和 Grantable permissions (可授予許可) 欄位中,請選擇要授予的存取許可。
  9. 選擇 Grant (授權)。

請在目標帳戶中執行以下操作:

  1. 開啟 AWS RAM 主控台
  2. 在導覽窗格的 Shared with me (與我共享) 下,選擇 Resource shares (資源共享)。
  3. 查看您已被授予存取許可的共享資源列表。
  4. 要接受來源帳戶共享資源的邀請,請選擇資源共享 ID,然後選擇 Accept resource share (接受資源共享)。
  5. 開啟 Lake Formation 主控台
  6. 在導覽窗格中,選擇 Databases (資料庫)。
    您可以在列表中查看共享的資料庫。在此資料庫的 Owner account ID (擁有者帳戶 ID) 欄位會顯示來源帳戶的帳戶 ID。
  7. 選擇共享的資料庫,然後選擇 Actions (動作)。
  8. 選擇 Create resource link (建立資源連結)。
  9. Create resource link (建立資源連結) 頁面中,執行以下操作:
    Resource link name (資源連結名稱) 欄位中,請輸入資源連結的名稱。
    Shared database (共享資料庫) 欄位中,請確認選擇了要共享的資料庫的名稱。
    Shared database's owner ID (共享資料庫的擁有者 ID) 欄位中,請輸入來源帳戶的帳戶 ID。
  10. 選擇 Create (建立)。
    資源連結建立完成。

資源連結是連結至中繼資料資料庫和資料表的資料型錄物件,通常連結至由其他 AWS 帳戶共享的資料庫和資料表。它們有助於啟用跨帳戶存取資料湖中的資料。建立資源連結後,您可以使用資料湖管理員存取許可查詢共享資料庫中的資料表。

若要授予 IAM 使用者/主體對共享資料庫的存取許可,請將資源連結及共享資料庫所需的許可授予他們。這能讓 IAM 使用者/主體在他們的 Lake Formation 和 Amazon Athena 主控台中查看共享資料庫和資源連結。IAM 使用者也可以在他們的 Amazon Athena 主控台或 Amazon Redshift Spectrum 中查看資料庫和資源連結。

若要將資源連結的存取權授予 IAM 使用者,請執行以下操作:

  1. 開啟 Lake Formation 主控台,以資料湖管理員身份登入。
  2. 在導覽窗格中,選擇 Databases (資料庫)。
  3. 選取您建立的資源連結。
  4. 選擇 Actions (動作),然後選擇 Grant (授予)。
  5. Principals (主體) 下,選取 IAM users and roles (IAM 使用者和角色)。
  6. IAM users and roles (IAM 使用者和角色) 欄位中,選取要授予存取權限給哪些使用者或主體。
  7. Resource link permissions (資源連結許可) 下,選取 Describe (描述)。
  8. 選擇 Grant (授予)。

若要授予共用資料庫的存取權限給 IAM 使用者,請執行以下操作:

  1. 開啟 Lake Formation 主控台,以資料湖管理員身份登入。
  2. 在導覽窗格中,選擇 Databases (資料庫)。
  3. 選取共用資料庫。
  4. 選擇 Actions (動作),然後選擇 Grant (授予)。
  5. Principals (主體) 下,選取 IAM users and roles (IAM 使用者和角色)。
  6. IAM users and roles (IAM 使用者和角色) 欄位中,選取要授予存取權限給哪些使用者或主體。
  7. Database permissions (資料庫許可) 下,選取 Describe (描述)。
    注意:此步驟提供的是最低許可權限,可讓使用者檢視共用資料庫。
  8. 選擇 Grant (授予)。

若要授予使用者資料庫中所有或特定資料表的存取許可,請選擇 All tables (所有資料表) 選項:

  1. 選擇資源連結。
  2. 選擇 Actions (動作),然後選擇 Grant (授權)。
  3. 選擇 IAM users and roles (IAM 使用者和角色)。
  4. IAM users and roles (IAM 使用者和角色) 欄位中,請選擇要授予存取許可的使用者/主體。
  5. LF-Tags or catalog resources (LF 標籤或型錄資源) 下,執行以下操作:
    若要授予使用者資料庫中所有資料表的存取許可,請在 Tables - optional (資料表 (可選)) 中選擇 All tables (所有資料表)。
    若僅要授予使用者資料庫中特定資料表的存取許可,請在 Tables - optional (資料表 (可選)) 中選擇要授予許可的資料表。
  6. Table permissions (資料表許可) 和 Grantable permissions (可授予許可) 欄位中,請選擇 Select (選擇) 和 Describe (描述)。
  7. 選擇 Grant (授權)。

注意:您只能授予在來源帳戶的 Grantable permissions (可授予許可) 中選擇的許可。

授予所需許可後,您可以在目標帳戶中成功查詢到 Athena 裡的資料表。

僅與目標帳戶共享個別資料表

若要與目標帳戶共享個別資料表,請按照上一節中的指示進行操作,但在以下部分進行不同的操作。

來源帳戶:

若要使用 Lake Formation 主控台來授予目標帳戶存取許可,請選擇個別資料表而不是選擇資料庫。

目標帳戶:

  • 請在 AWS RAM 主控台接受資源共用,並在 Lake Formation 主控台存取共用的資料表。
  • 為共享的資料表建立資源連結。建立資源連結後,您就可以使用資料湖管理員存取許可查詢共享的資料表。
  • 要授予 IAM 使用者/主體對共享資料表的存取許可,您必須授予資源連結的許可。

檢視其他注意事項

  • 授予對資料表的存取許可時,您可以將存取許可限制在只能存取資料表的特定欄。這樣目標帳戶就只能查看共享資料表中的那些欄。
  • 請確保目標帳戶中的 IAM 使用者/主體有權存取來源帳戶中的 Amazon Simple Storage Service (Amazon S3) 路徑。
  • 如果您撤銷了先前由來源帳戶授予的許可權限,則目標帳戶將無法存取共用資料庫/表。但是,在目標帳戶中建立的資源連結不會自動刪除。您必須手動刪除資源連結。
  • 刪除資料庫/表時,AWS RAM 中的資源共享不會自動刪除。因此,您必須在刪除共享的資料庫或資料表之前手動撤銷跨帳戶許可。