

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 啟用 Lake Formation 與 S3 Tables 與 Data Catalog 整合
<a name="change-access-iam-to-lf"></a>

本節說明使用與 整合的 Amazon S3 Tables AWS Lake Formation 授予，將存取控制從 IAM 權限遷移至 IAM 的工作流程 AWS Glue Data Catalog。

**重要**  
啟用 AWS Lake Formation 存取控制會撤銷對 S3 Tables 資源的所有現有 IAM 型存取。完成步驟 1 後，先前透過 IAM 許可存取資料的使用者和角色將立即失去存取權。您必須先在步驟 2 中授予 Lake Formation 許可，使用者才能再次查詢資料。在維護時段規劃此遷移，並與資料團隊協調。

## 先決條件
<a name="w2aac13c29b7b7"></a>

對於對 S3 Tables 的讀取/寫入存取，除了 Lake Formation 許可之外，主體還需要 `lakeformation:GetDataAccess` IAM 許可。有了此許可，Lake Formation 就會授與要求存取資料所需的臨時憑證。

## 使用 AWS CLI
<a name="w2aac13c29b7b9"></a>

1. **步驟 1：使用 IAM 角色向 Lake Formation 註冊儲存貯體**

   向 Lake Formation 註冊 S3 Tables 資源。
**注意**  
如果您有現有角色，請確保混合存取為 false。

   ```
   aws lakeformation register-resource \
     --resource-arn "arn:aws:s3tables:us-east-1:AWSAccountID:bucket/*" \
     --role-arn "arn:aws:iam::AWSAccountID:role/service-role/LFAccessRole" \
     --with-federation
   ```

1. **步驟 2：更新 AWS Glue 目錄以啟用 Lake Formation 存取控制**

   使用空白 `CreateDatabaseDefaultPermissions`和 `CreateTableDefaultPermissions`（設定為 `[]`) 更新目錄，並將 `OverwriteChildResourcePermissionsWithDefault`設定為 `Accept`。這會移除所有現有子資源的 IAM 型存取，並允許使用 Lake Formation 授予來管理目錄及其物件。

   ```
   aws glue update-catalog \
     --catalog-id "s3tablescatalog" \
     --catalog-input '{
       "FederatedCatalog": {
           "Identifier": "arn:aws:s3tables:us-east-1:AWSAccountID:bucket/*",
           "ConnectionName": "aws:s3tables"
       },
       "CreateDatabaseDefaultPermissions": [],
       "CreateTableDefaultPermissions": [],
       "OverwriteChildResourcePermissionsWithDefault": "Accept",
       "AllowFullTableExternalDataAccess": "True"
     }'
   ```

1. **步驟 3：將 Lake Formation 許可授予您的資料團隊**

   將 Lake Formation 許可授予需要存取的委託人 （角色、使用者或群組）。例如，若要授予角色的完整資料表讀取存取權：

   ```
   aws lakeformation grant-permissions \
     --principal DataLakePrincipalIdentifier=arn:aws:iam::AWSAccountID:role/DataTeamRole \
     --resource '{
       "Table": {
           "CatalogId": "AWSAccountID",
           "DatabaseName": "s3tablescatalog/table-bucket-name/namespace",
           "TableWildcard": {}
       }
     }' \
     --permissions "SELECT" "DESCRIBE"
   ```

   視需要為每個委託人和資源組合重複此步驟。