

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

# 加入 Lake Formation 許可
<a name="onboarding-lf-permissions"></a>

AWS Lake Formation 使用 AWS Glue Data Catalog (Data Catalog) 以目錄、資料庫和資料表的形式存放 Amazon S3 資料湖和外部資料來源的中繼資料，例如 Amazon Redshift。Data Catalog 中的中繼資料會組織在包含目錄、資料庫和資料表的三層資料階層中。它會將來自各種來源的資料組織到稱為目錄的邏輯容器。資料庫是資料表的集合。Data Catalog 也包含資源連結，這些連結是外部帳戶中共用資料庫和資料表的連結，用於跨帳戶存取資料湖中的資料。每個 AWS 帳戶每個 AWS 區域都有一個資料目錄。

 Lake Formation 提供關聯式資料庫管理系統 (RDBMS) 許可模型，以授予或撤銷 Data Catalog 中具有 Amazon S3 中基礎資料的目錄、資料庫、資料表和資料欄的存取權。

在您了解 Lake Formation 許可模型的詳細資訊之前，檢閱下列背景資訊會很有幫助：
+ Lake Formation 管理的資料湖位於 Amazon Simple Storage Service (Amazon S3) 的指定位置。Data Catalog 也包含目錄物件。每個目錄代表來自 Amazon Redshift 資料倉儲、 Amazon DynamoDB 資料庫和第三方資料來源等來源的資料，例如 Snowflake、MySQL，以及透過聯合連接器整合的超過 30 個外部資料來源。
+ Lake Formation 維護的資料目錄包含要匯入資料湖的來源資料中繼資料，例如日誌和關聯式資料庫中的資料，以及 Amazon S3 中資料湖中的資料。Data Catalog 也包含來自 Amazon S3 以外外部資料來源的資料中繼資料。中繼資料會組織為目錄、資料庫和資料表。中繼資料表包含結構描述、位置、分割，以及其所代表資料的其他資訊。中繼資料資料庫是資料表的集合。
+  Lake Formation Data Catalog 與 使用的 Data Catalog 相同AWS Glue。您可以使用AWS Glue爬蟲程式來建立 Data Catalog 資料表，也可以使用AWS Glue擷取、轉換和載入 (ETL) 任務，在資料湖中填入基礎資料。
+ Data Catalog 中的目錄、資料庫和資料表稱為 *Data Catalog 資源*。Data Catalog 中的資料表稱為*中繼資料資料表*，以區分它們與資料來源中的資料表或 Amazon S3 中的表格資料。中繼資料資料表在 Amazon S3 或資料來源中指向的資料稱為*基礎資料*。
+ *委託*人是使用者或角色、Amazon Quick 使用者或群組、透過 SAML 供應商向 Lake Formation 驗證的使用者或群組，或是跨帳戶存取控制的使用者或群組、 AWS 帳戶 ID、組織 ID 或組織單位 ID。
+ AWS Glue 爬蟲程式會建立中繼資料表，但您也可以使用 Lake Formation 主控台、API 或 AWS Command Line Interface () 手動建立中繼資料表AWS CLI。建立中繼資料資料表時，您必須指定位置。當您建立資料庫時，位置是選用的。資料表位置可以是 Amazon S3 位置或資料來源位置，例如 Amazon Relational Database Service (Amazon RDS) 資料庫。資料庫位置一律是 Amazon S3 位置。
+ 與 Lake Formation 整合的服務，例如 Amazon Athena 和 Amazon Redshift，可以存取 Data Catalog 以取得中繼資料並檢查執行中查詢的授權。如需整合服務的完整清單，請參閱 [AWS 服務與 Lake Formation 整合](service-integrations.md)。

**Topics**
+ [Lake Formation 許可概觀](lf-permissions-overview.md)
+ [Lake Formation 角色和 IAM 許可參考](permissions-reference.md)
+ [變更資料湖的預設設定](change-settings.md)
+ [隱含 Lake Formation 許可](implicit-permissions.md)
+ [Lake Formation 許可參考](lf-permissions-reference.md)
+ [整合 IAM Identity Center](identity-center-integration.md)
+ [將 Amazon S3 位置新增至您的資料湖](register-data-lake.md)
+ [混合存取模式](hybrid-access-mode.md)
+ [在 中建立物件 AWS Glue Data Catalog](populating-catalog.md)
+ [在 Lake Formation 中使用工作流程匯入資料](workflows.md)

# Lake Formation 許可概觀
<a name="lf-permissions-overview"></a>

 AWS Lake Formation中有兩種主要類型的權限：
+ 中繼資料存取 – Data Catalog 資源的許可 (*Data Catalog 許可*)。

  這些許可可讓主體在 Data Catalog 中建立、讀取、更新和刪除中繼資料資料庫和資料表。
+ 基礎資料存取 – Amazon Simple Storage Service (Amazon S3) 中位置的許可 (*資料存取許可*和*資料位置許可*)。
  + 資料湖許可可讓主體讀取和寫入資料到*基礎* Amazon S3 位置，資料目錄資源指向該資料。
  + 資料位置許可可讓主體建立和修改指向特定 Amazon S3 位置的中繼資料資料庫和資料表。

對於這兩個區域，Lake Formation 會使用 Lake Formation 許可和 AWS Identity and Access Management (IAM) 許可的組合。IAM 許可模型包含 IAM 政策。Lake Formation 許可模型會實作為 DBMS 樣式的 GRANT/REVOKE 命令，例如 `Grant SELECT on tableName to userName`。

當委託人提出存取 Data Catalog 資源或基礎資料的請求時，若要成功請求，必須同時通過 IAM 和 Lake Formation 的許可檢查。

![\[請求者的請求必須通過兩個「門」才能取得資源：Lake Formation 許可和 IAM 許可。\]](http://docs.aws.amazon.com/zh_tw/lake-formation/latest/dg/images/permissions_doors.png)


Lake Formation 許可控制對 Data Catalog 資源、Amazon S3 位置和這些位置基礎資料的存取。IAM 許可控制對 Lake Formation 和 AWS Glue APIs存取。因此，雖然您可能擁有 Lake Formation 在 Data Catalog (`CREATE_TABLE`) 中建立中繼資料表的許可，但如果您沒有 `glue:CreateTable` API 的 IAM 許可，您的操作會失敗。（為什麼要有`glue:`許可？ 因為 Lake Formation 使用 AWS Glue Data Catalog。)

**注意**  
Lake Formation 許可僅適用於授予許可的 區域。

AWS Lake Formation 要求每個委託人 （使用者或角色） 都有權對 Lake Formation 管理的資源執行動作。資料湖管理員或其他具有授予 Lake Formation 許可的主體會獲得必要的授權。

當您將 Lake Formation 許可授予委託人時，您可以選擇性地將該許可授予其他委託人。

您可以使用 Lake Formation API、 AWS Command Line Interface (AWS CLI) 或 Lake Formation 主控台**的資料許可**和**資料位置**頁面來授予和撤銷 Lake Formation 許可。

# 精細存取控制的方法
<a name="access-control-fine-grained"></a>

使用資料湖，目標是對資料進行精細的存取控制。在 Lake Formation 中，這表示對 Data Catalog 資源和 Amazon S3 位置進行精細存取控制。您可以使用下列其中一種方法來實現精細存取控制。


| Method | Lake Formation 許可 | IAM 許可 | 說明 | 
| --- | --- | --- | --- | 
| 方法 1 | 開啟 | 精細分級 |  **這是與 回溯相容性的預設方法**AWS Glue。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/lake-formation/latest/dg/access-control-fine-grained.html) 在 Lake Formation 主控台上，此方法會顯示為**僅限 IAM 存取控制**。  | 
| 方法 2 | 精細分級 | 粗粒 |  **這是建議的方法。** [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/lake-formation/latest/dg/access-control-fine-grained.html)  | 

**重要**  
請注意以下事項：  
根據預設，Lake Formation **已啟用僅使用 IAM 存取控制**設定，以與現有的 AWS Glue Data Catalog 行為相容。我們建議您在轉換為使用 Lake Formation 許可後停用這些設定。如需詳細資訊，請參閱[變更資料湖的預設設定](change-settings.md)。
資料湖管理員和資料庫建立者具有您必須了解的隱含 Lake Formation 許可。如需詳細資訊，請參閱[隱含 Lake Formation 許可](implicit-permissions.md)。

# 中繼資料存取控制
<a name="access-control-metadata"></a>

針對 Data Catalog 資源的存取控制，下列討論會採用具有 Lake Formation 許可的精細存取控制，以及具有 IAM 政策的粗略精細存取控制。

有兩種不同的方法來授予 Data Catalog 資源的 Lake Formation 許可：
+ **具名資源存取控制** – 使用此方法，您可以透過指定資料庫或資料表名稱來授予特定資料庫或資料表的許可。授予具有此表單：

  將*許可*授予*資源* 【使用授予選項】 上的*主體*。

  使用授予選項，您可以允許承授者將許可授予其他委託人。
+ **標籤型存取控制** – 使用此方法，您可以將一或多個 LF 標籤指派給 Data Catalog 資料庫、資料表和資料欄，並將一或多個 LF 標籤的許可授予委託人。每個 LF-Tag 都是鍵/值對，例如 `department=sales`。擁有符合 Data Catalog 資源上 LF 標籤的 LF 標籤的委託人可以存取該資源。對於具有大量資料庫和資料表的資料湖，建議使用此方法。詳細解釋於 [Lake Formation 標籤型存取控制](tag-based-access-control.md)。

委託人在資源上擁有的許可是這兩種方法所授予許可的聯集。

下表摘要說明 Data Catalog 資源上可用的 Lake Formation 許可。欄標題表示授予許可的資源。


| 目錄 | 資料庫 | 資料表 | 
| --- | --- | --- | 
| CREATE\$1DATABASE | CREATE\$1TABLE | ALTER | 
|  | ALTER | DROP | 
|  | DROP | DESCRIBE | 
|  | DESCRIBE | SELECT\$1 | 
|  |  | INSERT\$1 | 
|  |  | DELETE\$1 | 

例如，在資料庫上授予 `CREATE_TABLE`許可。這表示允許主體在該資料庫中建立資料表。

Data Catalog 資源上會授予具有星號 (\$1) 的許可，但它們適用於基礎資料。例如，中繼資料資料表的 `DROP`許可可讓您從資料目錄中捨棄資料表。不過，相同資料表上授予的`DELETE`許可可讓您使用 SQL `DELETE`陳述式等方式刪除 Amazon S3 中資料表的基礎資料。使用這些許可，您也可以在 Lake Formation 主控台上檢視資料表，並使用 AWS Glue API 擷取資料表的相關資訊。因此，`SELECT`、 `INSERT`和 `DELETE`都是 Data Catalog 許可和資料存取許可。

在資料表`SELECT`上授予 時，您可以新增包含或排除一或多個資料欄的篩選條件。這允許對中繼資料表資料欄進行精細存取控制，限制整合服務的使用者在執行查詢時可以看到的資料欄。此功能不能僅使用 IAM 政策。

還有一個名為 的特殊許可`Super`。`Super` 許可可讓委託人在授予其資料庫或資料表上執行每個支援的 Lake Formation 操作。此許可可以與其他 Lake Formation 許可共存。例如，您可以在中繼資料資料表`INSERT`上授予 `SELECT`、 `Super`和 。委託人可以在資料表上執行所有支援的動作，當您撤銷 時`Super`， `SELECT`和 `INSERT`許可仍會保留。

如需每個許可的詳細資訊，請參閱 [Lake Formation 許可參考](lf-permissions-reference.md)。

**重要**  
若要能夠查看另一個使用者建立的資料目錄資料表，您必須在資料表上授予至少一個 Lake Formation 許可。如果資料表上授予您至少一個許可，您也可以查看資料表的包含資料庫。

您可以使用 Lake Formation 主控台、 API 或 AWS Command Line Interface () 授予或撤銷 Data Catalog 許可AWS CLI。以下是 AWS CLI 命令的範例，可授予使用者在`retail`資料庫中建立資料表的`datalake_user1`許可。

```
aws lakeformation grant-permissions --principal DataLakePrincipalIdentifier=arn:aws:iam::111122223333:user/datalake_user1 
 --permissions "CREATE_TABLE" --resource '{ "Database": {"Name":"retail"}}'
```

以下是粗粒存取控制 IAM 政策的範例，該政策使用 Lake Formation 許可來補充精細存取控制。它允許對任何中繼資料資料庫或資料表進行所有操作。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "glue:*Database*",
                "glue:*Table*",
                "glue:*Partition*"
            ],
            "Resource": "*"
        }
    ]
}
```

------

下一個範例也是粗略粒度，但略有限制。它允許對指定帳戶和區域中 Data Catalog 中的所有中繼資料資料庫和資料表進行唯讀操作。

------
#### [ JSON ]

****  

```
{  
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "glue:GetTables",
                "glue:SearchTables",
                "glue:GetTable",
                "glue:GetDatabase", 
                "glue:GetDatabases"
            ],
            "Resource": "arn:aws:glue:us-east-1:111122223333:*"
        } 
    ]   
}
```

------

將這些政策與下列政策進行比較，該政策實作以 IAM 為基礎的精細存取控制。它僅在指定帳戶和區域中的客戶關係管理 (CRM) 中繼資料資料庫中的資料表子集上授予許可。

------
#### [ JSON ]

****  

```
{  
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "glue:GetTables",
                "glue:SearchTables",
                "glue:GetTable",
                "glue:GetDatabase", 
                "glue:GetDatabases"
            ],
            "Resource": [
                "arn:aws:glue:us-east-1:111122223333:catalog",
                "arn:aws:glue:us-east-1:111122223333:database/CRM",
                "arn:aws:glue:us-east-1:111122223333:table/CRM/P*"
            ]
        } 
    ]   
}
```

------

如需粗略存取控制政策的更多範例，請參閱 [Lake Formation 角色和 IAM 許可參考](permissions-reference.md)。

# 基礎資料存取控制
<a name="access-control-underlying-data"></a>

當整合 AWS 的服務請求存取由 控制存取的 Amazon S3 位置中的資料時 AWS Lake Formation，Lake Formation 會提供臨時登入資料來存取資料。

若要讓 Lake Formation 控制對 Amazon S3 位置基礎資料的存取，請向 Lake Formation *註冊*該位置。

註冊 Amazon S3 位置後，您可以開始授予下列 Lake Formation 許可：
+ 指向該位置的資料目錄資料表`DELETE)`上的資料存取許可 `SELECT`(`INSERT`、 和 。
+ 該位置上的資料位置許可。

Lake Formation 資料位置許可可控制建立指向特定 Amazon S3 位置之 Data Catalog 資源的能力。資料位置許可可為資料湖內的位置提供額外的安全層。當您將 `CREATE_TABLE`或 `ALTER`許可授予委託人時，您也會授予資料位置許可，以限制委託人可以建立或修改中繼資料表的位置。

Amazon S3 位置是儲存貯體下的儲存貯體或字首，但不是個別的 Amazon S3 物件。

您可以使用 Lake Formation 主控台、 API 或 ，將資料位置許可授予委託人 AWS CLI。授予的一般形式如下：

```
grant DATA_LOCATION_ACCESS to principal on S3 location [with grant option]
```

如果您包含 `with grant option`，承授者可以將許可授予其他委託人。

請記住，Lake Formation 許可一律會與 AWS Identity and Access Management (IAM) 許可搭配使用，以進行精細存取控制。對於基礎 Amazon S3 資料的讀取/寫入許可，IAM 許可的授予方式如下：

當您註冊位置時，您可以指定 IAM 角色來授予該位置的讀取/寫入許可。Lake Formation 在將臨時登入資料提供給整合 AWS 服務時，會擔任該角色。典型角色可能附加了下列政策，其中註冊的位置是儲存貯體 `awsexamplebucket`。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:DeleteObject"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket"
            ]
        }
    ]
}
```

------

Lake Formation 提供一個服務連結角色，您可以在註冊期間用來自動建立像這樣的政策。如需詳細資訊，請參閱[使用 Lake Formation 的服務連結角色](service-linked-roles.md)。

因此，註冊 Amazon S3 位置會授予該位置所需的 IAM `s3:`許可，其中許可是由用來註冊位置的角色所指定。

**重要**  
避免註冊已啟用**申請者付款**的 Amazon S3 儲存貯體。對於向 Lake Formation 註冊的儲存貯體，用於註冊儲存貯體的角色一律會被視為申請者。如果儲存貯體是由另一個 AWS 帳戶存取，則如果角色屬於與儲存貯體擁有者相同的帳戶，則會向儲存貯體擁有者收取資料存取費用。

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

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "lakeformation:GetDataAccess",
            "Resource": "*"
        }
    ]
}
```

------

 在上述政策中，您必須將 Resource 參數設定為 '\$1' （全部。不支援為此許可指定任何其他資源。此組態可確保 Lake Formation 可以有效率地管理整個資料湖環境中的資料存取。

**注意**  
Amazon Athena 要求使用者擁有 `lakeformation:GetDataAccess`許可。其他整合服務需要其基礎執行角色才能擁有 `lakeformation:GetDataAccess`許可。

此許可包含在 的建議政策中[Lake Formation 角色和 IAM 許可參考](permissions-reference.md)。

總而言之，若要讓 Lake Formation 主體能夠讀取和寫入具有 Lake Formation 許可所控制存取的基礎資料：
+ 向 Lake Formation 註冊包含資料的 Amazon S3 位置。
+ 建立指向基礎資料位置之 Data Catalog 資料表的主體必須具有資料位置許可。
+ 讀取和寫入基礎資料的主體必須在資料目錄資料表上具有指向基礎資料位置的 Lake Formation 資料存取許可。
+ 當基礎資料位置向 Lake Formation `lakeformation:GetDataAccess` 註冊時，讀取和寫入基礎資料的委託人必須具有 IAM 許可。

**注意**  
如果您可以透過 IAM 或 Amazon S3 政策存取 Amazon S3 API 或主控台，Lake Formation 許可模型不會阻止透過 Amazon S3 API 或主控台存取 Amazon S3 位置。您可以將 IAM 政策連接至主體以封鎖此存取。

**有關資料位置許可的詳細資訊**  
資料位置許可會管理 Data Catalog 資料庫和資料表上建立和更新操作的結果。規則如下：
+ 委託人必須在 Amazon S3 位置上具有明確或隱含的資料位置許可，才能建立或更新指定該位置的資料庫或資料表。
+ 明確許可`DATA_LOCATION_ACCESS`是使用 主控台、API 或 授予 AWS CLI。
+ 當資料庫具有指向已註冊位置的位置屬性、主體具有資料庫的`CREATE_TABLE`許可，且主體嘗試在該位置或子位置建立資料表時，就會授予隱含許可。
+ 如果將資料位置許可授予委託人，則委託人在所有子位置都有資料位置許可。
+ 主體不需要資料位置許可，即可對基礎資料執行讀取/寫入操作。具備 `SELECT`或 `INSERT`資料存取許可就已足夠。資料位置許可僅適用於建立指向位置的 Data Catalog 資源。

考慮下圖中顯示的案例。

![\[資料夾階層和兩個資料庫，資料庫 A 和 B，其中資料庫 B 指向客戶服務資料夾。\]](http://docs.aws.amazon.com/zh_tw/lake-formation/latest/dg/images/location-permissions-example.png)


在這張圖中：
+ Amazon S3 儲存貯體 `Products`、 `Finance`和 `Customer Service` 已向 Lake Formation 註冊。
+ `Database A` 沒有位置屬性，且`Database B`具有指向儲存`Customer Service`貯體的位置屬性。
+ 使用者在兩個資料庫`CREATE_TABLE`上`datalake_user`都有 。
+ `datalake_user` 使用者僅獲得儲存`Products`貯體上的資料位置許可。

以下是使用者`datalake_user`嘗試在特定位置的特定資料庫中建立目錄資料表時的結果。


**`datalake_user` 嘗試建立資料表的位置**  

| 資料庫和位置 | 成功或失敗 | Reason | 
| --- | --- | --- | 
| 資料庫 A 位於 Finance/Sales | 失敗 | 沒有資料位置許可 | 
| 資料庫 A 位於 Products | 成功 | 具有資料位置許可 | 
| 資料庫 A 位於 HR/Plans | 成功 | 位置未註冊 | 
| 資料庫 B 位於 Customer Service/Incidents | 成功 | 資料庫的位置屬性位於 Customer Service | 

如需詳細資訊，請參閱下列內容：
+ [將 Amazon S3 位置新增至您的資料湖](register-data-lake.md)
+ [Lake Formation 許可參考](lf-permissions-reference.md)
+ [Lake Formation 角色和 IAM 許可參考](permissions-reference.md)

# Lake Formation 角色和 IAM 許可參考
<a name="permissions-reference"></a>

本節列出一些建議的 Lake Formation 角色及其建議的 AWS Identity and Access Management (IAM) 許可。如需 Lake Formation 許可的詳細資訊，請參閱 [Lake Formation 許可參考](lf-permissions-reference.md)。

## AWS Lake Formation 角色
<a name="lf-personas"></a>

下表列出建議 AWS Lake Formation 的角色。


**Lake Formation 角色**  

| 人物 | Description | 
| --- | --- | 
| IAM 管理員 （超級使用者） | （必要） 可建立 IAM 使用者和角色的使用者。具有 AdministratorAccess AWS 受管政策。具有所有 Lake Formation 資源的所有許可。可以新增資料湖管理員。如果也未指定資料湖管理員，則無法授予 Lake Formation 許可。 | 
| 資料湖管理員 | （必要） 可註冊 Amazon S3 位置、存取 Data Catalog、建立資料庫、建立和執行工作流程、將 Lake Formation 許可授予其他使用者，以及檢視 AWS CloudTrail 日誌的使用者。IAM 許可少於 IAM 管理員，但足以管理資料湖。無法新增其他資料湖管理員。 | 
| 唯讀管理員 | （選用） 可檢視主體、Data Catalog 資源、許可和 AWS CloudTrail 日誌的使用者，無需進行更新的許可。 | 
| 資料工程師 | （選用） 可建立資料庫、建立和執行爬蟲程式和工作流程，以及對爬蟲程式和工作流程建立的資料目錄資料表授予 Lake Formation 許可的使用者。建議您讓所有資料工程師建立資料庫。如需詳細資訊，請參閱[建立資料庫](creating-database.md)。 | 
| 資料分析 | （選用） 可以使用 對資料湖執行查詢的使用者，例如 Amazon Athena。僅有足夠許可來執行查詢。 | 
| 工作流程角色 | （必要） 代表使用者執行工作流程的角色。當您從藍圖建立工作流程時，您可以指定此角色。 | 

**注意**  
在 Lake Formation 中，資料庫建立後新增的資料湖管理員可以授予許可，但不會自動擁有資料存取許可，例如 SELECT 或 DESCRIBE。建立資料庫的管理員會收到這些資料庫的`SUPER`許可。此行為是刻意的，雖然所有管理員都可以授予自己必要的許可，但這些許可不會自動套用到預先存在的資源。因此，管理員必須明確授予自己對資料庫的存取權，然後才能獲得管理員權限。

## AWS Lake Formation 的 受管政策
<a name="lf-managed-policies"></a>

您可以使用 AWS 受管政策和內嵌政策 AWS Lake Formation ，授予使用 所需的 AWS Identity and Access Management (IAM) 許可。下列 AWS 受管政策適用於 Lake Formation。

### AWS 受管政策：AWSLakeFormationDataAdmin
<a name="lf-data-admin"></a>

 [AWSLakeFormationDataAdmin](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSLakeFormationDataAdmin) 政策會授予 AWS Lake Formation 和相關服務的管理存取權，例如 AWS Glue 來管理資料湖。

您可以將 `AWSLakeFormationDataAdmin` 連接至使用者、群組與角色。

**許可詳細資訊**
+ `CloudTrail` – 允許主體檢視 AWS CloudTrail 日誌。這是檢閱資料湖設定中的任何錯誤所必需的。
+ `Glue` – 允許主體檢視、建立和更新 Data Catalog 中的中繼資料表和資料庫。這包括以 `Get`、`List`、、`Delete`、 `Create` `Update`和 開頭的 API 操作`Search`。這是管理資料湖資料表中繼資料的必要項目。
+ `IAM` – 允許主體擷取連接到角色的 IAM 使用者、角色和政策的相關資訊。這是資料管理員檢閱和列出 IAM 使用者和角色以授予 Lake Formation 許可的必要項目。
+ `Lake Formation` – 授予資料湖管理員管理資料湖所需的 Lake Formation 許可。
+ `S3` – 允許主體擷取 Amazon S3 儲存貯體及其位置的相關資訊，以設定資料湖的資料位置。

```
"Statement": [
        {
            "Sid": "AWSLakeFormationDataAdminAllow",
            "Effect": "Allow",
            "Action": [
                "lakeformation:*",
                "cloudtrail:DescribeTrails",
                "cloudtrail:LookupEvents",
                "glue:CreateCatalog",
		"glue:UpdateCatalog",
                "glue:DeleteCatalog",
		"glue:GetCatalog",
	        "glue:GetCatalogs",
                "glue:GetDatabase",
                "glue:GetDatabases",
                "glue:CreateDatabase",
                "glue:UpdateDatabase",
                "glue:DeleteDatabase",
                "glue:GetConnections",
                "glue:SearchTables",
                "glue:GetTable",
                "glue:CreateTable",
                "glue:UpdateTable",
                "glue:DeleteTable",
                "glue:GetTableVersions",
                "glue:GetPartitions",
                "glue:GetTables",
                "glue:ListWorkflows",
                "glue:BatchGetWorkflows",
                "glue:DeleteWorkflow",
                "glue:GetWorkflowRuns",
                "glue:StartWorkflowRun",
                "glue:GetWorkflow",
                "s3:ListBucket",
                "s3:GetBucketLocation",
                "s3:ListAllMyBuckets",
                "s3:GetBucketAcl",
                "iam:ListUsers",
                "iam:ListRoles",
                "iam:GetRole",
                "iam:GetRolePolicy"
            ],
            "Resource": "*"
        },
        {
            "Sid": "AWSLakeFormationDataAdminDeny",
            "Effect": "Deny",
            "Action": [
                "lakeformation:PutDataLakeSettings"
            ],
                "Resource": "*"
        }
    ]
}
```

**注意**  
此`AWSLakeFormationDataAdmin`政策不會授予資料湖管理員所需的所有許可。建立和執行工作流程並使用服務連結角色 註冊位置時，需要額外的許可`AWSServiceRoleForLakeFormationDataAccess`。如需詳細資訊，請參閱[建立資料湖管理員](initial-lf-config.md#create-data-lake-admin)及[使用 Lake Formation 的服務連結角色](service-linked-roles.md)。

### AWS 受管政策：AWSLakeFormationCrossAccountManager
<a name="lf-cross-account-manager"></a>

[AWSLakeFormationCrossAccountManager](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSLakeFormationCrossAccountManager) 政策透過 Lake Formation 提供對 AWS Glue 資源的跨帳戶存取權，並授予對 AWS Organizations 和 等其他必要服務的讀取存取權 AWS RAM。

您可以將 `AWSLakeFormationCrossAccountManager` 連接至使用者、群組與角色。

**許可詳細資訊**

此政策包含以下許可。
+ `Glue` – 允許主體設定或刪除 Data Catalog 資源政策以進行存取控制。
+ `Organizations` – 允許主體擷取組織的帳戶和組織單位 (OU) 資訊。
+ `ram:CreateResourceShare` – 允許主體建立資源共享。
+ `ram:UpdateResourceShare` –允許主體修改指定資源共享的某些屬性。
+ `ram:DeleteResourceShare` – 允許主體刪除指定的資源共享。
+ `ram:AssociateResourceShare` – 允許主體將指定的主體清單和資源清單新增至資源共享。
+ `ram:DisassociateResourceShare` – 允許主體從參與指定的資源共享中移除指定的主體或資源。
+ `ram:GetResourceShares`– 允許主體擷取您擁有或與您共用之資源共用的詳細資訊。
+ `ram:RequestedResourceType` – 允許主體擷取資源類型 （資料庫、資料表或目錄）。
+ `AssociateResourceSharePermission` – 允許主體新增或取代資源共享中包含的資源類型的 AWS RAM 許可。您可以在資源共享中，只擁有一個與每個資源類型相關聯的許可。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
            "Sid": "AllowCreateResourceShare",
            "Effect": "Allow",
            "Action": [
                "ram:CreateResourceShare"
            ],
            "Resource": "*",
            "Condition": {
                "StringLikeIfExists": {
                    "ram:RequestedResourceType": [
                        "glue:Table",
                        "glue:Database",
                        "glue:Catalog"
                    ]
                }
            }
        },
        {
            "Sid": "AllowManageResourceShare",
            "Effect": "Allow",
            "Action": [
                "ram:UpdateResourceShare",
                "ram:DeleteResourceShare",
                "ram:AssociateResourceShare",
                "ram:DisassociateResourceShare",
                "ram:GetResourceShares"
            ],
            "Resource": "*",
            "Condition": {
                "StringLike": {
                    "ram:ResourceShareName": [
                        "LakeFormation*"
                    ]
                }
            }
        },
        {
            "Sid": "AllowManageResourceSharePermissions",
            "Effect": "Allow",
            "Action": [
                "ram:AssociateResourceSharePermission"
            ],
            "Resource": "*",
            "Condition": {
                "ArnLike": {
                    "ram:PermissionArn": [
                        "arn:aws:ram::aws:permission/AWSRAMLFEnabled*"
                    ]
                }
            }
        },
        {
            "Sid": "AllowXAcctManagerPermissions",
            "Effect": "Allow",
            "Action": [
                "glue:PutResourcePolicy",
                "glue:DeleteResourcePolicy",
                "organizations:DescribeOrganization",
                "organizations:DescribeAccount",
                "ram:Get*",
                "ram:List*"
            ],
            "Resource": "*"
        },
        {
            "Sid": "AllowOrganizationsPermissions",
            "Effect": "Allow",
            "Action": [
                "organizations:ListRoots",
                "organizations:ListAccountsForParent",
                "organizations:ListOrganizationalUnitsForParent"
            ],
            "Resource": "*"
        }
    ]
}
```

------

### AWS 受管政策：AWSGlueConsoleFullAccess
<a name="glue-console-access-policy"></a>

當附加政策的身分使用 時，[AWSGlueConsoleFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess) 政策會授予 AWS Glue 資源的完整存取權 AWS 管理主控台。如果您依照此政策中指定的資源命名慣例，使用者就能擁有完整的主控台功能。此政策通常連接到 AWS Glue 主控台的使用者。

此外，AWS GlueLake Formation 會擔任服務角色`AWSGlueServiceRole`，以允許存取相關服務，包括 Amazon Elastic Compute Cloud (Amazon EC2)、Amazon Simple Storage Service (Amazon S3) 和 Amazon CloudWatch。

### AWS managed policy:LakeFormationDataAccessServiceRolePolicy
<a name="lake-formation-data-access-service-role-policy"></a>

此政策會連接到名為 的服務連結角色`ServiceRoleForLakeFormationDataAccess`，該角色允許服務在您請求時對資源執行動作。您無法將此政策連接至您的 IAM 身分。

此政策允許 Lake Formation 整合 AWS 服務，例如 Amazon Athena 或 Amazon Redshift，使用服務連結角色來探索 Amazon S3 資源。

如需詳細資訊，請參閱 [使用 Lake Formation 的服務連結角色](service-linked-roles.md)。

**許可詳細資訊**

此政策包含以下許可。
+ `s3:ListAllMyBuckets` – 傳回請求已驗證寄件者擁有的所有儲存貯體清單。

------
#### [ JSON ]

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Sid": "LakeFormationDataAccessServiceRolePolicy",
			"Effect": "Allow",
			"Action": [
				"s3:ListAllMyBuckets"
			],
			"Resource": [
				"arn:aws:s3:::*"
			]
		}
	]
}
```

------

**AWS 受管政策的 Lake Formation 更新**  
檢視自此服務開始追蹤這些變更以來，Lake Formation AWS 受管政策更新的詳細資訊。


| 變更 | 描述 | Date | 
| --- | --- | --- | 
| Lake Formation 已更新AWSLakeFormationCrossAccountManager政策。 | Lake Formation 透過將StringLike條件運算子取代為允許 IAM 執行 ARN 格式檢查的運算ArnLike子，增強了 [AWSLakeFormationCrossAccountManager](https://us-east-1.console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSLakeFormationCrossAccountManager) 政策。 | 2025 年 1 月 | 
| Lake Formation 已更新AWSLakeFormationDataAdmin政策。 | Lake Formation 新增下列 AWS Glue Data Catalog CRUD APIs做為多目錄功能的一部分，增強了 [AWSLakeFormationDataAdmin](https://us-east-1.console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSLakeFormationDataAdmin) 政策。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/lake-formation/latest/dg/permissions-reference.html)此受管政策變更旨在確保 Lake Formation 管理員角色預設具有這些新操作的 IAM 許可。 | 2024 年 12 月 | 
| Lake Formation 已更新AWSLakeFormationCrossAccountManager政策。 | Lake Formation 透過將 Sid 元素新增至政策陳述式來增強 [AWSLakeFormationCrossAccountManager](https://us-east-1.console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSLakeFormationCrossAccountManager) 政策。 | 2024 年 3 月 | 
| Lake Formation 已更新AWSLakeFormationDataAdmin政策。 | Lake Formation 透過將 Sid 元素新增至政策陳述式並移除備援動作來增強 [AWSLakeFormationDataAdmin](https://us-east-1.console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSLakeFormationDataAdmin) 政策。 | 2024 年 3 月 | 
| Lake Formation 已更新LakeFormationDataAccessServiceRolePolicy政策。 | Lake Formation 透過將 Sid 元素新增至政策陳述式來增強 [LakeFormationDataAccessServiceRolePolicy](https://us-east-1.console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/LakeFormationDataAccessServiceRolePolicy) 政策。 | 2024 年 2 月 | 
| Lake Formation 已更新AWSLakeFormationCrossAccountManager政策。 | Lake Formation 透過新增在混合存取模式中啟用跨帳戶資料共用的新許可，增強了 [AWSLakeFormationCrossAccountManager](https://us-east-1.console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSLakeFormationCrossAccountManager) 政策。 | 2023 年 10 月 | 
| Lake Formation 已更新AWSLakeFormationCrossAccountManager政策。 | Lake Formation 增強了 [AWSLakeFormationCrossAccountManager](https://us-east-1.console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSLakeFormationCrossAccountManager) 政策，在第一次共用資源時，每個收件人帳戶只建立一個資源共用。之後與相同帳戶共用的所有資源都會連接到相同的資源共用。 | 2022 年 5 月 6 日 | 
| Lake Formation 開始追蹤變更。 | Lake Formation 開始追蹤其 AWS 受管政策的變更。 | 2022 年 5 月 6 日 | 

## 角色建議的許可
<a name="lf-permissions-tables"></a>

以下是每個角色的建議許可。IAM 管理員不包含在內，因為該使用者具有所有資源的所有許可。

**Topics**
+ [Data Lake 管理員許可](#persona-dl-admin)
+ [唯讀管理員許可](#persona-read-only-admin)
+ [資料工程師許可](#persona-engineer)
+ [資料分析師許可](#persona-user)
+ [工作流程角色許可](#persona-workflow-role)

### Data Lake 管理員許可
<a name="persona-dl-admin"></a>

**重要**  
在下列政策中，將 *<account-id>* 取代為有效的 AWS 帳號，並將 *<workflow\$1role>* 取代為具有執行工作流程許可的角色名稱，如 中所定義[工作流程角色許可](#persona-workflow-role)。


| 政策類型 | 政策 | 
| --- | --- | 
| AWS 受管政策 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/lake-formation/latest/dg/permissions-reference.html) 如需選用 AWS 受管政策的相關資訊，請參閱 [建立資料湖管理員](initial-lf-config.md#create-data-lake-admin)。  | 
| 內嵌政策 （用於建立 Lake Formation 服務連結角色） |  <pre>{<br />    "Version": "2012-10-17",		 	 	 <br />    "Statement": [<br />        {<br />            "Effect": "Allow",<br />            "Action": "iam:CreateServiceLinkedRole",<br />            "Resource": "*",<br />            "Condition": {<br />                "StringEquals": {<br />                    "iam:AWSServiceName": "lakeformation.amazonaws.com"<br />                }<br />            }<br />        },<br />        {<br />            "Effect": "Allow",<br />            "Action": [<br />                "iam:PutRolePolicy"<br />            ],<br />            "Resource": "arn:aws:iam::<account-id>:role/aws-service-role/lakeformation.amazonaws.com/AWSServiceRoleForLakeFormationDataAccess"<br />        }<br />    ]<br />}<br /></pre>  | 
| （選用） 內嵌政策 （工作流程角色的通行政策）。只有在資料湖管理員建立和執行工作流程時，才需要這樣做。 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/lake-formation/latest/dg/permissions-reference.html)  | 
| （選用） 內嵌政策 （如果您的帳戶授予或接收跨帳戶 Lake Formation 許可）。此政策用於接受或拒絕 AWS RAM 資源共享邀請，以及啟用將跨帳戶許可授予組織。 ram:EnableSharingWithAwsOrganization 僅適用於管理帳戶中的資料湖管理員 AWS Organizations 。 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/lake-formation/latest/dg/permissions-reference.html)  | 

### 唯讀管理員許可
<a name="persona-read-only-admin"></a>


| Policy type (政策類型) | 政策 | 
| --- | --- | 
| 內嵌政策 （基本） |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/lake-formation/latest/dg/permissions-reference.html)  | 

### 資料工程師許可
<a name="persona-engineer"></a>

**重要**  
在下列政策中，將 *<account-id>* 取代為有效的 AWS 帳號，並將 *<workflow\$1role>* 取代為工作流程角色的名稱。


| 政策類型 | 政策 | 
| --- | --- | 
| AWS 受管政策 | AWSGlueConsoleFullAccess | 
| 內嵌政策 （基本） |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/lake-formation/latest/dg/permissions-reference.html)  | 
| 內嵌政策 （適用於受管資料表上的操作，包括交易中的操作） |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/lake-formation/latest/dg/permissions-reference.html)  | 
| 內嵌政策 （適用於使用 Lake Formation 標籤型存取控制 (LF-TBAC) 方法的中繼資料存取控制） |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/lake-formation/latest/dg/permissions-reference.html)  | 
| 內嵌政策 （工作流程角色的通行政策） |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/lake-formation/latest/dg/permissions-reference.html)  | 

### 資料分析師許可
<a name="persona-user"></a>


| 政策類型 | 政策 | 
| --- | --- | 
| AWS 受管政策 | AmazonAthenaFullAccess | 
| 內嵌政策 （基本） |  <pre>{<br />    "Version": "2012-10-17",		 	 	 <br />    "Statement": [<br />        {<br />            "Effect": "Allow",<br />            "Action": [<br />                "lakeformation:GetDataAccess",<br />                "glue:GetTable",<br />                "glue:GetTables",<br />                "glue:SearchTables",<br />                "glue:GetDatabase",<br />                "glue:GetDatabases",<br />                "glue:GetPartitions",<br />                "lakeformation:GetResourceLFTags",<br />                "lakeformation:ListLFTags",<br />                "lakeformation:GetLFTag",<br />                "lakeformation:SearchTablesByLFTags",<br />                "lakeformation:SearchDatabasesByLFTags"                <br />           ],<br />            "Resource": "*"<br />        }<br />    ]<br />}</pre>  | 
| （選用） 內嵌政策 （適用於受管資料表的操作，包括交易中的操作） |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/lake-formation/latest/dg/permissions-reference.html)  | 

### 工作流程角色許可
<a name="persona-workflow-role"></a>

此角色具有執行工作流程所需的許可。您可以在建立工作流程時指定具有這些許可的角色。

**重要**  
在下列政策中，將 *<region>* 取代為有效的 AWS 區域識別符 （例如 `us-east-1`)、將 *<account-id>* 取代為有效的 AWS 帳號、將 *<workflow\$1role>* 取代為工作流程角色的名稱，並將 *<your-s3-cloudtrail-bucket>* 取代為 AWS CloudTrail 日誌的 Amazon S3 路徑。


| 政策類型 | 政策 | 
| --- | --- | 
| AWS 受管政策 | AWSGlueServiceRole  | 
| 內嵌政策 （資料存取） |  <pre>{<br />    "Version": "2012-10-17",		 	 	 <br />    "Statement": [<br />        {<br />            "Sid": "Lakeformation",<br />            "Effect": "Allow",<br />            "Action": [<br />                 "lakeformation:GetDataAccess",<br />                 "lakeformation:GrantPermissions"<br />             ],<br />            "Resource": "*"<br />        }<br />    ]<br />}</pre>  | 
| 內嵌政策 （工作流程角色的通行政策） |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/lake-formation/latest/dg/permissions-reference.html)  | 
| 內嵌政策 （用於在資料湖外擷取資料，例如 AWS CloudTrail 日誌） |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/lake-formation/latest/dg/permissions-reference.html)  | 

# 變更資料湖的預設設定
<a name="change-settings"></a>

為了維持與 的回溯相容性AWS Glue， AWS Lake Formation 具有下列初始安全性設定：
+ `Super` 許可會授予所有現有 AWS Glue Data Catalog 資源`IAMAllowedPrincipals`上的 群組。
+ 新 Data Catalog 資源已啟用「僅使用 IAM 存取控制」設定。

這些設定實際上會導致僅由 AWS Identity and Access Management (IAM) 政策控制對 Data Catalog 資源和 Amazon S3 位置的存取。個別 Lake Formation 許可未生效。

`IAMAllowedPrincipals` 群組包含 IAM 政策允許存取 Data Catalog 資源的任何 IAM 使用者和角色。`Super` 許可可讓委託人在授予它的資料庫或資料表上執行每個支援的 Lake Formation 操作。

若要變更安全設定，以便由 Lake Formation 許可管理對 Data Catalog 資源 （資料庫和資料表） 的存取，請執行下列動作：

1. 變更新資源的預設安全設定。如需說明，請參閱[變更預設許可模型或使用混合存取模式](initial-lf-config.md#setup-change-cat-settings)。

1. 變更現有 Data Catalog 資源的設定。如需說明，請參閱[將AWS Glue資料許可升級到 AWS Lake Formation 模型](upgrade-glue-lake-formation.md)。

**使用 Lake Formation `PutDataLakeSettings` API 操作變更預設安全設定**  
您也可以使用 Lake Formation [PutDataLakeSettings](https://docs.aws.amazon.com/lake-formation/latest/APIReference/API_PutDataLakeSettings.html) API 操作來變更預設安全設定。此動作將選用的目錄 ID 和 [DataLakeSettings](https://docs.aws.amazon.com/lake-formation/latest/APIReference/API_DataLakeSettings.html) 結構做為引數。

若要在新資料庫和資料表上強制執行 Lake Formation 的中繼資料和基礎資料存取控制，請依下列方式編寫`DataLakeSettings`結構的程式碼。

**注意**  
將 *<AccountID>* 取代為有效的 AWS 帳戶 ID，並將 *<Username>* 取代為有效的 IAM 使用者名稱。您可以將多個使用者指定為資料湖管理員。

```
{
    "DataLakeSettings": {
        "DataLakeAdmins": [
            {
                "DataLakePrincipalIdentifier": "arn:aws:iam::<AccountId>:user/<Username>"
            }
        ],
        "CreateDatabaseDefaultPermissions": [],
        "CreateTableDefaultPermissions": []
    }
}
```

您也可以編寫結構的程式碼，如下所示。省略 `CreateDatabaseDefaultPermissions`或 `CreateTableDefaultPermissions` 參數等同於傳遞空清單。

```
{
    "DataLakeSettings": {
        "DataLakeAdmins": [
            {
                "DataLakePrincipalIdentifier": "arn:aws:iam::<AccountId>:user/<Username>"
            }
        ]
    }
}
```

此動作會有效地撤銷新資料庫和資料表上`IAMAllowedPrincipals`群組的所有 Lake Formation 許可。建立資料庫時，您可以覆寫此設定。

若要僅在新資料庫和資料表上透過 IAM 強制執行中繼資料和基礎資料存取控制，請依下列方式對`DataLakeSettings`結構編寫程式碼。

```
{
    "DataLakeSettings": {
        "DataLakeAdmins": [
            {
                "DataLakePrincipalIdentifier": "arn:aws:iam::<AccountId>:user/<Username>"
            }
        ],
        "CreateDatabaseDefaultPermissions": [
            {
                "Principal": {
                    "DataLakePrincipalIdentifier": "IAM_ALLOWED_PRINCIPALS"
                },
                "Permissions": [
                    "ALL"
                ]
            }
        ],
        "CreateTableDefaultPermissions": [
            {
                "Principal": {
                    "DataLakePrincipalIdentifier": "IAM_ALLOWED_PRINCIPALS"
                },
                "Permissions": [
                    "ALL"
                ]
            }
        ]
    }
}
```

這會將 `Super` Lake Formation 許可授予新資料庫和資料表上的 `IAMAllowedPrincipals`群組。建立資料庫時，您可以覆寫此設定。

**注意**  
在上述`DataLakeSettings`結構中， 的唯一允許值`DataLakePrincipalIdentifier`為 `IAM_ALLOWED_PRINCIPALS`，而 的唯一允許值`Permissions`為 `ALL`。

# 隱含 Lake Formation 許可
<a name="implicit-permissions"></a>

AWS Lake Formation 會將下列隱含許可授予資料湖管理員、資料庫建立者和資料表建立者。

**資料湖管理員**  
+ 有權`Describe`存取 Data Catalog 中的所有資源，但直接從另一個帳戶與不同主體共用的資源除外。管理員無法撤銷此存取權。
+ 擁有資料湖中任何地方的資料位置許可。
+ 可以將 Data Catalog 中任何資源的存取權授予或撤銷給任何委託人 （包括自己）。管理員無法撤銷此存取權。
+ 可以在 Data Catalog 中建立資料庫。
+ 可以將建立資料庫的許可授予其他使用者。
只有當資料湖管理員具有 IAM 許可時，才能註冊 Amazon S3 位置。本指南中建議的資料湖管理員政策會授予這些許可。此外，資料湖管理員沒有隱含許可來捨棄其他人建立的資料庫或更改/捨棄資料表。不過，他們可以授予自己執行此操作的許可。
如需資料湖管理員的詳細資訊，請參閱 [建立資料湖管理員](initial-lf-config.md#create-data-lake-admin)。

**目錄建立者**  
+ 對其建立的目錄擁有所有目錄許可，對其在目錄中建立的資料庫和資料表具有許可，並且可以授予相同 AWS 帳戶中的其他主體在目錄中建立資料庫和資料表的許可。同時具有 `AWSLakeFormationCrossAccountManager` AWS 受管政策的目錄建立者可以將目錄的許可授予其他 AWS 帳戶或組織。

  資料湖管理員可以使用 Lake Formation 主控台或 API 來指定目錄建立者。
**注意**  
目錄建立者不會隱含地對其他人在目錄中建立的資料庫和資料表具有許可。
如需建立目錄的詳細資訊，請參閱 [將您的資料帶入 AWS Glue Data Catalog](bring-your-data-overview.md)。

**資料庫建立者**  
+ 對其建立的資料庫擁有所有資料庫許可、對其在資料庫中建立的資料表擁有許可，並且可以授予相同 AWS 帳戶中的其他主體在資料庫中建立資料表的許可。同時具有 `AWSLakeFormationCrossAccountManager` AWS 受管政策的資料庫建立者可以將資料庫的許可授予其他 AWS 帳戶或組織。

  資料湖管理員可以使用 Lake Formation 主控台或 API 來指定資料庫建立者。
**注意**  
資料庫建立者不會隱含地擁有其他人在資料庫中建立之資料表的許可。
如需詳細資訊，請參閱[建立資料庫](creating-database.md)。

**資料表建立者**  
+ 對其建立的資料表擁有所有許可。
+ 可以將他們建立的所有資料表的許可授予相同 AWS 帳戶中的主體。
+ 如果他們擁有 `AWSLakeFormationCrossAccountManager` AWS 受管政策，則可以將他們建立的所有資料表的許可授予其他 AWS 帳戶或組織。
+ 可以檢視包含其所建立資料表的資料庫。

# Lake Formation 許可參考
<a name="lf-permissions-reference"></a>

若要執行 AWS Lake Formation 操作，主體需要 Lake Formation 許可和 AWS Identity and Access Management (IAM) 許可。您通常會使用*粗粒*存取控制政策授予 IAM 許可，如中所述[Lake Formation 許可概觀](lf-permissions-overview.md)。您可以使用 主控台、 API 或 AWS Command Line Interface () 授予 Lake Formation 許可AWS CLI。

若要了解如何授予或撤銷 Lake Formation 許可，請參閱 [授予 Data Catalog 資源的許可](granting-catalog-permissions.md)和 [授予資料位置許可](granting-location-permissions.md)。

**注意**  
本節中的範例示範如何將許可授予相同 AWS 帳戶中的主體。如需跨帳戶授與的範例，請參閱 [Lake Formation 中的跨帳戶資料共用](cross-account-permissions.md)。

## 每個資源類型的 Lake Formation 許可
<a name="lf-resource-permissions-summary"></a>

以下是每種資源類型可用的有效 Lake Formation 許可：

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/lake-formation/latest/dg/lf-permissions-reference.html)

**Topics**
+ [每個資源類型的 Lake Formation 許可](#lf-resource-permissions-summary)
+ [Lake Formation 授予和撤銷 AWS CLI 命令](#perm-command-format)
+ [Lake Formation 許可](#lf-permissions)

## Lake Formation 授予和撤銷 AWS CLI 命令
<a name="perm-command-format"></a>

本節中的每個許可描述都包含使用 AWS CLI 命令授予許可的範例。以下是 Lake Formation **grant-permissions**和 **revoke-permissions** AWS CLI 命令的摘要。

```
grant-permissions
[--catalog-id <value>]
--principal <value>
--resource <value>
--permissions <value>
[--permissions-with-grant-option <value>]
[--cli-input-json <value>]
[--generate-cli-skeleton <value>]
```

```
revoke-permissions
[--catalog-id <value>]
--principal <value>
--resource <value>
--permissions <value>
[--permissions-with-grant-option <value>]
[--cli-input-json <value>]
[--generate-cli-skeleton <value>]
```

如需這些命令的詳細說明，請參閱*AWS CLI 《 命令參考*》中的 [grant-permissions](https://docs.aws.amazon.com/cli/latest/reference/lakeformation/grant-permissions.html) 和 [revoke-permissions](https://docs.aws.amazon.com/cli/latest/reference/lakeformation/revoke-permissions.html)。本節提供 `--principal`選項的其他資訊。

`--principal` 選項的值為下列其中一項：
+ (IAM) 使用者或角色的 Amazon Resource Name AWS Identity and Access Management (ARN)
+ 透過 SAML 提供者進行身分驗證之使用者或群組的 ARN，例如 Microsoft Active Directory Federation Service (AD FS)
+ Amazon Quick 使用者或群組的 ARN
+ 對於跨帳戶許可、 AWS 帳戶 ID、組織 ID 或組織單位 ID
+ 對於 IAM Identity Center 使用者或群組，IAM Identity Center 使用者或群組 ARN。

以下是所有`--principal`類型的語法和範例。

**Principal 是 IAM 使用者**  
語法:  

```
--principal DataLakePrincipalIdentifier=arn:aws:iam::<account-id>:user/<user-name>
```
範例：  

```
--principal DataLakePrincipalIdentifier=arn:aws:iam::111122223333:user/datalake_user1
```

**Principal 是 IAM 角色**  
語法:  

```
--principal DataLakePrincipalIdentifier=arn:aws:iam::<account-id>:role/<role-name>
```
範例：  

```
--principal DataLakePrincipalIdentifier=arn:aws:iam::111122223333:role/workflowrole
```

**委託人是透過 SAML 提供者進行身分驗證的使用者**  
語法：  

```
--principal DataLakePrincipalIdentifier=arn:aws:iam::<account-id>:saml-provider/<SAMLproviderName>:user/<user-name>
```
範例：  

```
--principal DataLakePrincipalIdentifier=arn:aws:iam::111122223333:saml-provider/idp1:user/datalake_user1
```

```
--principal DataLakePrincipalIdentifier=arn:aws:iam::111122223333:saml-provider/AthenaLakeFormationOkta:user/athena-user@example.com
```

**委託人是透過 SAML 提供者進行驗證的群組**  
語法：  

```
--principal DataLakePrincipalIdentifier=arn:aws:iam::<account-id>:saml-provider/<SAMLproviderName>:group/<group-name> 
```
範例：  

```
--principal DataLakePrincipalIdentifier=arn:aws:iam::111122223333:saml-provider/idp1:group/data-scientists
```

```
--principal DataLakePrincipalIdentifier=arn:aws:iam::111122223333:saml-provider/AthenaLakeFormationOkta:group/my-group
```

**Principal 是 Amazon Quick Enterprise Edition 使用者**  
語法：  

```
--principal DataLakePrincipalIdentifier=arn:aws:quicksight:<region>:<account-id>:user/<namespace>/<user-name>
```
對於 *<namespace>*，您必須指定 `default`。
範例：  

```
--principal DataLakePrincipalIdentifier=arn:aws:quicksight:us-east-1:111122223333:user/default/bi_user1
```

**Principal 是 Amazon Quick Enterprise Edition 群組**  
語法：  

```
--principal DataLakePrincipalIdentifier=arn:aws:quicksight:<region>:<account-id>:group/<namespace>/<group-name> 
```
對於 *<namespace>*，您必須指定 `default`。
範例：  

```
--principal DataLakePrincipalIdentifier=arn:aws:quicksight:us-east-1:111122223333:group/default/data_scientists
```

**委託人是 AWS 帳戶**  
語法:  

```
--principal DataLakePrincipalIdentifier=<account-id>
```
範例：  

```
--principal DataLakePrincipalIdentifier=111122223333
```

**委託人是組織**  
語法:  

```
--principal DataLakePrincipalIdentifier=arn:aws:organizations::<account-id>:organization/<organization-id>
```
範例：  

```
--principal DataLakePrincipalIdentifier=arn:aws:organizations::111122223333:organization/o-abcdefghijkl
```

**Principal 是組織單位**  
語法:  

```
--principal DataLakePrincipalIdentifier=arn:aws:organizations::<account-id>:ou/<organization-id>/<organizational-unit-id>
```
範例：  

```
--principal DataLakePrincipalIdentifier=arn:aws:organizations::111122223333:ou/o-abcdefghijkl/ou-ab00-cdefghij
```

**Principal 是 IAM Identity Center 身分使用者或群組**  
範例：使用者  

```
--principal DataLakePrincipalIdentifier=arn:aws:identitystore:::user/<UserID>
```
範例：群組：  

```
--principal DataLakePrincipalIdentifier=arn:aws:identitystore:::group/<GroupID>
```

**Principal 是 IAM 群組 - `IAMAllowedPrincipals`**  
Lake Formation 會將 Data Catalog 中所有資料庫和資料表的`Super`許可設定為`IAMAllowedPrincipals`預設稱為 的群組。如果此群組許可存在於資料庫或資料表上，則您帳戶中的所有主體都可以透過 IAM 主體政策存取資源 AWS Glue。當您開始使用 Lake Formation 許可來保護先前受到 IAM 政策保護的資料目錄資源時，它可提供回溯相容性 AWS Glue。  
當您使用 Lake Formation 管理 Data Catalog 資源的許可時，您必須先撤銷資源的`IAMAllowedPrincipals`許可，或選擇將主體和資源加入混合存取模式， Lake Formation 許可才能運作。  
範例：  

```
--principal DataLakePrincipalIdentifier=IAM_Allowed_Principals
```

**Principal 是 IAM 群組 - `ALLIAMPrincipals`**  
當您授予在 Data Catalog 資源上`ALLIAMPrincipals`分組的許可時，帳戶中的每個主體都可以使用 Lake Formation 許可和 IAM 許可來存取 Data Catalog 資源。  
範例：  

```
--principal DataLakePrincipalIdentifier=123456789012:IAMPrincipals
```

## Lake Formation 許可
<a name="lf-permissions"></a>

本節包含您可以授予委託人的可用 Lake Formation 許可。

### `ALTER`
<a name="perm-alter"></a>


| 權限 | 在此資源上授予 | 承授者也需要 | 
| --- | --- | --- | 
| ALTER | DATABASE | glue:UpdateDatabase  | 
| ALTER | TABLE | glue:UpdateTable | 
| ALTER | LF-Tag | lakeformation:UpdateLFTag | 

具有此許可的主體可以變更 Data Catalog 中資料庫或資料表的中繼資料。對於資料表，您可以變更資料欄結構描述並新增資料欄參數。您無法變更中繼資料資料表指向的基礎資料中的資料欄。

如果正在變更的 屬性是已註冊的 Amazon Simple Storage Service (Amazon S3) 位置，委託人必須擁有新位置的資料位置許可。

**Example**  
下列範例會將 `ALTER`許可授予 AWS 帳戶 1111-2222-3333 `retail`中資料庫`datalake_user1`上的 使用者。  

```
aws lakeformation grant-permissions --principal DataLakePrincipalIdentifier=arn:aws:iam::111122223333:user/datalake_user1 --permissions "ALTER" --resource '{ "Database": {"Name":"retail"}}'
```

**Example**  
下列範例`ALTER`會授予資料庫 `datalake_user1`中 資料表`inventory`上的使用者 `retail`。  

```
aws lakeformation grant-permissions --principal DataLakePrincipalIdentifier=arn:aws:iam::111122223333:user/datalake_user1 --permissions "ALTER" --resource '{ "Table": {"DatabaseName":"retail", "Name":"inventory"}}'
```

### `CREATE_DATABASE`
<a name="perm-create-database"></a>


| 權限 | 在此資源上授予 | 承授者也需要 | 
| --- | --- | --- | 
| CREATE\$1DATABASE | Data Catalog | glue:CreateDatabase | 

具有此許可的主體可以在 Data Catalog 中建立中繼資料資料庫或資源連結。委託人也可以在資料庫中建立資料表。

**Example**  
下列範例`CREATE_DATABASE`授予 AWS 帳戶 1111-2222-3333 `datalake_user1`中的使用者。  

```
aws lakeformation grant-permissions --principal DataLakePrincipalIdentifier=arn:aws:iam::111122223333:user/datalake_user1 --permissions "CREATE_DATABASE" --resource '{ "Catalog": {}}'
```

當委託人在 Data Catalog 中建立資料庫時，不會授予基礎資料的許可。已授予下列其他中繼資料許可 （以及將這些許可授予他人的能力）：
+ `CREATE_TABLE` 資料庫中的
+ `ALTER` 資料庫
+ `DROP` 資料庫

建立資料庫時，主體可以選擇性地指定 Amazon S3 位置。根據委託人是否具有資料位置許可，`CREATE_DATABASE`許可可能不足以在所有情況下建立資料庫。請務必謹記下列三個案例。


| 建立資料庫使用案例 | 需要的許可 | 
| --- | --- | 
| 未指定位置屬性。 | CREATE\$1DATABASE 已足夠。 | 
| 已指定位置屬性，且位置不是由 Lake Formation 管理 （未註冊）。 | CREATE\$1DATABASE 已足夠。 | 
| 已指定位置屬性，且位置由 Lake Formation 管理 （已註冊）。 | CREATE\$1DATABASE 必要，加上指定位置上的資料位置許可。 | 

### `CREATE_TABLE`
<a name="perm-create-table"></a>


| 權限 | 在此資源上授予 | 承授者也需要 | 
| --- | --- | --- | 
| CREATE\$1TABLE | DATABASE | glue:CreateTable  | 

具有此許可的主體可以在指定資料庫中的 Data Catalog 中建立中繼資料表或資源連結。

**Example**  
下列範例授予使用者在 AWS 帳戶 1111-2222-3333 的`retail`資料庫中建立資料表的`datalake_user1`許可。  

```
aws lakeformation grant-permissions --principal DataLakePrincipalIdentifier=arn:aws:iam::111122223333:user/datalake_user1 
 --permissions "CREATE_TABLE" --resource '{ "Database": {"Name":"retail"}}'
```

當委託人在 Data Catalog 中建立資料表時，資料表上的所有 Lake Formation 許可都會授予委託人，並能夠將這些許可授予其他人。

**跨帳戶授權**  
如果資料庫擁有者帳戶`CREATE_TABLE`授予收件人帳戶，且收件人帳戶中的使用者成功在擁有者帳戶的資料庫中建立資料表，則適用下列規則：
+ 收件人帳戶中的使用者和資料湖管理員擁有資料表上的所有 Lake Formation 許可。他們可以將資料表的許可授予其帳戶中的其他主體。他們無法將許可授予擁有者帳戶或任何其他帳戶中的主體。
+ 擁有者帳戶中的資料湖管理員可以將資料表的許可授予其帳戶中的其他主體。

**資料位置許可**  
當您嘗試建立指向 Amazon S3 位置的資料表時，取決於您是否具有資料位置許可，`CREATE_TABLE`許可可能不足以建立資料表。請務必謹記下列三個案例。


| 建立資料表使用案例 | 需要的許可 | 
| --- | --- | 
| 指定的位置不是由 Lake Formation 管理 （未註冊）。 | CREATE\$1TABLE 已足夠。 | 
| 指定的位置由 Lake Formation （已註冊） 管理，且包含 的資料庫沒有位置屬性，或具有不是資料表位置 Amazon S3 字首的位置屬性。 | CREATE\$1TABLE 必要，加上指定位置上的資料位置許可。 | 
| 指定的位置由 Lake Formation （已註冊） 管理，且包含 的資料庫具有指向已註冊位置的位置屬性，並且是資料表位置的 Amazon S3 字首。 | CREATE\$1TABLE 已足夠。 | 

### `DATA_LOCATION_ACCESS`
<a name="perm-location"></a>


| 權限 | 在此資源上授予 | 承授者也需要 | 
| --- | --- | --- | 
| DATA\$1LOCATION\$1ACCESS | Amazon S3 位置 | （位置上的 Amazon S3 許可，必須由用來註冊位置的角色指定。) | 

這是唯一的資料位置許可。具有此許可的主體可以建立指向指定 Amazon S3 位置的中繼資料資料庫或資料表。位置必須註冊。在位置具有資料位置許可的委託人在子位置也有位置許可。

**Example**  
下列範例`s3://products/retail`會將 上的資料位置許可授予帳戶 1111-2222-3333 `datalake_user1`中的 AWS 使用者。  

```
aws lakeformation grant-permissions --principal DataLakePrincipalIdentifier=arn:aws:iam::111122223333:user/datalake_user1 --permissions "DATA_LOCATION_ACCESS" --resource '{ "DataLocation": {"ResourceArn":"arn:aws:s3:::products/retail"}}'
```

`DATA_LOCATION_ACCESS` 不需要查詢或更新基礎資料。此許可僅適用於建立 Data Catalog 資源。

如需資料位置許可的詳細資訊，請參閱 [Underlying data access control](access-control-underlying-data.md#data-location-permissions)。

### `DELETE`
<a name="perm-delete"></a>


| 權限 | 在此資源上授予 | 承授者也需要 | 
| --- | --- | --- | 
| DELETE | TABLE | （如果位置已註冊，則不需要額外的 IAM 許可。) | 

具有此許可的主體可以在資料表指定的 Amazon S3 位置插入、更新和讀取基礎資料。委託人也可以在 Lake Formation 主控台上檢視資料表，並使用 AWS Glue API 擷取資料表的相關資訊。

**Example**  
下列範例會將 `DELETE`許可授予`retail` AWS 帳戶 1111-2222-3333 `inventory` 中資料庫資料表`datalake_user1`上的使用者。  

```
aws lakeformation grant-permissions --principal DataLakePrincipalIdentifier=arn:aws:iam::111122223333:user/datalake_user1 --permissions "DELETE" --resource '{ "Table": {"DatabaseName":"retail", "Name":"inventory"}}'
```

此許可僅適用於 Amazon S3 中的資料，不適用於 Amazon Relational Database Service (Amazon RDS) 等其他資料存放區中的資料。

### `DESCRIBE`
<a name="perm-describe"></a>


| 權限 | 在此資源上授予 | 承授者也需要 | 
| --- | --- | --- | 
| DESCRIBE |  資料表資源連結 資料庫資源連結  |  `glue:GetTable` `glue:GetDatabase`  | 
| DESCRIBE | DATABASE | glue:GetDatabase | 
| DESCRIBE | TABLE | glue:GetTable | 
| DESCRIBE | LF-Tag |  `glue:GetTable` `glue:GetDatabase` `lakeformation:GetResourceLFTags` `lakeformation:ListLFTags` `lakeformation:GetLFTag` `lakeformation:SearchTablesByLFTags` `lakeformation:SearchDatabasesByLFTags`  | 

具有此許可的主體可以檢視指定的資料庫、資料表或資源連結。不會隱含授予其他 Data Catalog 許可，也不會隱含授予資料存取許可。資料庫和資料表會出現在整合服務的查詢編輯器中，但除非授予其他 Lake Formation 許可 （例如 `SELECT`)，否則無法對其進行任何查詢。

例如，`DESCRIBE`在資料庫中具有 的使用者可以看到資料庫和所有資料庫中繼資料 （描述、位置等）。不過，使用者無法得知資料庫包含哪些資料表，也無法捨棄、更改或建立資料庫中的資料表。同樣地，在資料表`DESCRIBE`上具有 的使用者可以看到資料表和資料表中繼資料 （描述、結構描述、位置等），但無法捨棄、變更或對資料表執行查詢。

以下是 的一些其他規則`DESCRIBE`：
+ 如果使用者對資料庫、資料表或資源連結具有其他 Lake Formation 許可，`DESCRIBE`則會隱含授予 。
+ 如果使用者`SELECT`只有資料表的欄子集 （部分 `SELECT`)，則使用者只能看到這些欄。
+ 您無法`DESCRIBE`將 授予在資料表上具有部分選取的使用者。相反地，您無法為`DESCRIBE`授予的資料表指定資料欄包含或排除清單。

**Example**  
下列範例將`DESCRIBE`許可授予帳戶 `retail` AWS 1111-2222-3333 `inventory-link` 中資料庫`datalake_user1`的資料表資源連結上的使用者。  

```
aws lakeformation grant-permissions --principal DataLakePrincipalIdentifier=arn:aws:iam::111122223333:user/datalake_user1 --permissions "DESCRIBE" --resource '{ "Table": {"DatabaseName":"retail", "Name":"inventory-link"}}'
```

### `DROP`
<a name="perm-drop"></a>


| 權限 | 在此資源上授予 | 承授者也需要 | 
| --- | --- | --- | 
| DROP | DATABASE | glue:DeleteDatabase | 
| DROP | TABLE | glue:DeleteTable  | 
| DROP | LF-Tag | lakeformation:DeleteLFTag  | 
| DROP |  資料庫資源連結 資料表資源連結  | `glue:DeleteDatabase` `glue:DeleteTable`  | 

具有此許可的主體可以在資料目錄中捨棄資料庫、資料表或資源連結。您無法將資料庫上的 DROP 授予外部帳戶或組織。

**警告**  
捨棄資料庫會捨棄資料庫中的所有資料表。

**Example**  
下列範例會將 `DROP`許可授予 AWS 帳戶 1111-2222-3333 `retail`中資料庫`datalake_user1`的使用者。  

```
aws lakeformation grant-permissions --principal DataLakePrincipalIdentifier=arn:aws:iam::111122223333:user/datalake_user1 --permissions "DROP" --resource '{ "Database": {"Name":"retail"}}'
```

**Example**  
下列範例`DROP`會授予資料庫 `datalake_user1`中 資料表`inventory`上的使用者`retail`。  

```
aws lakeformation grant-permissions --principal DataLakePrincipalIdentifier=arn:aws:iam::111122223333:user/datalake_user1 --permissions "DROP" --resource '{ "Table": {"DatabaseName":"retail", "Name":"inventory"}}'
```

**Example**  
下列範例會將資料庫 `datalake_user1`中資料表資源連結`inventory-link`上的 `DROP`授予使用者`retail`。  

```
aws lakeformation grant-permissions --principal DataLakePrincipalIdentifier=arn:aws:iam::111122223333:user/datalake_user1 --permissions "DROP" --resource '{ "Table": {"DatabaseName":"retail", "Name":"inventory-link"}}'
```

### `INSERT`
<a name="perm-insert"></a>


| 權限 | 在此資源上授予 | 承授者也需要 | 
| --- | --- | --- | 
| INSERT | TABLE | （如果位置已註冊，則不需要額外的 IAM 許可。) | 

具有此許可的主體可以在資料表指定的 Amazon S3 位置插入、更新和讀取基礎資料。委託人也可以在 Lake Formation 主控台中檢視資料表，並使用 AWS Glue API 擷取資料表的相關資訊。

**Example**  
下列範例會將 `INSERT`許可授予 AWS 帳戶 1111-2222-3333 `inventory` 中資料庫`datalake_user1`資料表`retail`上的使用者。  

```
aws lakeformation grant-permissions --principal DataLakePrincipalIdentifier=arn:aws:iam::111122223333:user/datalake_user1 --permissions "INSERT" --resource '{ "Table": {"DatabaseName":"retail", "Name":"inventory"}}'
```

此許可僅適用於 Amazon S3 中的資料，不適用於 Amazon RDS 等其他資料存放區中的資料。

### `SELECT`
<a name="perm-select"></a>


| 權限 | 在此資源上授予 | 承授者也需要 | 
| --- | --- | --- | 
| SELECT |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/lake-formation/latest/dg/lf-permissions-reference.html)  | （如果位置已註冊，則不需要額外的 IAM 許可。) | 

具有此許可的主體可以檢視 Data Catalog 中的資料表，也可以在資料表指定的位置查詢 Amazon S3 中的基礎資料。委託人可以在 Lake Formation 主控台中檢視資料表，並使用 AWS Glue API 擷取資料表的相關資訊。如果在授予此許可時套用資料欄篩選，委託人只能檢視包含資料欄的中繼資料，並且只能從包含的資料欄查詢資料。

**注意**  
整合式分析服務負責在處理查詢時套用資料欄篩選。

**Example**  
下列範例會將 `SELECT`許可授予`retail` AWS 帳戶 1111-2222-3333 `inventory` 中資料庫資料表`datalake_user1`上的使用者。  

```
aws lakeformation grant-permissions --principal DataLakePrincipalIdentifier=arn:aws:iam::111122223333:user/datalake_user1 --permissions "SELECT" --resource '{ "Table": {"DatabaseName":"retail", "Name":"inventory"}}'
```

此許可僅適用於 Amazon S3 中的資料，不適用於 Amazon RDS 等其他資料存放區中的資料。

您可以使用選用的包含清單或排除清單來篩選 （限制對 的存取） 特定資料欄。包含清單會指定可存取的資料欄。排除清單會指定無法存取的資料欄。如果沒有包含或排除清單，則可以存取所有資料表資料欄。

的結果只會`glue:GetTable`傳回發起人有權檢視的資料欄。整合服務，例如 Amazon Athena 和 Amazon Redshift honor 資料欄包含和排除清單。

**Example**  
下列範例`inventory`使用包含清單`SELECT`將 授予資料表`datalake_user1`上的使用者。  

```
aws lakeformation grant-permissions --principal DataLakePrincipalIdentifier=arn:aws:iam::111122223333:user/datalake_user1 --permissions "SELECT"  --resource '{ "TableWithColumns": {"DatabaseName":"retail", "Name":"inventory", "ColumnNames": ["prodcode","location","period","withdrawals"]}}'
```

**Example**  
下一個範例會使用排除清單在`inventory`資料表`SELECT`上授予 。  

```
aws lakeformation grant-permissions --principal DataLakePrincipalIdentifier=arn:aws:iam::111122223333:user/datalake_user1 --permissions "SELECT"  --resource '{ "TableWithColumns": {"DatabaseName":"retail", "Name":"inventory", "ColumnWildcard": {"ExcludedColumnNames": ["intkey", "prodcode"]}}}'
```

下列限制適用於 `SELECT`許可：
+ 授予 時`SELECT`，如果套用資料欄篩選，則無法包含授予選項。
+ 對於屬於分割區索引鍵的資料欄，您無法限制存取控制。
+ 在資料表中資料欄子集上具有 `SELECT`許可的主體，無法獲得該資料表上的 `ALTER`、`DELETE`、 `DROP`或 `INSERT`許可。同樣地，無法在資料表上授予具有 `ALTER`、`DELETE`、 `DROP`或 `INSERT`許可的主體具有資料欄篩選的`SELECT`許可。

`SELECT` 許可一律會以個別資料列的形式出現在 Lake Formation 主控台**的資料許可**頁面上。下圖顯示 `SELECT` 已授予`inventory`資料表中`datalake_user3`所有資料欄的使用者`datalake_user2`和 。

![\[資料許可頁面會顯示四列。第一列和第三列列出資源類型為 的刪除和插入許可 資料表，而第二列和第四列列出資源類型為 Column 的選取許可，以及顯示為 retail.inventory.* 的資源。\]](http://docs.aws.amazon.com/zh_tw/lake-formation/latest/dg/images/data-permissions-dialog-select-cross.png)


### `Super`
<a name="perm-super"></a>


| 權限 | 在此資源上授予 | 承授者也需要 | 
| --- | --- | --- | 
| Super | DATABASE | glue:\$1Database\$1  | 
| Super | TABLE | glue:\$1Table\$1, glue:\$1Partition\$1 | 

此許可允許主體在資料庫或資料表上執行每個支援的 Lake Formation 操作。您無法將資料庫`Super`上的 授予外部帳戶。

此許可可以與其他 Lake Formation 許可共存。例如，您可以授予中繼資料資料表上的 `SELECT`、 `Super`和 `INSERT`許可。主體接著可以在資料表上執行所有支援的操作。當您撤銷 時`Super`， `SELECT`和 `INSERT`許可會保留，委託人只能執行選取和插入操作。

您可以將其授予群組 ，而不是授予`Super`個別委託人`IAMAllowedPrincipals`。`IAMAllowedPrincipals` 群組會自動建立，並包含 IAM 政策允許存取 Data Catalog 資源的所有 IAM 使用者和角色。`Super` 將 Data Catalog 資源`IAMAllowedPrincipals`的存取權授予 時，只有 IAM 政策可有效控制資源的存取。

您可以利用 Lake Formation `IAMAllowedPrincipals` 主控台**的設定**頁面上的選項，讓 自動將新目錄資源的`Super`許可授予 。

![\[資料目錄設定對話方塊具有字幕「新建立的資料庫和資料表的預設許可」，並有兩個核取方塊，如文字中所述。\]](http://docs.aws.amazon.com/zh_tw/lake-formation/latest/dg/images/settings-page.png)

+ 若要`IAMAllowedPrincipals`為所有新資料庫授予 `Super` ，請選取**僅對新資料庫使用 IAM 存取控制**。
+ 若要`IAMAllowedPrincipals`為新資料庫中的所有新資料表授予 `Super` ，請選取**僅對新資料庫中的新資料表使用 IAM 存取控制**。
**注意**  
此選項會導致核取方塊 **在建立資料庫對話方塊中，依預設只針對此資料庫中的新資料表使用 IAM 存取控制**。 ****它什麼都不做。這是**建立資料庫**對話方塊中的核取方塊，可讓 授予 `Super`給 `IAMAllowedPrincipals`。

這些**設定**頁面選項預設為啟用。如需詳細資訊，請參閱下列內容：
+ [變更資料湖的預設設定](change-settings.md)
+ [將AWS Glue資料許可升級到 AWS Lake Formation 模型](upgrade-glue-lake-formation.md)

### `SUPER_USER`
<a name="perm-super-user"></a>


| 權限 | 在此資源上授予 | 承授者也需要 | 
| --- | --- | --- | 
| Super user | Catalog | glue:GetCatalog  | 

您只能將 `Super user`許可授予預設 Data Catalog 內目錄上的特定主體。您無法將預設目錄或其他資源類型的`Super user`許可授予外部帳戶中的主體，例如資料庫和資料表。`Super user` 許可許可允許委託人對授予目錄中的資料庫和資料表執行每個支援的 Lake Formation 操作。

透過 `Super user`許可，委託人 （承授者） 能夠對目錄中的資源 （目錄、資料庫和資料表） 執行下列動作：
+ `CREATE_DATABASE`，目錄上的`DESCRIBE`許可。
+ `DROP`目錄內所有資料庫的 `ALTER`、、`CREATE_TABLE`、 `DESCRIBE`（有效 `SUPER`) 許可。
+ `DROP`目錄內所有資料庫內所有資料表的 `ALTER`、`DESCRIBE`、`SELECT`、`INSERT`、 `DELETE`（有效 `SUPER`) 許可。
+ `All` （有效 SUPER) 目錄內目錄的許可。
+ 授予許可 （將這些許可授予其他主體的能力） 目錄內所有目錄、資料庫和資料表的許可。

透過目錄資源的 `Super user` 許可，承授者不得在目錄上執行或委派 `ALTER`和 `DROP`動作。

### `ASSOCIATE`
<a name="perm-associate"></a>


| 權限 | 在此資源上授予 | 承授者也需要 | 
| --- | --- | --- | 
| ASSOCIATE | LF-Tag |   `glue:GetDatabase` `glue:GetTable`  `lakeformation:AddLFTagsToResource"` `lakeformation:RemoveLFTagsFromResource"` `lakeformation:GetResourceLFTags` `lakeformation:ListLFTags` `lakeformation:GetLFTag` `lakeformation:SearchTablesByLFTags` `lakeformation:SearchDatabasesByLFTags`  | 

在 LF-Tag 具有此許可的主體可以將 LF-Tag 指派給 Data Catalog 資源。`ASSOCIATE` 隱含授予 `DESCRIBE`。

**Example**  
此範例`datalake_user1`使用金鑰 授予使用者 LF-Tag 上的`ASSOCIATE`許可`module`。它授予檢視和指派該索引鍵所有值的許可，如星號 (\$1) 所示。  

```
aws lakeformation grant-permissions --principal DataLakePrincipalIdentifier=arn:aws:iam::111122223333:user/datalake_user1 --permissions "ASSOCIATE" --resource '{ "LFTag": {"CatalogId":"111122223333","TagKey":"module","TagValues":["*"]}}'
```

# 整合 IAM Identity Center
<a name="identity-center-integration"></a>

使用 AWS IAM Identity Center，您可以連線至身分提供者 IdPs)，並跨 AWS 分析服務集中管理使用者和群組的存取權。您可以將 Okta、Ping 和 Microsoft Entra ID (先前稱為 Azure Active Directory) 等身分提供者與 IAM Identity Center 整合，讓組織中的使用者使用單一登入體驗存取資料。IAM Identity Center 也支援連接額外的第三方身分提供者。

如需詳細資訊，請參閱 AWS IAM Identity Center 《 使用者指南》中的[支援的身分提供者](https://docs.aws.amazon.com/singlesignon/latest/userguide/supported-idps.html)。

您可以在 IAM Identity Center 中將 AWS Lake Formation 設定為已啟用的應用程式，而資料湖管理員可以將精細許可授予 AWS Glue Data Catalog 資源上的授權使用者和群組。

您組織的使用者可以使用組織的身分提供者登入任何已啟用 Identity Center 的應用程式，並查詢套用 Lake Formation 許可的資料集。透過此整合，您可以管理對 AWS 服務的存取，而無需建立多個 IAM 角色。

[信任的身分傳播](https://docs.aws.amazon.com//singlesignon/latest/userguide/trustedidentitypropagation-overview.html)是一項 AWS IAM Identity Center 功能，連線的管理員 AWS 服務 可以使用此功能來授予和稽核服務資料的存取權。存取此資料是根據使用者屬性，例如群組關聯。設定信任的身分傳播需要連線的管理員 AWS 服務 與 IAM Identity Center 管理員之間的協同合作。如需詳細資訊，請參閱[先決條件和考量](https://docs.aws.amazon.com//singlesignon/latest/userguide/trustedidentitypropagation-overall-prerequisites.html)。

如需限制的詳細資訊，請參閱[IAM Identity Center 整合限制](identity-center-lf-notes.md)。

**Topics**
+ [IAM Identity Center 與 Lake Formation 整合的先決條件](prerequisites-identity-center.md)
+ [將 Lake Formation 與 IAM Identity Center 連線](connect-lf-identity-center.md)
+ [更新 IAM Identity Center 整合](update-lf-identity-center-connection.md)
+ [刪除 Lake Formation 與 IAM Identity Center 的連線](delete-lf-identity-center-connection.md)
+ [將許可授予使用者和群組](grant-permissions-sso.md)
+ [在 CloudTrail 日誌中包含 IAM Identity Center 使用者內容](identity-center-ct-logs.md)

# IAM Identity Center 與 Lake Formation 整合的先決條件
<a name="prerequisites-identity-center"></a>

 以下是整合 IAM Identity Center 與 Lake Formation 的先決條件。

1. 啟用 IAM Identity Center – 啟用 IAM Identity Center 是支援身分驗證和身分傳播的先決條件。

1. 選擇您的身分來源 – 啟用 IAM Identity Center 之後，您必須有身分提供者才能管理使用者和群組。您可以使用內建的 Identity Center 目錄做為身分來源，或使用外部 IdP，例如 Microsoft Entra ID 或 Okta。

    如需詳細資訊，請參閱 AWS IAM Identity Center 《 使用者指南》中的[管理您的身分來源](https://docs.aws.amazon.com/singlesignon/latest/userguide/manage-your-identity-source.html)和[連線至外部身分提供者](https://docs.aws.amazon.com/singlesignon/latest/userguide/manage-your-identity-source-idp.html)。

1. 建立 IAM 角色 – 建立 IAM Identity Center 連線的角色需要許可，才能在 Lake Formation 和 IAM Identity Center 中建立和修改應用程式組態，如下列內嵌政策所示。

   您需要根據 IAM 最佳實務新增許可。下列程序會詳細說明特定權限。如需詳細資訊，請參閱 [IAM Identity Center 入門](https://docs.aws.amazon.com/singlesignon/latest/userguide/get-started-enable-identity-center.html)。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "lakeformation:CreateLakeFormationIdentityCenterConfiguration",
                   "sso:CreateApplication",
                   "sso:PutApplicationAssignmentConfiguration",
                   "sso:PutApplicationAuthenticationMethod",
                   "sso:PutApplicationGrant",
                   "sso:PutApplicationAccessScope"
               ],
               "Resource": [
                   "*"
               ]
           }
       ]
   }
   ```

------

    如果您要與外部 AWS 帳戶 或組織共用 Data Catalog 資源，您必須具有建立資源共用的 AWS Resource Access Manager (AWS RAM) 許可。如需共用資源所需許可的詳細資訊，請參閱[跨帳戶資料共用先決條件](cross-account-prereqs.md)。

下列內嵌政策包含檢視、更新和刪除與 IAM Identity Center 整合之 Lake Formation 屬性所需的特定許可。
+ 使用下列內嵌政策，允許 IAM 角色檢視與 IAM Identity Center 的 Lake Formation 整合。

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "lakeformation:DescribeLakeFormationIdentityCenterConfiguration",
                  "sso:DescribeApplication"
              ],
              "Resource": [
                  "*"
              ]
          }
      ]
  }
  ```

------
+ 使用下列內嵌政策，允許 IAM 角色更新與 IAM Identity Center 的 Lake Formation 整合。此政策也包含與外部帳戶共用資源所需的選用許可。

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "lakeformation:UpdateLakeFormationIdentityCenterConfiguration",
                  "lakeformation:DescribeLakeFormationIdentityCenterConfiguration",
                  "sso:DescribeApplication",
                  "sso:UpdateApplication"
              ],
              "Resource": [
                  "*"
              ]
          }
      ]
  }
  ```

------
+ 使用下列內嵌政策，允許 IAM 角色刪除與 IAM Identity Center 的 Lake Formation 整合。

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "lakeformation:DeleteLakeFormationIdentityCenterConfiguration",
                  "sso:DeleteApplication"
              ],
              "Resource": [
                  "*"
              ]
          }
      ]
  }
  ```

------
+ 如需授予或撤銷 IAM Identity Center 使用者和群組資料湖許可所需的 IAM 許可，請參閱 [授予或撤銷 Lake Formation 許可所需的 IAM 許可](required-permissions-for-grant.md)。

*許可描述*
+ `lakeformation:CreateLakeFormationIdentityCenterConfiguration` – 建立 Lake Formation IdC 組態。
+ `lakeformation:DescribeLakeFormationIdentityCenterConfiguration` – 描述現有的 IdC 組態。
+ `lakeformation:DeleteLakeFormationIdentityCenterConfiguration` – 提供刪除現有 Lake Formation IdC 組態的能力。
+ `lakeformation:UpdateLakeFormationIdentityCenterConfiguration` – 用來變更現有的 Lake Formation 組態。
+ `sso:CreateApplication`— 用於建立 IAM Identity Center 應用程式。
+ `sso:DeleteApplication`— 用於刪除 IAM Identity Center 應用程式。
+ `sso:UpdateApplication`— 用於更新 IAM Identity Center 應用程式。
+ `sso:PutApplicationGrant`— 用於變更受信任的字符發行者資訊。
+ `sso:PutApplicationAuthenticationMethod` – 授予 Lake Formation 身分驗證存取權。
+ `sso:GetApplicationGrant`— 用於列出受信任的字符發行者資訊。
+ `sso:DeleteApplicationGrant` – 刪除信任權杖發行者資訊。
+ `sso:PutApplicationAccessScope` – 新增或更新應用程式 IAM Identity Center 存取範圍的授權目標清單。
+ `sso:PutApplicationAssignmentConfiguration` – 用來設定使用者如何存取應用程式。

# 將 Lake Formation 與 IAM Identity Center 連線
<a name="connect-lf-identity-center"></a>

您必須先完成下列步驟，才能使用 IAM Identity Center 管理身分，以使用 Lake Formation 授予對 Data Catalog 資源的存取權。您可以使用 Lake Formation 主控台或 建立 IAM Identity Center 整合 AWS CLI。

------
#### [ AWS 管理主控台 ]

**將 Lake Formation 與 IAM Identity Center 連線**

1. 登入 AWS 管理主控台，然後開啟 Lake Formation 主控台，網址為 https：//[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)。

1. 在左側導覽窗格中，選取 **IAM Identity Center 整合**。  
![\[IAM Identity Center 與 Identity Center ARN 的整合畫面。\]](http://docs.aws.amazon.com/zh_tw/lake-formation/latest/dg/images/identity-center-integ.png)

1. （選用） 輸入一或多個 AWS 帳戶 IDs、組織 IDs和/或組織單位 IDs，以允許外部帳戶存取 Data Catalog 資源。當 IAM Identity Center 使用者或群組嘗試存取 Lake Formation 受管 Data Catalog 資源時，Lake Formation 會擔任 IAM 角色來授權中繼資料存取。如果 IAM 角色屬於沒有 AWS Glue 資源政策和 AWS RAM 資源共用的外部帳戶，IAM Identity Center 使用者和群組將無法存取資源，即使他們具有 Lake Formation 許可。

   Lake Formation 使用 AWS Resource Access Manager (AWS RAM) 服務與外部帳戶和組織共用資源。 AWS RAM 向承授者帳戶傳送邀請，以接受或拒絕資源共用。

   如需詳細資訊，請參閱[從 接受資源共享邀請 AWS RAM](accepting-ram-invite.md)。
**注意**  
Lake Formation 允許來自外部帳戶的 IAM 角色代表 IAM Identity Center 使用者和群組擔任電信業者角色，以存取 Data Catalog 資源，但只能在擁有帳戶中的 Data Catalog 資源上授予許可。如果您嘗試將許可授予外部帳戶中 Data Catalog 資源上的 IAM Identity Center 使用者和群組，Lake Formation 會擲出下列錯誤 -「委託人不支援跨帳戶授予。」 

1. （選用） 在**建立 Lake Formation 整合**畫面上，指定可在向 Lake Formation 註冊的 Amazon S3 位置存取資料的第三方應用程式的 ARNs。Lake Formation 根據有效許可，以 AWS STS 字符的形式將範圍縮小的臨時憑證提供給已註冊的 Amazon S3 位置，以便授權的應用程式可以代表使用者存取資料。

1. （選用） 在**建立 Lake Formation 整合**畫面上，勾選信任身分傳播中的 Amazon Redshift Connect 核取方塊，以透過 IDC 啟用 Amazon Redshift 聯合許可探索。Lake Formation 會根據有效許可將身分傳播到下游，以便授權的應用程式可以代表使用者存取資料。

1. 選取**提交**。

   Lake Formation 管理員完成步驟並建立整合後，IAM Identity Center 屬性會出現在 Lake Formation 主控台中。完成這些任務可讓 Lake Formation 成為已啟用 IAM Identity Center 的應用程式。主控台內的屬性包括整合狀態。整合狀態會顯示`Success`何時完成。此狀態指出 IAM Identity Center 組態是否已完成。

------
#### [ AWS CLI ]
+ 下列範例示範如何建立 Lake Formation 與 IAM Identity Center 的整合。您也可以指定應用程式的 `Status`(`ENABLED`、`DISABLED`)。

  ```
  aws lakeformation create-lake-formation-identity-center-configuration \
      --catalog-id <123456789012> \
      --instance-arn <arn:aws:sso:::instance/ssoins-112111f12ca1122p> \
      --share-recipients '[{"DataLakePrincipalIdentifier": "<123456789012>"},
                          {"DataLakePrincipalIdentifier": "<555555555555>"}]' \
      --external-filtering '{"AuthorizedTargets": ["<app arn1>", "<app arn2>"], "Status": "ENABLED"}'
  ```
+ 下列範例示範如何檢視 Lake Formation 與 IAM Identity Center 的整合。

  ```
  aws lakeformation describe-lake-formation-identity-center-configuration
   --catalog-id <123456789012>
  ```
+ 下列範例顯示如何啟用`Redshift:Connect`授權。授權可以啟用或停用。

  ```
  aws lakeformation  create-lake-formation-identity-center-configuration \
  --instance-arn <arn:aws:sso:::instance/ssoins-112111f12ca1122p> \
  --service-integrations '[{
    "Redshift": [{
      "RedshiftConnect": {
        "Authorization": "ENABLED"
      }
    }]
  }]'
  ```
+ 使用 `describe-lake-formation-identity-center-configuration`命令來描述湖形成身分中心應用程式。 `Redshift:Connect` 服務整合對於跨服務和跨叢集 IdC 身分傳播至關重要：

  ```
  aws lakeformation describe-lake-formation-identity-center-configuration --catalog-id <123456789012>
  ```

  回應：

  ```
  {
      "CatalogId": "CATALOG ID",
      "InstanceArn": "INSTANCE ARN",
      "ApplicationArn": "APPLICATION ARN",
      "ShareRecipients": [],
      "ServiceIntegrations": [
          {
              "Redshift": [
                  {
                      "RedshiftConnect": {
                          "Authorization": "ENABLED"
                      }
                  }
              ]
          }
      ]
  }
  ```

------

## 跨多個 使用 IAM Identity Center AWS 區域
<a name="connect-lf-identity-center-multi-region"></a>

Lake Formation 在多個 中支援 IAM Identity Center AWS 區域。您可以將 IAM Identity Center 從主要區域擴展 AWS 區域 到其他區域，透過接近使用者和可靠性來改善效能。在 IAM Identity Center 中新增新區域時，您可以在新區域中建立 Lake Formation Identity Center 應用程式，而無需從主要區域複寫身分。如需在多個區域中開始使用 IAM Identity Center 的詳細資訊，請參閱《[IAM Identity Center 使用者指南》中的多區域](https://docs.aws.amazon.com/singlesignon/latest/userguide/multi-region-iam-identity-center.html) *IAM Identity Center*。

# 更新 IAM Identity Center 整合
<a name="update-lf-identity-center-connection"></a>

建立連線後，您可以為 IAM Identity Center 整合新增第三方應用程式，以與 Lake Formation 整合，並代表使用者存取 Amazon S3 資料。您也可以從 IAM Identity Center 整合中移除現有的應用程式。您可以使用 Lake Formation 主控台 AWS CLI，以及 [UpdateLakeFormationIdentityCenterConfiguration](https://docs.aws.amazon.com/lake-formation/latest/APIReference/API_UpdateLakeFormationIdentityCenterConfiguration.html) 操作來新增或移除應用程式。

**注意**  
建立 IAM Identity Center 整合之後，您無法更新執行個體 `ARN`。

------
#### [ AWS 管理主控台 ]

**更新與 Lake Formation 的現有 IAM Identity Center 連線**

1. 登入 AWS 管理主控台，並在 https：//[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/) 開啟 Lake Formation 主控台。

1. 在左側導覽窗格中，選取 **IAM Identity Center 整合**。

1. 在 **IAM Identity Center 整合**頁面上選取**新增**。

1. 輸入一或多個 AWS 帳戶 IDs、組織 IDs和/或組織單位 IDs，以允許外部帳戶存取 Data Catalog 資源。

1. 在**新增應用程式**畫面上，輸入您要與 Lake Formation 整合之第三方應用程式的應用程式 IDs。

1. 選取**新增**。

1. (Optioanlly) 在 **IAM Identity Center 整合**頁面上，您可以啟用 Amazon Redshift 連線的受信任身分傳播，或將其停用。Lake Formation 會根據有效許可將身分傳播到下游，以便授權的應用程式可以代表使用者存取資料。

------
#### [ AWS CLI ]

您可以執行下列 AWS CLI 命令，為 IAM Identity Center 整合新增或移除第三方應用程式。當您將外部篩選狀態設定為 時`ENABLED`，它可讓 IAM Identity Center 為第三方應用程式提供身分管理，以存取 Lake Formation 管理的資料。您也可以透過設定應用程式狀態來啟用或停用 IAM Identity Center 整合。

```
aws lakeformation update-lake-formation-identity-center-configuration \
 --external-filtering '{"AuthorizedTargets": ["<app arn1>", "<app arn2>"], "Status": "ENABLED"}'\
 --share-recipients '[{"DataLakePrincipalIdentifier": "<444455556666>"}
                     {"DataLakePrincipalIdentifier": "<777788889999>"}]' \
 --application-status ENABLED
```

如果您有現有的 LF IDC 應用程式，但想要新增`Redshift:Connect`授權，您可以使用下列項目來更新 Lake Formation IDC 應用程式。授權可以啟用或停用。

```
aws lakeformation update-lake-formation-identity-center-configuration \
--service-integrations '[{                                                            
  "Redshift": [{
    "RedshiftConnect": {
      "Authorization": "ENABLED"
    }
  }]
}]'
```

------

# 刪除 Lake Formation 與 IAM Identity Center 的連線
<a name="delete-lf-identity-center-connection"></a>

 如果您想要刪除現有的 IAM Identity Center 整合，您可以使用 Lake Formation 主控台 AWS CLI或 [DeleteLakeFormationIdentityCenterConfiguration](https://docs.aws.amazon.com/lake-formation/latest/APIReference/API_DeleteLakeFormationIdentityCenterConfiguration.html) 操作來執行。

------
#### [ AWS 管理主控台 ]

**刪除與 Lake Formation 的現有 IAM Identity Center 連線**

1. 登入 AWS 管理主控台，然後開啟 Lake Formation 主控台，網址為 https：//[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)。

1. 在左側導覽窗格中，選取 **IAM Identity Center 整合**。

1. 在 **IAM Identity Center 整合**頁面上選取**刪除**。

1. 在**確認整合**畫面上，確認動作，然後選取**刪除**。

------
#### [ AWS CLI ]

您可以執行下列 AWS CLI 命令來刪除 IAM Identity Center 整合。

```
 aws lakeformation delete-lake-formation-identity-center-configuration \
     --catalog-id <123456789012>
```

------

# 將許可授予使用者和群組
<a name="grant-permissions-sso"></a>

您的資料湖管理員可以將許可授予 Data Catalog 資源 （資料庫、資料表和檢視） 上的 IAM Identity Center 使用者和群組，以便輕鬆存取資料。若要授予或撤銷資料湖許可，授予者需要下列 IAM Identity Center 動作的許可。
+ [DescribeUser](https://docs.aws.amazon.com/singlesignon/latest/IdentityStoreAPIReference/API_DescribeUser.html)
+ [DescribeGroup](https://docs.aws.amazon.com/singlesignon/latest/IdentityStoreAPIReference/API_DescribeGroup.html)
+ [DescribeInstance](https://docs.aws.amazon.com/singlesignon/latest/APIReference/API_DescribeInstance.html)

您可以使用 Lake Formation 主控台、 API 或 來授予許可 AWS CLI。

如需授予許可的詳細資訊，請參閱 [授予 Data Catalog 資源的許可](granting-catalog-permissions.md)。

**注意**  
您只能授予帳戶中資源的許可。若要在與您共用的資源上將許可串聯至使用者和群組，您必須使用 AWS RAM 資源共用。

------
#### [ AWS 管理主控台 ]

**將許可授予使用者和群組**

1. 登入 AWS 管理主控台，並在 https：//[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/) 開啟 Lake Formation 主控台。

1. 在 Lake Formation 主控台的許可下選取**資料湖****許可**。

1. 選取**授予**。

1. 在**授予資料湖許可**頁面上，選擇 **IAM Identity Center** 使用者和群組。

1. 選取**新增**以選擇要授予許可的使用者和群組。  
![\[授予已選取 IAM Identity Center 使用者和群組的資料湖許可畫面。\]](http://docs.aws.amazon.com/zh_tw/lake-formation/latest/dg/images/identity-center-grant-perm.png)

1. 在**指派使用者和群組**畫面上，選擇要授予許可的使用者和/或群組。

   選取**指派**。  
![\[授予已選取 IAM Identity Center 使用者和群組的資料湖許可畫面。\]](http://docs.aws.amazon.com/zh_tw/lake-formation/latest/dg/images/identity-center-assign-users-groups.png)

1. 接著，選擇授予許可的方法。

   如需使用具名資源方法授予許可的說明，請參閱 [使用具名資源方法授予資料許可](granting-cat-perms-named-resource.md)。

   如需使用 LF-Tags 授予許可的說明，請參閱 [使用 LF-TBAC 方法授予資料湖許可](granting-catalog-perms-TBAC.md)。

1. 選擇您要授予許可的 Data Catalog 資源。

1. 選擇要授予的資料目錄許可。

1. 選取**授予**。

------
#### [ AWS CLI ]

下列範例顯示如何授予資料表上的 IAM Identity Center 使用者`SELECT`許可。

```
aws lakeformation grant-permissions \
--principal DataLakePrincipalIdentifier=arn:aws:identitystore:::user/<UserId> \
--permissions "SELECT" \
--resource '{ "Table": { "DatabaseName": "retail", "TableWildcard": {} } }'
```

若要`UserId`從 IAM Identity Center 擷取，請參閱《IAM Identity Center API 參考》中的 [GetUserId](https://docs.aws.amazon.com/singlesignon/latest/IdentityStoreAPIReference/API_GetUserId.html) 操作。

------

# 在 CloudTrail 日誌中包含 IAM Identity Center 使用者內容
<a name="identity-center-ct-logs"></a>

Lake Formation 使用[憑證販賣](using-cred-vending.md)功能來暫時存取 Amazon S3 資料。根據預設，當 IAM Identity Center 使用者向整合的分析服務提交查詢時，CloudTrail 日誌只會包含服務擔任的 IAM 角色，以提供短期存取。如果您使用使用者定義的角色向 Lake Formation 註冊 Amazon S3 資料位置，您可以選擇在 CloudTrail 事件中包含 IAM Identity Center 使用者的內容，然後追蹤存取 資源的使用者。

**重要**  
若要在 CloudTrail 中包含物件層級的 Amazon S3 API 請求，您需要為 Amazon S3 儲存貯體和物件啟用 CloudTrail 事件記錄。如需更多內建，請參閱《[Amazon S3 使用者指南》中的啟用 Amazon S3 儲存貯體和物件的 CloudTrail 事件記錄](https://docs.aws.amazon.com/AmazonS3/latest/userguide/enable-cloudtrail-logging-for-s3.html)。 Amazon S3 

**在向使用者定義角色註冊的資料湖位置上啟用憑證販賣稽核**

1. 登入 Lake Formation 主控台，網址為 https：//[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)。

1. 在左側導覽中，展開**管理**，然後選擇 **Data Catalog 設定**。

1. 在**增強型稽核**下，選擇**傳播提供的內容。**

1. 選擇**儲存**。

 您也可以在 [PutDataLakeSettings](https://docs.aws.amazon.com/lake-formation/latest/APIReference/API_PutDataLakeSettings.html) 操作中設定 `Parameters` 屬性，以啟用增強型稽核選項。根據預設， `SET_CONTEXT"` 參數值設定為「true」。

```
{
    "DataLakeSettings": {
        "Parameters": {"SET_CONTEXT": "true"},
    }
}
```

以下是 CloudTrail 事件的摘錄，其中包含增強型稽核選項。此日誌包含 IAM Identity Center 使用者的工作階段內容，以及 Lake Formation 擔任以存取 Amazon S3 資料位置的使用者定義 IAM 角色。請參閱下列摘錄中的 `onBehalfOf` 參數。

```
{
         "eventVersion":"1.09",
         "userIdentity":{
            "type":"AssumedRole",
            "principalId":"AROAW7F7MOX4OYE6FLIFN:access-grants-e653760c-4e8b-44fd-94d9-309e035b75ab",
            "arn":"arn:aws:sts::123456789012:assumed-role/accessGrantsTestRole/access-grants-e653760c-4e8b-44fd-94d9-309e035b75ab",           
            "accountId":"123456789012",
            "accessKeyId":"ASIAW7F7MOX4CQLD4JIZN",
            "sessionContext":{
               "sessionIssuer":{
                  "type":"Role",
                  "principalId":"AROAW7F7MOX4OYE6FLIFN",
                  "arn":"arn:aws:iam::123456789012:role/accessGrantsTestRole",
                  "accountId":"123456789012",
                  "userName":"accessGrantsTestRole"
               },
               "attributes":{
                  "creationDate":"2023-08-09T17:24:02Z",
                  "mfaAuthenticated":"false"
               }
            },
            "onBehalfOf":{
                "userId": "<identityStoreUserId>",
                "identityStoreArn": "arn:aws:identitystore::<restOfIdentityStoreArn>"
            }
         },
         "eventTime":"2023-08-09T17:25:43Z",
         "eventSource":"s3.amazonaws.com",
         "eventName":"GetObject",
    ....
```

# 將 Amazon S3 位置新增至您的資料湖
<a name="register-data-lake"></a>

若要將資料位置新增為資料湖中的儲存體，您可以向 *註冊*位置 **（資料湖位置**) AWS Lake Formation。然後，您可以使用 Lake Formation 許可，對指向此位置的 AWS Glue Data Catalog 物件和位置中基礎資料的精細存取控制。

Lake Formation 也允許 以混合存取模式註冊資料位置，並提供您在 Data Catalog 中選擇性地為資料庫和資料表啟用 Lake Formation 許可的彈性。使用混合存取模式時，您會有一個增量路徑，可讓您為一組特定使用者設定 Lake Formation 許可，而不會中斷其他現有使用者或工作負載的許可政策。

如需設定混合存取模式的詳細資訊，請參閱 [混合存取模式](hybrid-access-mode.md) 

當您註冊位置時，該 Amazon S3 路徑和該路徑下的所有資料夾都會註冊。

例如，假設您有如下所示的 Amazon S3 路徑組織：

`/mybucket/accounting/sales/`

如果您註冊 `S3://mybucket/accounting`，`sales`資料夾也會在 Lake Formation 管理下註冊。

如需註冊位置的詳細資訊，請參閱 [Underlying data access control](access-control-underlying-data.md#underlying-data-access-control)。

**注意**  
Lake Formation 許可建議用於結構化資料 （在具有資料列和資料欄的資料表中排列）。如果您的資料包含以物件為基礎的非結構化資料，請考慮使用 Amazon S3 存取授權來管理資料存取。

**Topics**
+ [用於註冊位置的角色需求](registration-role.md)
+ [註冊 Amazon S3 位置](register-location.md)
+ [註冊加密的 Amazon S3 位置](register-encrypted.md)
+ [在另一個 AWS 帳戶中註冊 Amazon S3 位置](register-cross-account.md)
+ [跨 AWS 帳戶註冊加密的 Amazon S3 位置](register-cross-encrypted.md)
+ [取消註冊 Amazon S3 位置](unregister-location.md)

# 用於註冊位置的角色需求
<a name="registration-role"></a>

註冊 Amazon Simple Storage Service (Amazon S3) 位置時，您必須指定 AWS Identity and Access Management (IAM) 角色。 會在存取該位置中的資料時 AWS Lake Formation 擔任該角色。

您可以使用下列其中一個角色類型來註冊位置：
+ Lake Formation 服務連結角色。此角色會授予位置所需的許可。使用此角色是註冊位置的最簡單方法。如需詳細資訊，請參閱[使用 Lake Formation 的服務連結角色](service-linked-roles.md)及[服務連結角色限制](service-linked-role-limitations.md)。
+ 使用者定義的角色。當您需要授予比服務連結角色更多的許可時，請使用使用者定義的角色。

  在下列情況下，您必須使用使用者定義的角色：
  + 在另一個帳戶中註冊位置時。

    如需詳細資訊，請參閱[在另一個 AWS 帳戶中註冊 Amazon S3 位置](register-cross-account.md)及[跨 AWS 帳戶註冊加密的 Amazon S3 位置](register-cross-encrypted.md)。
  + 如果您使用 AWS 受管 CMK (`aws/s3`) 來加密 Amazon S3 位置。

    如需詳細資訊，請參閱[註冊加密的 Amazon S3 位置](register-encrypted.md)。
  + 如果您計劃使用 Amazon EMR 存取位置。

    如果您已使用服務連結角色註冊位置，並想要開始使用 Amazon EMR 存取該位置，則必須取消註冊該位置，並使用使用者定義的角色重新註冊該位置。如需詳細資訊，請參閱[取消註冊 Amazon S3 位置](unregister-location.md)。

# 使用 Lake Formation 的服務連結角色
<a name="service-linked-roles"></a>

AWS Lake Formation 使用 AWS Identity and Access Management (IAM) *服務連結角色*。服務連結角色是直接連結至 Lake Formation 的唯一 IAM 角色類型。服務連結角色由 Lake Formation 預先定義，並包含該服務代表您呼叫其他 AWS 服務所需的所有許可。

服務連結角色可讓您更輕鬆地設定 Lake Formation，因為您不必建立角色並手動新增必要的許可。Lake Formation 定義其服務連結角色的許可，除非另有定義，否則只有 Lake Formation 可以擔任其角色。定義的許可包括信任政策和許可政策，並且該許可政策不能連接到任何其他 IAM 實體。

此服務連結角色信任下列服務擔任該角色：
+ `lakeformation.amazonaws.com`

當您使用帳戶 A 中的服務連結角色來註冊帳戶 B 擁有的 Amazon S3 位置時，帳戶 B 中的 Amazon S3 儲存貯體政策 （以資源為基礎的政策） 必須授予帳戶 A 中服務連結角色的存取許可。

如需使用服務連結角色註冊資料位置的詳細資訊，請參閱 [服務連結角色限制](service-linked-role-limitations.md)。

**注意**  
服務控制政策 SCPs) 不會影響服務連結角色。  
如需詳細資訊，請參閱《 *AWS Organizations 使用者指南*》中的[服務控制政策 (SCPs)](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html)。

## Lake Formation 的服務連結角色許可
<a name="service-linked-role-permissions"></a>

Lake Formation 使用名為 的服務連結角色`AWSServiceRoleForLakeFormationDataAccess`。此角色提供一組 Amazon Simple Storage Service (Amazon S3) 許可，可讓 Lake Formation 整合服務 （例如 Amazon Athena) 存取已註冊的位置。註冊資料湖位置時，您必須提供在該位置具有必要 Amazon S3 讀取/寫入許可的角色。您可以使用此服務連結角色，而不是建立具有所需 Amazon S3 許可的角色。

您第一次將服務連結角色命名為註冊路徑的角色時，即會代表您建立服務連結角色和新的 IAM 政策。Lake Formation 會將路徑新增至內嵌政策，並將其連接至服務連結角色。當您使用服務連結角色註冊後續路徑時，Lake Formation 會將路徑新增至現有政策。

以資料湖管理員身分登入時，請註冊資料湖位置。然後，在 IAM 主控台中搜尋角色`AWSServiceRoleForLakeFormationDataAccess`並檢視其連接的政策。

例如，在您註冊位置 之後`s3://my-kinesis-test/logs`，Lake Formation 會建立下列內嵌政策並將其連接至 `AWSServiceRoleForLakeFormationDataAccess`。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "LakeFormationDataAccessPermissionsForS3",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:DeleteObject",
                "s3:AbortMultipartUpload",
                "s3:ListMultipartUploadParts"
            ],
            "Resource": [
                "arn:aws:s3:::my-kinesis-test/logs/*"
            ]
        },
        {
            "Sid": "LakeFormationDataAccessPermissionsForS3ListBucket",
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:ListBucketMultipartUploads"
            ],
            "Resource": [
                "arn:aws:s3:::my-kinesis-test"
            ]
        }
    ]
}
```

------

## 為 Lake Formation 建立服務連結角色
<a name="create-slr"></a>

您不需要手動建立服務連結角色，當您在 AWS CLI、 或 AWS API 中向 Lake Formation 註冊 Amazon S3 AWS 管理主控台位置時，Lake Formation 會為您建立服務連結角色。

**重要**  
此服務連結角色可以顯示在您的帳戶，如果您於其他服務中完成一項動作時，可以使用支援此角色的功能。若要進一步了解，請參閱[我的 IAM 帳戶中出現的新角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/troubleshoot_roles.html#troubleshoot_roles_new-role-appeared)。

若您刪除此服務連結角色，之後需要再次建立，您可以在帳戶中使用相同程序重新建立角色。當您向 Lake Formation 註冊 Amazon S3 位置時，Lake Formation 會再次為您建立服務連結角色。

您也可以使用 IAM 主控台建立具有 **Lake Formation** 使用案例的服務連結角色。在 AWS CLI 或 AWS API 中，使用服務名稱建立`lakeformation.amazonaws.com`服務連結角色。如需詳細資訊，請參閱《IAM 使用者指南》**中的「[建立服務連結角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#create-service-linked-role)」。如果您刪除此服務連結角色，您可以使用此相同的程序以再次建立該角色。

## 編輯 Lake Formation 的服務連結角色
<a name="edit-slr"></a>

Lake Formation 不允許您編輯`AWSServiceRoleForLakeFormationDataAccess`服務連結角色。因為有各種實體可能會參考服務連結角色，所以您無法在建立角色之後變更角色名稱。然而，您可使用 IAM 來編輯角色描述。如需詳細資訊，請參閱《*IAM 使用者指南*》中的[編輯服務連結角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#edit-service-linked-role)。

## 刪除 Lake Formation 的服務連結角色
<a name="delete-slr"></a>

若您不再使用需要服務連結角色的功能或服務，我們建議您刪除該角色。如此一來，您就沒有未主動監控或維護的未使用實體。然而，在手動刪除服務連結角色之前，您必須先清除資源。

**注意**  
如果 Lake Formation 服務在您嘗試刪除資源時使用角色，則刪除可能會失敗。若此情況發生，請等待數分鐘後並再次嘗試操作。

**刪除 Lake Formation 使用的 Lake Formation 資源**
+ 如果您已使用服務連結角色向 Lake Formation 註冊 Amazon S3 位置，則在刪除服務連結角色之前，您需要取消註冊該位置，並使用自訂角色重新註冊該位置。

**使用 IAM 手動刪除服務連結角色**

使用 IAM 主控台 AWS CLI、 或 AWS API 來刪除`AWSServiceRoleForLakeFormationDataAccess`服務連結角色。如需詳細資訊，請參閱《IAM 使用者指南》**中的[刪除服務連結角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#delete-service-linked-role)。

以下是使用者定義角色的要求：
+ 建立新角色時，在 IAM 主控台的**建立角色**頁面上，選擇**AWS 服務**，然後在**選擇使用案例**下，選擇 **Lake Formation**。

  如果您使用不同的路徑建立角色，請確定角色與 具有信任關係`lakeformation.amazonaws.com`。如需詳細資訊，請參閱[修改角色信任政策 （主控台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_update-role-trust-policy.html)。
+ 角色必須具有內嵌政策，授予 Amazon S3 對該位置的讀取/寫入許可。以下是典型的政策。

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "s3:PutObject",
                  "s3:GetObject",
                  "s3:DeleteObject"
              ],
              "Resource": [
                  "arn:aws:s3:::awsexamplebucket/*"
              ]
          },
          {
              "Effect": "Allow",
              "Action": [
                  "s3:ListBucket"
              ],
              "Resource": [
                  "arn:aws:s3:::awsexamplebucket"
              ]
          }
      ]
  }
  ```

------
+ 將下列信任政策新增至 IAM 角色，以允許 Lake Formation 服務擔任角色，並將臨時憑證提供給整合的分析引擎。

  若要在 CloudTrail 日誌中包含 IAM Identity Center 使用者內容，信任政策必須具有 `sts:SetContext`動作的 許可。

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "DataCatalogViewDefinerAssumeRole1",
              "Effect": "Allow",
              "Principal": {
                 "Service": [                    
                      "lakeformation.amazonaws.com"
                   ]
              },
              "Action": [
                  "sts:AssumeRole",
                  "sts:SetContext"
              ]
          }
      ]
  }
  ```

------
+ 註冊位置的資料湖管理員必須具有角色的 `iam:PassRole` 許可。

  以下是授予此許可的內嵌政策。以有效的 AWS 帳號取代 *<account-id>*，並以角色名稱取代 *<role-name>*。

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "PassRolePermissions",
              "Effect": "Allow",
              "Action": [
                  "iam:PassRole"
              ],
              "Resource": [
                  "arn:aws:iam::111122223333:role/<role-name>"
              ]
          }
      ]
  }
  ```

------
+ 若要允許 Lake Formation 在 CloudWatch Logs 中新增日誌並發佈指標，請新增下列內嵌政策。
**注意**  
寫入 CloudWatch Logs 會產生費用。

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "Sid1",
              "Effect": "Allow",
              "Action": [
                  "logs:CreateLogStream",
                  "logs:CreateLogGroup",
                  "logs:PutLogEvents"
              ],
              "Resource": [
                   "arn:aws:logs:us-east-1:111122223333:log-group:/aws-lakeformation-acceleration/*",
                   "arn:aws:logs:us-east-1:111122223333:log-group:/aws-lakeformation-acceleration/*:log-stream:*"
              ]
          }
      ]
  }
  ```

------

# 註冊 Amazon S3 位置
<a name="register-location"></a>

註冊 Amazon Simple Storage Service AWS Identity and Access Management (Amazon S3) 位置時，您必須指定 (IAM) 角色。Lake Formation 在將臨時登入資料授予存取該位置資料的整合 AWS 服務時，會擔任該角色。

**重要**  
避免註冊已啟用**申請者付款**的 Amazon S3 儲存貯體。對於向 Lake Formation 註冊的儲存貯體，用於註冊儲存貯體的角色一律會被視為申請者。如果儲存貯體是由另一個 AWS 帳戶存取，則如果角色屬於與儲存貯體擁有者相同的帳戶，則會向儲存貯體擁有者收取資料存取費用。

您可以使用 AWS Lake Formation 主控台、Lake Formation API 或 AWS Command Line Interface (AWS CLI) 來註冊 Amazon S3 位置。

**開始之前**  
檢閱[用於註冊位置的角色需求](registration-role.md)。

**註冊位置 （主控台）**
**重要**  
下列程序假設 Amazon S3 位置與 Data Catalog 位於相同的 AWS 帳戶中，且位置中的資料未加密。本章的其他章節涵蓋加密位置的跨帳戶註冊和註冊。

1. 在 https：//[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/) 開啟 AWS Lake Formation 主控台。使用 IAM `lakeformation:RegisterResource` 許可以資料湖管理員或使用者身分登入。

1. 在導覽窗格的**管理**下，選取**資料湖位置**。

1. 選擇**註冊位置**，然後選擇**瀏覽**以選取 Amazon Simple Storage Service (Amazon S3) 路徑。

1. （選用，但強烈建議） 選取**檢閱位置許可**，以檢視所選 Amazon S3 位置中的所有現有資源清單及其許可。

   註冊選取的位置可能會導致 Lake Formation 使用者存取該位置已有的資料。檢視此清單可協助您確保現有資料保持安全。

1. 針對 **IAM 角色**，選擇`AWSServiceRoleForLakeFormationDataAccess`服務連結角色 （預設） 或符合 中需求的自訂 IAM 角色[用於註冊位置的角色需求](registration-role.md)。

   只有在使用自訂 IAM 角色註冊時，才能更新已註冊的位置或其他詳細資訊。若要編輯使用服務連結角色註冊的位置，您應該取消註冊該位置並重新註冊。

1. 選擇**啟用資料目錄聯合選項**，以允許 Lake Formation 擔任角色並將臨時登入資料提供給整合 AWS 服務，以存取聯合資料庫下的資料表。如果某個位置已向 Lake Formation 註冊，而且您想要對聯合資料庫下的資料表使用相同的位置，則需要使用**啟用資料目錄聯合**選項註冊相同的位置。

1. 選擇**混合存取模式**，預設不會啟用 Lake Formation 許可。當您在混合存取模式中註冊 Amazon S3 位置時，您可以選擇該位置下資料庫和資料表的主體，以啟用 Lake Formation 許可。 

   如需設定混合存取模式的詳細資訊，請參閱 [混合存取模式](hybrid-access-mode.md)。

1. 選取**註冊位置**。

**註冊位置 (AWS CLI)**

1. 

**向 Lake Formation 註冊新位置**

   此範例使用服務連結角色來註冊位置。您可以改為使用 `--role-arn`引數來提供您自己的角色。

   將 *<s3-path>* 取代為有效的 Amazon S3 路徑、將帳號取代為有效的 AWS 帳戶，並將 *<s3-access-role>* 取代為具有註冊資料位置許可的 IAM 角色。
**注意**  
如果已使用服務連結角色註冊，則無法編輯已註冊位置的屬性。

   ```
   aws lakeformation register-resource \
    --resource-arn arn:aws:s3:::<s3-path> \
    --use-service-linked-role
   ```

   下列範例使用自訂角色來註冊位置。

   ```
   aws lakeformation register-resource \
    --resource-arn arn:aws:s3:::<s3-path> \
    --role-arn arn:aws:iam::<123456789012>:role/<s3-access-role>
   ```

1. 

**更新向 Lake Formation 註冊的位置**

   您只能編輯使用自訂 IAM 角色註冊的已註冊位置。對於向服務連結角色註冊的位置，您應該取消註冊該位置並重新註冊。如需詳細資訊，請參閱[取消註冊 Amazon S3 位置](unregister-location.md)。

   ```
   aws lakeformation update-resource \
    --role-arn arn:aws:iam::<123456789012>:role/<s3-access-role>\
    --resource-arn arn:aws:s3:::<s3-path>
   ```

   ```
   aws lakeformation update-resource \
    --resource-arn arn:aws:s3:::<s3-path> \
    --use-service-linked-role
   ```

1. 

**向聯合註冊處於混合存取模式的資料位置**

   ```
   aws lakeformation register-resource \
    --resource-arn arn:aws:s3:::<s3-path> \
    --role-arn arn:aws:iam::<123456789012>:role/<s3-access-role> \
    --hybrid-access-enabled
   ```

   ```
   aws lakeformation register-resource \
    --resource-arn arn:aws:s3:::<s3-path> \
    --role-arn arn:aws:iam::<123456789012>:role/<s3-access-role> \
    --with-federation
   ```

   ```
   aws lakeformation update-resource \
    --resource-arn arn:aws:s3:::<s3-path> \
    --role-arn arn:aws:iam::<123456789012>:role/<s3-access-role> \
    --hybrid-access-enabled
   ```

如需詳細資訊，請參閱 [RegisterResource](https://docs.aws.amazon.com/lake-formation/latest/APIReference/API_RegisterResource.html) API 操作。

**注意**  
註冊 Amazon S3 位置後，指向位置 （或其任何子位置） 的任何 AWS Glue 資料表都會傳回 `IsRegisteredWithLakeFormation` 參數的值，如 `GetTable`呼叫`true`中所示。Data Catalog API 操作有已知的限制，例如 `GetTables`和 `SearchTables` 不會更新 `IsRegisteredWithLakeFormation` 參數的值，並傳回預設值，即 false。建議使用 `GetTable` API 來檢視 `IsRegisteredWithLakeFormation` 參數的正確值。

# 註冊加密的 Amazon S3 位置
<a name="register-encrypted"></a>

Lake Formation 與 [AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html)(AWS KMS) 整合，可讓您更輕鬆地設定其他整合服務，以加密和解密 Amazon Simple Storage Service (Amazon S3) 位置中的資料。

 AWS 受管金鑰 支援客戶受管 AWS KMS keys 和 。目前，只有 Athena 才支援用戶端加密/解密。

註冊 Amazon S3 位置時，您必須指定 AWS Identity and Access Management (IAM) 角色。對於加密的 Amazon S3 位置，角色必須具有使用 加密和解密資料的許可 AWS KMS key，或者 KMS 金鑰政策必須將金鑰的許可授予角色。

**重要**  
避免註冊已啟用**申請者付款**的 Amazon S3 儲存貯體。對於向 Lake Formation 註冊的儲存貯體，用於註冊儲存貯體的角色一律會被視為申請者。如果儲存貯體是由另一個 AWS 帳戶存取，則如果角色屬於與儲存貯體擁有者相同的帳戶，則會向儲存貯體擁有者收取資料存取費用。

Lake Formation 使用服務連結角色來註冊您的資料位置。不過，此角色有數個[限制](service-linked-role-limitations.md)。由於這些限制，我們建議您建立和使用自訂 IAM 角色，以增加靈活性和控制能力。您為註冊位置而建立的自訂角色必須符合 中指定的要求[用於註冊位置的角色需求](registration-role.md)。

**重要**  
如果您使用 AWS 受管金鑰 來加密 Amazon S3 位置，則無法使用 Lake Formation 服務連結角色。您必須使用自訂角色，並將金鑰的 IAM 許可新增至角色。本節稍後將提供詳細資訊。

下列程序說明如何註冊使用客戶受管金鑰或 加密的 Amazon S3 位置 AWS 受管金鑰。
+ [註冊使用客戶受管金鑰加密的位置](#proc-register-cust-cmk)
+ [使用 註冊加密的位置 AWS 受管金鑰](#proc-register-aws-cmk)

**開始之前**  
檢閱[用於註冊位置的角色需求](registration-role.md)。<a name="proc-register-cust-cmk"></a>

**註冊使用客戶受管金鑰加密的 Amazon S3 位置**
**注意**  
如果 KMS 金鑰或 Amazon S3 位置不在與 Data Catalog 相同的 AWS 帳戶中，請[跨 AWS 帳戶註冊加密的 Amazon S3 位置](register-cross-encrypted.md)改為遵循 中的指示。

1. 在 [https://console.aws.amazon.com/kms](https://console.aws.amazon.com/kms)：// 開啟 AWS KMS 主控台，並以 AWS Identity and Access Management (IAM) 管理使用者或可修改用於加密位置之 KMS 金鑰的金鑰政策的使用者身分登入。

1. 在導覽窗格中，選擇**客戶受管金鑰**，然後選擇所需 KMS 金鑰的名稱。

1. 在 KMS 金鑰詳細資訊頁面上，選擇**金鑰政策**索引標籤，然後執行下列其中一項操作，將自訂角色或 Lake Formation 服務連結角色新增為 KMS 金鑰使用者：
   + **如果顯示預設檢視 **（使用**金鑰管理員**、**金鑰刪除**、**金鑰使用者****和其他 AWS 帳戶**區段） – 在**金鑰使用者**區段下，新增您的自訂角色或 Lake Formation 服務連結角色 `AWSServiceRoleForLakeFormationDataAccess`。
   + **如果顯示金鑰政策 (JSON)** – 編輯政策，將自訂角色或 Lake Formation 服務連結角色新增至`AWSServiceRoleForLakeFormationDataAccess`物件「允許使用金鑰」，如下列範例所示。
**注意**  
如果該物件遺失，請使用範例所示的許可新增物件。此範例使用 服務連結角色。

     ```
             ...
             {
                 "Sid": "Allow use of the key",
                 "Effect": "Allow",
                 "Principal": {
                     "AWS": [
                         "arn:aws:iam::111122223333:role/aws-service-role/lakeformation.amazonaws.com/AWSServiceRoleForLakeFormationDataAccess",
                         "arn:aws:iam::111122223333:user/keyuser"
                     ]
                 },
                 "Action": [
                     "kms:Encrypt",
                     "kms:Decrypt",
                     "kms:ReEncrypt*",
                     "kms:GenerateDataKey*",
                     "kms:DescribeKey"
                 ],
                 "Resource": "*"
             },
             ...
     ```

1. 在 https：//[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/) 開啟 AWS Lake Formation 主控台。使用 IAM `lakeformation:RegisterResource` 許可以資料湖管理員或使用者身分登入。

1. 在導覽窗格的**管理**下，選擇**資料湖位置**。

1. 選擇**註冊位置**，然後選擇**瀏覽**以選取 Amazon Simple Storage Service (Amazon S3) 路徑。

1. （選用，但強烈建議） 選擇**檢閱位置許可**，以檢視所選 Amazon S3 位置中的所有現有資源清單及其許可。

   註冊選取的位置可能會導致 Lake Formation 使用者存取該位置已有的資料。檢視此清單可協助您確保現有資料保持安全。

1. 針對 **IAM 角色**，選擇符合 `AWSServiceRoleForLakeFormationDataAccess`的服務連結角色 （預設） 或您的自訂角色[用於註冊位置的角色需求](registration-role.md)。

1. 選擇**註冊位置**。

如需服務連結角色的詳細資訊，請參閱[Lake Formation 的服務連結角色許可](service-linked-roles.md#service-linked-role-permissions)。<a name="proc-register-aws-cmk"></a>

**註冊使用 加密的 Amazon S3 位置 AWS 受管金鑰**
**重要**  
如果 Amazon S3 位置不在與 Data Catalog 相同的 AWS 帳戶中，[跨 AWS 帳戶註冊加密的 Amazon S3 位置](register-cross-encrypted.md)請改為遵循 中的指示。

1. 建立用於註冊位置的 IAM 角色。確保其符合 中列出的要求[用於註冊位置的角色需求](registration-role.md)。

1. 將下列內嵌政策新增至角色。它會將金鑰的許可授予角色。`Resource` 規格必須指定 的 Amazon Resource Name (ARN) AWS 受管金鑰。您可以從 AWS KMS 主控台取得 ARN。若要取得正確的 ARN，請確定您使用 AWS 受管金鑰 與用來加密位置的 相同的 AWS 帳戶和區域登入 AWS KMS 主控台。

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": [
           "kms:Encrypt",
           "kms:Decrypt",
           "kms:ReEncrypt*",
           "kms:GenerateDataKey*",
           "kms:DescribeKey"
         ],
         "Resource": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
       }
     ]
   }
   ```

------

   您可以使用 KMS 金鑰別名，而不是金鑰 ID - `arn:aws:kms:region:account-id:key/alias/your-key-alias`

   如需詳細資訊，請參閱《 AWS Key Management Service 開發人員指南[》中的 中的別名 AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/kms-alias.html)一節。

1. 在 https：//[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/) 開啟 AWS Lake Formation 主控台。使用 IAM `lakeformation:RegisterResource` 許可以資料湖管理員或使用者身分登入。

1. 在導覽窗格的**管理**下，選擇**資料湖位置**。

1. 選擇**註冊位置**，然後選擇**瀏覽**以選取 Amazon S3 路徑。

1. （選用，但強烈建議） 選擇**檢閱位置許可**，以檢視所選 Amazon S3 位置中的所有現有資源清單及其許可。

   註冊選取的位置可能會導致 Lake Formation 使用者存取該位置已有的資料。檢視此清單可協助您確保現有資料保持安全。

1. 針對 **IAM 角色**，選擇您在步驟 1 中建立的角色。

1. 選擇**註冊位置**。

# 在另一個 AWS 帳戶中註冊 Amazon S3 位置
<a name="register-cross-account"></a>

AWS Lake Formation 可讓您跨 AWS 帳戶註冊 Amazon Simple Storage Service (Amazon S3) 位置。例如，如果 AWS Glue Data Catalog 位於帳戶 A，帳戶 A 中的使用者可以在帳戶 B 中註冊 Amazon S3 儲存貯體。

使用 AWS 帳戶 A 中的 AWS Identity and Access Management (IAM) 角色在帳戶 B 中 AWS 註冊 Amazon S3 儲存貯體需要下列許可：
+ 帳戶 A 中的角色必須授予帳戶 B 中儲存貯體的許可。
+ 帳戶 B 中的儲存貯體政策必須授予帳戶 A 中角色的存取許可。

**重要**  
避免註冊已啟用**申請者付款**的 Amazon S3 儲存貯體。對於向 Lake Formation 註冊的儲存貯體，用於註冊儲存貯體的角色一律會被視為申請者。如果儲存貯體是由另一個 AWS 帳戶存取，則如果角色屬於與儲存貯體擁有者相同的帳戶，則會向儲存貯體擁有者收取資料存取費用。  
您無法使用 Lake Formation 服務連結角色來註冊另一個帳戶中的位置。您必須改用使用者定義的角色。角色必須符合 中的要求[用於註冊位置的角色需求](registration-role.md)。如需服務連結角色的詳細資訊，請參閱[Lake Formation 的服務連結角色許可](service-linked-roles.md#service-linked-role-permissions)。

**開始之前**  
檢閱[用於註冊位置的角色需求](registration-role.md)。

**在另一個 AWS 帳戶中註冊位置**
**注意**  
如果位置已加密，[跨 AWS 帳戶註冊加密的 Amazon S3 位置](register-cross-encrypted.md)請改為遵循 中的指示。

下列程序假設帳戶 1111-2222-3333 中包含 Data Catalog 的委託人想要註冊`awsexamplebucket1`帳戶 1234-5678-9012 中的 Amazon S3 儲存貯體 。

1. 在帳戶 1111-2222-3333 中，登入 AWS 管理主控台 並在 開啟 IAM 主控台[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 建立新的角色或檢視符合 中需求的現有角色[用於註冊位置的角色需求](registration-role.md)。確保角色授予 上的 Amazon S3 許可`awsexamplebucket1`。

1. 開啟位於 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) 的 Amazon S3 主控台。使用帳戶 1234-5678-9012 登入。

1. 在**儲存貯體名稱**清單中，選擇儲存貯體名稱 `awsexamplebucket1`。

1. 選擇**許可**。

1. 在**許可**頁面上，選擇**儲存貯體政策**。

1. 在**儲存貯體政策編輯器**中，貼上下列政策。將 *<role-name>* 取代為您的角色名稱。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect":"Allow",
               "Principal": {
                   "AWS":"arn:aws:iam::111122223333:role/<role-name>"
               },
               "Action":"s3:ListBucket",
               "Resource":"arn:aws:s3:::awsexamplebucket1"
           },
           {
               "Effect":"Allow",
               "Principal": {
                   "AWS":"arn:aws:iam::111122223333:role/<role-name>"
               },
               "Action": [
                   "s3:DeleteObject",
                   "s3:GetObject",
                   "s3:PutObject"
               ],
               "Resource":"arn:aws:s3:::awsexamplebucket1/*"
           }
       ]
   }
   ```

------

1. 選擇**儲存**。

1. 在 https：//[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/) 開啟 AWS Lake Formation 主控台。以資料湖管理員或具有足夠註冊位置許可的使用者身分登入帳戶 1111-2222-3333。

1. 在導覽窗格的**管理**下，選擇**資料湖位置**。

1. 在**資料湖位置**頁面上，選擇**註冊位置**。

1. 在**註冊位置頁面上**，針對 **Amazon S3 路徑**，輸入儲存貯體名稱 `s3://awsexamplebucket1`。
**注意**  
您必須輸入儲存貯體名稱，因為當您選擇**瀏覽**時，跨帳戶儲存貯體不會出現在清單中。

1. 針對 **IAM 角色**，選擇您的角色。

1. 選擇**註冊位置**。

# 跨 AWS 帳戶註冊加密的 Amazon S3 位置
<a name="register-cross-encrypted"></a>

AWS Lake Formation 與 [AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html)(AWS KMS) 整合，可讓您更輕鬆地設定其他整合服務，以加密和解密 Amazon Simple Storage Service (Amazon S3) 位置中的資料。

 AWS 受管金鑰 支援客戶受管金鑰和 。不支援用戶端加密/解密。

**重要**  
避免註冊已啟用**申請者付款**的 Amazon S3 儲存貯體。對於向 Lake Formation 註冊的儲存貯體，用於註冊儲存貯體的角色一律會被視為申請者。如果儲存貯體是由另一個 AWS 帳戶存取，則如果角色屬於與儲存貯體擁有者相同的帳戶，則會向儲存貯體擁有者收取資料存取費用。

本節說明如何在下列情況下註冊 Amazon S3 位置：
+ Amazon S3 位置中的資料會使用在其中建立的 KMS 金鑰進行加密 AWS KMS。
+ Amazon S3 位置不在與 相同的 AWS 帳戶中 AWS Glue Data Catalog。
+ KMS 金鑰與 Data Catalog 位於或不在相同的 AWS 帳戶中。

在 AWS 帳戶 A 中使用 (IAM) 角色在 AWS 帳戶 B 中註冊 AWS KMS加密的 AWS Identity and Access Management Amazon S3 儲存貯體需要下列許可：
+ 帳戶 A 中的角色必須授予帳戶 B 中儲存貯體的許可。
+ 帳戶 B 中的儲存貯體政策必須授予帳戶 A 中角色的存取許可。
+ 如果 KMS 金鑰位於帳戶 B 中，金鑰政策必須授予帳戶 A 中角色的存取權，而帳戶 A 中的角色必須授予 KMS 金鑰的許可。

在下列程序中，您會在包含 Data Catalog AWS 的帳戶中建立角色 （先前討論中的帳戶 A)。然後，您可以使用此角色來註冊位置。Lake Formation 在存取 Amazon S3 中的基礎資料時擔任此角色。擔任的角色具有 KMS 金鑰所需的許可。因此，您不需要將 KMS 金鑰的許可授予使用 ETL 任務或整合服務存取基礎資料的委託人，例如 Amazon Athena。

**重要**  
您無法使用 Lake Formation 服務連結角色來註冊另一個帳戶中的位置。您必須改用使用者定義的角色。角色必須符合 中的要求[用於註冊位置的角色需求](registration-role.md)。如需服務連結角色的詳細資訊，請參閱[Lake Formation 的服務連結角色許可](service-linked-roles.md#service-linked-role-permissions)。

**開始之前**  
檢閱[用於註冊位置的角色需求](registration-role.md)。

**跨 AWS 帳戶註冊加密的 Amazon S3 位置**

1. 在與 Data Catalog 相同的 AWS 帳戶中，登入 AWS 管理主控台 並在 開啟 IAM 主控台[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 建立新的角色或檢視符合 中需求的現有角色[用於註冊位置的角色需求](registration-role.md)。確保角色包含授予 Amazon S3 位置許可的政策。

1. 如果 KMS 金鑰不在與 Data Catalog 相同的帳戶中，請將內嵌政策新增至角色，以授予 KMS 金鑰所需的許可。政策範例如下。將區域和帳戶 ID 取代為 KMS 金鑰的區域和帳戶號碼。以金鑰 ID 取代 *<key-id>*。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
           "Effect": "Allow",
           "Action": [
               "kms:Encrypt",
               "kms:Decrypt",
               "kms:ReEncrypt*",
               "kms:GenerateDataKey*",
               "kms:DescribeKey"
            ],
           "Resource": "arn:aws:kms:us-east-1:111122223333:key/<key-id>"
           }
       ]
   }
   ```

------

1. 在 Amazon S3 主控台上，新增儲存貯體政策，將所需的 Amazon S3 許可授予角色。以下為儲存貯體政策的範例。將帳戶 ID 取代為 AWS Data Catalog 的帳號，將 *<role-name>* 取代為您的角色名稱，將 *<bucket-name>* 取代為儲存貯體名稱。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect":"Allow",
               "Principal": {
                   "AWS":"arn:aws:iam::111122223333:role/<role-name>"
               },
               "Action":"s3:ListBucket",
               "Resource":"arn:aws:s3:::<bucket-name>"
           },
           {
               "Effect":"Allow",
               "Principal": {
                   "AWS":"arn:aws:iam::111122223333:role/<role-name>"
               },
               "Action": [
                   "s3:DeleteObject",
                   "s3:GetObject",
                   "s3:PutObject"
               ],
               "Resource":"arn:aws:s3:::<bucket-name>/*"
           }
       ]
   }
   ```

------

1. 在 中 AWS KMS，將角色新增為 KMS 金鑰的使用者。

   1. 在 https：//[https://console.aws.amazon.com/kms](https://console.aws.amazon.com/kms) 開啟 AWS KMS 主控台。然後，以管理員使用者身分登入，或以可以修改用於加密位置之 KMS 金鑰的金鑰政策的使用者身分登入。

   1. 在導覽窗格中，選擇**客戶受管金鑰**，然後選擇 KMS 金鑰的名稱。

   1. 在 KMS 金鑰詳細資訊頁面的**金鑰政策**索引標籤下，如果金鑰政策的 JSON 檢視未顯示，請選擇**切換到政策檢視**。

   1. 在**金鑰政策**區段中，選擇**編輯**，然後將角色的 Amazon Resource Name (ARN) 新增至`Allow use of the key`物件，如下列範例所示。
**注意**  
如果該物件遺失，請使用範例所示的許可新增物件。

      ```
              ...
              {
                  "Sid": "Allow use of the key",
                  "Effect": "Allow",
                  "Principal": {
                      "AWS": [
                          "arn:aws:iam::<catalog-account-id>:role/<role-name>"
                      ]
                  },
                  "Action": [
                      "kms:Encrypt",
                      "kms:Decrypt",
                      "kms:ReEncrypt*",
                      "kms:GenerateDataKey*",
                      "kms:DescribeKey"
                  ],
                  "Resource": "*"
              },
              ...
      ```

      如需詳細資訊，請參閱《 *AWS Key Management Service 開發人員指南*》[中的允許其他帳戶中的使用者使用 KMS 金鑰](https://docs.amazonaws.cn/en_us/kms/latest/developerguide/key-policy-modifying-external-accounts.html)。

       

1. 在 https：//[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/) 開啟 AWS Lake Formation 主控台。以資料湖管理員身分登入 Data Catalog AWS 帳戶。

1. 在導覽窗格的**管理**下，選擇**資料湖位置**。

1. 選擇**註冊位置**。

1. 在**註冊位置頁面上**，針對 **Amazon S3 路徑**，輸入位置路徑為 **s3://*<bucket>*/*<prefix>***。將 *<bucket>* 取代為儲存貯體的名稱，並將 *<prefix>* 取代為位置的其餘路徑。
**注意**  
您必須輸入路徑，因為當您選擇**瀏覽**時，跨帳戶儲存貯體不會出現在清單中。

1. 針對 **IAM 角色**，從步驟 2 選擇角色。

1. 選擇**註冊位置**。

# 取消註冊 Amazon S3 位置
<a name="unregister-location"></a>

如果您不想再由 Lake Formation 管理 Amazon Simple Storage Service (Amazon S3) 位置，您可以取消註冊。取消註冊位置不會影響在該位置上授予的 Lake Formation 資料位置許可。您可以重新註冊取消註冊的位置，資料位置許可仍然有效。您可以使用不同的角色來重新註冊位置。

**取消註冊位置 （主控台）**

1. 在 https：//[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/) 開啟 AWS Lake Formation 主控台。使用 IAM `lakeformation:RegisterResource` 許可以資料湖管理員或使用者身分登入。

1. 在導覽窗格的**管理**下，選擇**資料湖位置**。

1. 選取位置，然後在**動作**功能表上，選擇**移除**。

1. 出現確認提示時，請選擇**移除**。

# 混合存取模式
<a name="hybrid-access-mode"></a>

AWS Lake Formation *混合存取模式*支援通往相同 AWS Glue Data Catalog 物件的兩個許可路徑。  在第一個路徑中，Lake Formation 可讓您選取特定主體，並授予他們 Lake Formation 透過選擇加入存取目錄、資料庫、資料表和檢視的許可。第二個路徑允許所有其他主體透過 Amazon S3 和 AWS Glue 動作的預設 IAM 主體政策存取這些資源。

向 Lake Formation 註冊 Amazon S3 位置時，您可以選擇針對此位置的所有資源強制執行 Lake Formation 許可，或使用混合存取模式。根據預設`CREATE_TABLE`，混合存取模式只會強制執行 、`CREATE_PARTITION`、 `UPDATE_TABLE`許可。當 Amazon S3 位置處於混合模式時，您可以透過選擇該位置下資料目錄物件的主體來啟用 Lake Formation 許可。 這表示 Lake Formation 許可和 IAM 許可都可以控制對該資料的存取。這表示選擇加入主體需要 Lake Formation 許可和 IAM 許可才能存取資料，而non-opted-in主體則會繼續使用 IAM 許可來存取資料。

因此，混合存取模式提供靈活性，為一組特定使用者選擇性地為 Data Catalog 中的目錄、資料庫和資料表啟用 Lake Formation，而不會中斷其他現有使用者或工作負載的存取。

![\[AWS 帳戶 architecture showing data flow between S3, Glue, Lake Formation, Athena, and IAM roles.\]](http://docs.aws.amazon.com/zh_tw/lake-formation/latest/dg/images/hybrid-access-mode-concept.png)


如需注意事項和限制，請參閱 [混合存取模式的考量和限制](notes-hybrid.md)。術語和定義

 以下是 Data Catalog 資源的定義，取決於您如何設定存取許可：

Lake Formation 資源  
 向 Lake Formation 註冊的資源。使用者需要 Lake Formation 許可才能存取資源。

AWS Glue 資源  
未向 Lake Formation 註冊的資源。使用者只需要 IAM 許可即可存取資源，因為它具有`IAMAllowedPrincipals`群組許可。Lake Formation 許可不會強制執行。  
如需`IAMAllowedPrincipals`群組許可的詳細資訊，請參閱 [中繼資料許可](metadata-permissions.md)。

混合資源  
在混合存取模式中註冊的資源。根據存取資源的使用者，資源會動態切換為 Lake Formation 資源或 AWS Glue 資源。

## 常見的混合存取模式使用案例
<a name="hybrid-access-mode-use-cases"></a>

您可以使用混合存取模式，在單一帳戶和跨帳戶資料共用案例中提供存取權：

**單一帳戶案例**
+ **將 AWS Glue 資源轉換為混合資源** – 在此案例中，您目前並未使用 Lake Formation，但想要為 Data Catalog 物件採用 Lake Formation 許可。當您以混合存取模式註冊 Amazon S3 位置時，您可以將 Lake Formation 許可授予選擇加入指向該位置之特定資料庫和資料表的使用者。
+ **將 Lake Formation 資源轉換為混合資源** – 目前，您正在使用 Lake Formation 許可來控制 Data Catalog 資料庫的存取權，但想要使用 Amazon S3 的 IAM 許可提供新主體的存取權，而不會 AWS Glue 中斷現有的 Lake Formation 許可。

  當您將資料位置註冊更新為混合存取模式時，新的主體可以使用 IAM 許可政策存取指向 Amazon S3 位置的資料目錄資料庫，而不會中斷現有使用者的 Lake Formation 許可。

  在更新資料位置註冊以啟用混合存取模式之前，您必須先選擇使用 Lake Formation 許可存取資源的主體。  這是為了防止目前工作流程的潛在中斷。  您也需要將資料庫中資料表的`Super`許可授予 `IAMAllowedPrincipal`群組。

**跨帳戶資料共用案例**
+ **使用混合存取模式共用 AWS Glue 資源** – 在此案例中，生產者帳戶在資料庫中具有資料表，目前使用 Amazon S3 AWS Glue 的 IAM 許可政策和動作與取用者帳戶共用。資料庫的資料位置並未向 Lake Formation 註冊。

   在混合存取模式中註冊資料位置之前，您需要將**跨帳戶版本設定**更新為第 4 版。當`IAMAllowedPrincipal`群組具有資源的 AWS RAM 許可時，第 4 版提供跨帳戶共用所需的新`Super`許可政策。對於具有`IAMAllowedPrincipal`群組許可的資源，您可以將 Lake Formation 許可授予外部帳戶，並選擇加入以使用 Lake Formation 許可。收件人帳戶中的資料湖管理員可以將 Lake Formation 許可授予帳戶中的主體，並選擇加入以強制執行 Lake Formation 許可。
+ **使用混合存取模式共用 Lake Formation 資源** – 目前，生產者帳戶在資料庫中具有與強制執行 Lake Formation 許可的取用者帳戶共用的資料表。資料庫的資料位置已向 Lake Formation 註冊。

  在這種情況下，您可以將 Amazon S3 位置註冊更新為混合存取模式，並使用 Amazon S3 儲存貯體政策和 Data Catalog 資源政策，將來自 Amazon S3 的資料和來自 Data Catalog 的中繼資料分享給消費者帳戶中的主體。您需要重新授予現有的 Lake Formation 許可，並在更新 Amazon S3 位置註冊之前選擇加入委託人。此外，您需要將資料庫中資料表的`Super`許可授予 `IAMAllowedPrincipals`群組。

**Topics**
+ [常見的混合存取模式使用案例](#hybrid-access-mode-use-cases)
+ [混合存取模式的運作方式](hybrid-access-workflow.md)
+ [設定混合存取模式 - 常見案例](hybrid-access-setup.md)
+ [從混合存取模式移除主體和資源](delete-hybrid-access.md)
+ [在混合存取模式中檢視主體和資源](view-hybrid-access.md)
+ [其他資源](additional-resources-hybrid.md)

# 混合存取模式的運作方式
<a name="hybrid-access-workflow"></a>

下圖顯示當您查詢 Data Catalog 資源時，Lake Formation 授權如何在混合存取模式中運作。

![\[AWS Lake Formation authorization process flowchart for hybrid access mode queries.\]](http://docs.aws.amazon.com/zh_tw/lake-formation/latest/dg/images/hybrid-workflow.png)


在存取資料湖中的資料之前，具有管理許可的資料湖管理員或使用者會設定個別 Data Catalog 資料表使用者政策，以允許或拒絕存取 Data Catalog 中的資料表。然後，具有執行`RegisterResource`操作許可的主體會將資料表的 Amazon S3 位置向 Lake Formation 註冊為混合存取模式。如果資料位置未向 Lake Formation 註冊，管理員會將 Lake Formation 許可授予 Data Catalog 資料庫和資料表上的特定使用者，並選擇讓他們在混合存取模式下使用這些資料庫和資料表的 Lake Formation 許可。

1. **提交查詢** - 委託人使用整合的服務提交查詢或 ETL 指令碼，例如 Amazon Athena AWS Glue、Amazon EMR 或 Amazon Redshift Spectrum。

1. **請求資料** - 整合式分析引擎會識別正在請求的資料表，並將中繼資料請求傳送至 Data Catalog (`GetTable`、`GetDatabase`)。

1. **檢查許可** - Data Catalog 會使用 Lake Formation 驗證查詢主體的存取許可。

   1. 如果資料表未連接`IAMAllowedPrincipals`群組許可，則會強制執行 Lake Formation 許可。

   1. 如果委託人已選擇在混合存取模式中使用 Lake Formation 許可，且資料表已連接`IAMAllowedPrincipals`群組許可，則會強制執行 Lake Formation 許可。查詢引擎會套用從 Lake Formation 收到的篩選條件，並將資料傳回給使用者。

   1. 如果資料表位置未向 Lake Formation 註冊，且委託人尚未選擇在混合存取模式中使用 Lake Formation 許可，則 Data Catalog 會檢查資料表是否已連接`IAMAllowedPrincipals`群組許可。如果此許可存在於資料表上，則帳戶中的所有主體都會取得資料表上的 `Super`或 `All`許可。

      除非資料位置已向 Lake Formation 註冊，否則即使選擇加入，Lake Formation 登入資料販賣也無法使用。

1. **取得憑證** – Data Catalog 會檢查並告知引擎資料表位置是否已向 Lake Formation 註冊。如果基礎資料已向 Lake Formation 註冊，分析引擎會請求 Lake Formation 提供臨時憑證，以存取 Amazon S3 儲存貯體中的資料。

1. **取得資料** – 如果委託人有權存取資料表資料，Lake Formation 會提供整合式分析引擎的暫時存取權。使用暫時存取，分析引擎會從 Amazon S3 擷取資料，並執行必要的篩選，例如資料欄、資料列或儲存格篩選。當引擎完成執行任務時，會將結果傳回給使用者。此程序稱為憑證販售程序。如需詳細資訊，  請參閱 [將第三方服務與 整合 Lake Formation](Integrating-with-LakeFormation.md)。

1.  如果資料表的資料位置未向 Lake Formation 註冊，則分析引擎的第二個呼叫會直接對 Amazon S3 進行。相關的 Amazon S3 儲存貯體政策和 IAM 使用者政策會評估資料存取。每當您使用 IAM 政策時，請務必遵循 IAM 最佳實務。如需詳細資訊，請參閱《[IAM 使用者指南》中的 IAM 中的安全最佳實務](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)。

# 設定混合存取模式 - 常見案例
<a name="hybrid-access-setup"></a>

如同 Lake Formation 許可，您通常有兩種類型的案例，您可以在其中使用混合存取模式來管理資料存取：提供存取給一個 中的委託人， AWS 帳戶 並提供外部 AWS 帳戶 或委託人的存取。

 本節提供在下列案例中設定混合存取模式的說明：

**在混合存取模式中管理許可 AWS 帳戶**
+ [將 AWS Glue 資源轉換為混合資源](hybrid-access-mode-new.md) – 您目前使用 Amazon S3 的 IAM 許可，為帳戶中所有主體提供資料庫中的資料表存取權， AWS Glue 但想要採用 Lake Formation 來逐步管理許可。
+ [將 Lake Formation 資源轉換為混合資源](hybrid-access-mode-update.md) – 您目前使用 Lake Formation 來管理您帳戶中所有主體資料庫中資料表的存取權，但只想將 Lake Formation 用於特定主體。您想要在相同的資料庫和資料表上使用 AWS Glue 和 Amazon S3 的 IAM 許可，為新主體提供存取權。

**跨 在混合存取模式中管理許可 AWS 帳戶**
+ [使用混合存取模式共用 AWS Glue 資源](hybrid-access-mode-cross-account.md) – 您目前並未使用 Lake Formation 管理資料表的許可，但想要套用 Lake Formation 許可，為另一個帳戶中的主體提供存取權。
+ [使用混合存取模式共用 Lake Formation 資源](hybrid-access-mode-cross-account-IAM.md) – 您正在使用 Lake Formation 來管理資料表的存取權，但想要在相同資料庫 AWS Glue 和資料表上使用 和 Amazon S3 的 IAM 許可，為另一個帳戶中的主體提供存取權。

**設定混合存取模式 – 高階步驟**

1. 選取**混合存取模式**，向 Lake Formation 註冊 Amazon S3 資料位置。

1. 主體必須擁有資料湖位置的`DATA_LOCATION`許可，才能建立指向該位置的資料目錄資料表或資料庫。

1.  將**跨帳戶版本設定**設為第 4 版。

1. 將精細許可授予資料庫和資料表上的特定 IAM 使用者或角色。同時，請務必為資料庫上的 `IAMAllowedPrincipals`群組和資料庫中所有`Super`或選取的資料表設定 或 `All`許可。

1. 選擇主體和資源。帳戶中的其他主體可以使用 和 Amazon S3 動作的 IAM 許可政策繼續存取資料庫 AWS Glue 和資料表。

1. 選擇性地為選擇加入使用 Lake Formation 許可的主體清除 Amazon S3 的 IAM 許可政策。

# 設定混合存取模式的先決條件
<a name="hybrid-access-prerequisites"></a>

以下是設定混合存取模式的先決條件：

**注意**  
 我們建議 Lake Formation 管理員以混合存取模式註冊 Amazon S3 位置，並選擇加入主體和資源。

1. 授予資料位置許可 (`DATA_LOCATION_ACCESS`)，以建立指向 Amazon S3 位置的 Data Catalog 資源。資料位置許可控制建立指向特定 Amazon S3 位置之 Data Catalog 目錄、資料庫和資料表的能力。

1. 若要在混合存取模式中與其他帳戶共用 Data Catalog 資源 （而不從資源移除`IAMAllowedPrincipals`群組許可），您需要將**跨帳戶版本設定**更新為第 4 版或更高版本。若要使用 Lake Formation 主控台更新版本，請在**資料目錄**設定頁面的跨帳戶版本設定下選擇**第 4** 版或**第 5** 版。 ****

   您也可以使用 `put-data-lake-settings` AWS CLI 命令將 `CROSS_ACCOUNT_VERSION` 參數設定為第 4 版或第 5 版：

   ```
   aws lakeformation put-data-lake-settings --region us-east-1 --data-lake-settings file://settings
   {
   "DataLakeAdmins": [
           {
   "DataLakePrincipalIdentifier": "arn:aws:iam::<111122223333>:user/<user-name>"
           }
       ],
       "CreateDatabaseDefaultPermissions": [],
       "CreateTableDefaultPermissions": [],
       "Parameters": {
   "CROSS_ACCOUNT_VERSION": "5"
       }
   }
   ```

1.  若要在混合存取模式中授予跨帳戶許可，授予者必須擁有 AWS Glue 和 AWS RAM 服務所需的 IAM 許可。 AWS 受管政策會`AWSLakeFormationCrossAccountManager`授予必要的許可。  為了在混合存取模式中啟用跨帳戶資料共用，我們新增了兩個新的 IAM 許可來更新 `AWSLakeFormationCrossAccountManager`受管政策：
   + ram:ListResourceSharePermissions
   + ram:AssociateResourceSharePermission
**注意**  
如果您不是使用授予者角色的 AWS 受管政策，請將上述政策新增至您的自訂政策。

## Amazon S3 儲存貯體位置和使用者存取
<a name="w2aac11c34c21c15b9"></a>

當您在 中建立目錄、資料庫或資料表時 AWS Glue Data Catalog，您可以指定基礎資料的 Amazon S3 儲存貯體位置，並將其註冊到 Lake Formation。下表說明根據資料表或資料庫的 Amazon S3 資料位置，許可如何適用於 AWS Glue 和 Lake Formation 使用者 （委託人）。


**向 Lake Formation 註冊的 Amazon S3 位置**  

| 資料庫的 Amazon S3 位置 | AWS Glue 使用者 | Lake Formation 使用者 | 
| --- | --- | --- | 
|  向 Lake Formation 註冊 （混合存取模式或 Lake Formation 模式）  |  透過繼承 IAMAllowedPrincipals 群組 （超級存取） 許可，擁有 Amazon S3 資料位置的讀取/寫入存取權。  | 從其授予的 CREATE TABLE 許可繼承建立資料表的許可。 | 
| 沒有相關聯的 Amazon S3 位置 |  需要明確的 DATA LOCATION 許可才能執行 CREATE TABLE 和 INSERT TABLE 陳述式。  |  需要明確的 DATA LOCATION 許可才能執行 CREATE TABLE 和 INSERT TABLE 陳述式。  | 

****IsRegisteredWithLakeFormation** 資料表屬性**  
資料表的 `IsRegisteredWithLakeFormation` 屬性指出資料表的資料位置是否已向請求者的 Lake Formation 註冊。如果位置的許可模式已註冊為 Lake Formation，則 `IsRegisteredWithLakeFormation` 屬性`true`適用於存取資料位置的所有使用者，因為所有使用者都被視為已選擇加入該資料表。如果位置是以混合存取模式註冊，則 值`true`只會針對已選擇加入該資料表的使用者設為 。


**`IsRegisteredWithLakeFormation` 的運作方式**  

| 許可模式 | 使用者/角色 |  `IsRegisteredWithLakeFormation`  | Description | 
| --- | --- | --- | --- | 
|  Lake Formation  | 全部 | True |  向 Lake Formation 註冊位置時，所有使用者的 `IsRegisteredWithLakeFormation` 屬性都會設為 true。這表示 Lake Formation 中定義的許可適用於註冊的位置。登入資料販賣將由 Lake Formation 完成。  | 
| 混合存取模式 | 選擇加入 | True |  對於選擇使用 Lake Formation 進行資料表資料存取和管理的使用者，該資料表`true`的 `IsRegisteredWithLakeFormation` 屬性將設定為 。它們受註冊位置 Lake Formation 中定義的許可政策約束。  | 
| 混合存取模式 | 未選擇加入 | False |  對於尚未選擇使用 Lake Formation 許可的使用者， `IsRegisteredWithLakeFormation` 屬性會設定為 `false`。它們不受 Lake Formation 中為註冊位置定義的許可政策約束。反之，使用者將遵循 Amazon S3 許可政策。  | 

# 將 AWS Glue 資源轉換為混合資源
<a name="hybrid-access-mode-new"></a>

請依照下列步驟，在混合存取模式中註冊 Amazon S3 位置，並在不中斷現有 Data Catalog 使用者的資料存取的情況下加入新的 Lake Formation 使用者。

案例描述 - 資料位置未向 Lake Formation 註冊，使用者對 Data Catalog 資料庫和資料表的存取取決於 Amazon S3 和 AWS Glue 動作的 IAM 許可政策。  根據預設， `IAMAllowedPrincipals`群組具有資料庫中所有資料表的`Super`許可。

**為未向 Lake Formation 註冊的資料位置啟用混合存取模式**

1. 

**註冊啟用混合存取模式的 Amazon S3 位置。**

------
#### [ Console ]

   1. 以資料湖管理員身分登入 [Lake Formation 主控台](https://console.aws.amazon.com/lakeformation/)。

   1. 在導覽窗格中，選擇**管理**下**的資料湖位置**。

   1. 選擇**註冊位置**。  
![\[Register location form for Amazon S3 data lake with path input, IAM role selection, and permission mode options.\]](http://docs.aws.amazon.com/zh_tw/lake-formation/latest/dg/images/hybrid-access-register-s3.png)

   1. 在**註冊位置**視窗中，選擇您要向 Lake Formation 註冊的 **Amazon S3** 路徑。

   1. 針對 **IAM 角色**，選擇`AWSServiceRoleForLakeFormationDataAccess`服務連結角色 （預設） 或自訂 IAM  符合 中需求的 角色[用於註冊位置的角色需求](registration-role.md)。

   1. 選擇**混合存取模式**，將精細的 Lake Formation 存取控制政策套用至指向註冊位置的選擇加入主體和 Data Catalog 資料庫和資料表。 

      選擇 Lake Formation 以允許 Lake Formation 授權對註冊位置的存取請求。 

   1. 選擇**註冊位置**。

------
#### [ AWS CLI ]

   以下是使用 HybridAccessEnabled：true/false 向 Lake Formation 註冊資料位置的範例。`HybridAccessEnabled` 參數的預設值為 false。以有效值取代 Amazon S3 路徑、角色名稱和 AWS 帳戶 ID。

   ```
   aws lakeformation register-resource --cli-input-json file:file path
   json:
       {
           "ResourceArn": "arn:aws:s3:::s3-path",
           "UseServiceLinkedRole": false,
           "RoleArn": "arn:aws:iam::<123456789012>:role/<role-name>",
           "HybridAccessEnabled": true
       }
   ```

------

1. 

**授予許可並選擇加入主體，以對混合存取模式中的資源使用 Lake Formation 許可**

   在混合存取模式中選擇加入主體和資源之前，請確認 `Super`或 `IAMAllowedPrincipals`群組的`All`許可存在於已在混合存取模式中向 Lake Formation 註冊位置的資料庫和資料表上。
**注意**  
您無法在資料庫中授予 `All tables`的 `IAMAllowedPrincipals` 群組許可。您需要從下拉式選單中分別選取每個資料表，並授予許可。此外，當您在資料庫中建立新資料表時，您可以在**資料目錄設定**`Use only IAM access control for new tables in new databases`中選擇使用 。當您在資料庫中建立新資料表時，此選項會自動將`Super`許可授予 `IAMAllowedPrincipals`群組。

------
#### [ Console ]

   1. 在 Lake Formation 主控台**的資料目錄**下，選擇**目錄**、**資料庫**或**資料表**。

   1. 從清單中選擇目錄、資料庫或資料表，然後從**動作**功能表中選擇**授予**。

   1. 選擇主體，以使用具名資源方法或 LF 標籤授予資料庫、資料表和資料欄的許可。

      或者，選擇**資料許可**，從清單中選擇要授予許可的委託人，然後選擇**授予**。

      如需授予資料許可的詳細資訊，請參閱 [授予 Data Catalog 資源的許可](granting-catalog-permissions.md)。
**注意**  
如果您要授予委託人建立資料表許可，您也需要將資料位置許可 (`DATA_LOCATION_ACCESS`) 授予委託人。更新資料表不需要此許可。  
如需詳細資訊，請參閱[授予資料位置許可](granting-location-permissions.md)。

   1. 當您使用**具名資源方法來**授予許可時，在**授予資料許可**頁面的下一節提供選擇加入委託人和資源的選項。

      選擇**讓 Lake Formation 許可立即生效**，以啟用委託人和資源的 Lake Formation 許可。  
![\[選擇 Data Catalog 資源混合存取模式的選項。\]](http://docs.aws.amazon.com/zh_tw/lake-formation/latest/dg/images/hybrid-access-grant-option.png)

   1. 選擇 **Grant** (授予)。

       當您在指向資料位置的資料表 A 上選擇加入委託人 A 時，如果資料位置註冊為混合模式，則允許委託人 A 使用 Lake Formation 許可來存取此資料表的位置。

------
#### [ AWS CLI ]

   以下是在混合存取模式下選擇主體和資料表的範例。將角色名稱、 AWS 帳戶 ID、資料庫名稱和資料表名稱取代為有效值。

   ```
   aws lakeformation create-lake-formation-opt-in --cli-input-json file://file path
   json:
     {
           "Principal": {
               "DataLakePrincipalIdentifier": "arn:aws:iam::<123456789012>:role/<hybrid-access-role>"
           },
           "Resource": {
               "Table": {
                   "CatalogId": "<123456789012>",
                   "DatabaseName": "<hybrid_test>",
                   "Name": "<hybrid_test_table>"
               }
           }
       }
   ```

------

   1. 如果您選擇 LF-Tags 授予許可，您可以選擇讓主體在不同的步驟中使用 Lake Formation 許可。您可以在左側導覽列**的許可**下選擇**混合存取模式**來執行此操作。

   1.  在**混合存取模式**頁面的下區段中，選擇**新增**以將資源和主體新增至混合存取模式。

   1.  在**新增資源和主體**頁面上，選擇在混合存取模式中註冊的目錄、資料庫和資料表。

      您可以在資料庫`All tables`下選擇 以授予存取權。  
![\[在混合存取模式中新增目錄、資料庫和資料表的界面。\]](http://docs.aws.amazon.com/zh_tw/lake-formation/latest/dg/images/hybrid-access-opt-in.png)

   1. 選擇主體選擇在混合存取模式中使用 Lake Formation 許可。
      +  **委託人** – 您可以在相同帳戶或其他帳戶中選擇 IAM 使用者和角色。您也可以選擇 SAML 使用者和群組。
      + **屬性** – 根據屬性選取要授予許可的屬性。  
![\[使用屬性表達式新增主體和資源的界面。\]](http://docs.aws.amazon.com/zh_tw/lake-formation/latest/dg/images/abac-hybrid-access.png)
      + 輸入鍵/值對，以根據屬性建立授予。在主控台上檢閱 Cedar 政策表達式。如需 Cedar 的詳細資訊，請參閱[什麼是 Cedar？ \$1 Cedar 政策語言參考GuideLink](https://docs.cedarpolicy.com/)。
      + 選擇**新增**。

        具有相符屬性的所有 IAM 角色/使用者都會獲得存取權。

   1. 選擇**新增**。

# 將 Lake Formation 資源轉換為混合資源
<a name="hybrid-access-mode-update"></a>

如果您目前正在為 Data Catalog 資料庫和資料表使用 Lake Formation 許可，您可以編輯位置註冊屬性以啟用混合存取模式。這可讓您使用 Amazon S3 的 IAM 許可政策和 AWS Glue 動作，為新主體提供對相同資源的存取權，而不會中斷現有的 Lake Formation 許可。

 案例描述 - 下列步驟假設您已向 Lake Formation 註冊資料位置，而且您已為指向該位置的資料庫、資料表或資料欄上的主體設定許可。如果位置已向服務連結角色註冊，則無法更新位置參數並啟用混合存取模式。根據預設， `IAMAllowedPrincipals`群組對資料庫及其所有資料表具有超級許可。

**重要**  
請勿在未選擇在此位置存取資料的主體的情況下，將位置註冊更新為混合存取模式。

**為向 Lake Formation 註冊的資料位置啟用混合存取模式**

1. 
**警告**  
我們不建議將 Lake Formation 受管資料位置轉換為混合存取模式，以避免中斷其他現有使用者或工作負載的許可政策。

   選擇具有 Lake Formation 許可的現有委託人。

   1. 列出並檢閱您已授予目錄、資料庫和資料表主體的許可。如需詳細資訊，請參閱[在 Lake Formation 中檢視資料庫和資料表許可](viewing-permissions.md)。

   1. 在左側導覽列的**許可**下選擇**混合存取模式**，然後選擇**新增**。

   1. 在**新增主體和資源**頁面上，從您要在混合存取模式中使用的 Amazon S3 資料位置中選擇目錄、資料庫和資料表。選擇已具有 Lake Formation 許可的主體。

   1.  選擇**新增**以選擇加入主體，以在混合存取模式中使用 Lake Formation 許可。

1.  選擇**混合存取模式**選項，以更新 Amazon S3 儲存貯體/字首註冊。

------
#### [ Console ]

   1. 以資料湖管理員身分登入 Lake Formation 主控台。

   1.  在導覽窗格的**註冊和擷取**下，選擇**資料湖位置**。

   1. 選取位置，然後在**動作**功能表上，選擇**編輯**。

   1. 選擇**混合存取模式**。

   1. 選擇**儲存**。

   1. 在資料目錄下，選取資料庫或資料表，並授予`Super`或`All`許可給名為 的虛擬群組`IAMAllowedPrincipals`。

   1.  當您更新位置註冊屬性時，請確認您現有的 Lake Formation 使用者的存取不會中斷。以 Lake Formation 主體身分登入 Athena 主控台，並在指向更新位置的資料表上執行範例查詢。

      同樣地，驗證使用 IAM 許可政策來存取資料庫和資料表之 AWS Glue 使用者的存取權。

------
#### [ AWS CLI ]

   以下是使用 HybridAccessEnabled：true/false 向 Lake Formation 註冊資料位置的範例。`HybridAccessEnabled` 參數的預設值為 false。以有效值取代 Amazon S3 路徑、角色名稱和 AWS 帳戶 ID。

   ```
   aws lakeformation update-resource --cli-input-json file://file path
   json:
   {
       "ResourceArn": "arn:aws:s3:::<s3-path>",
       "RoleArn": "arn:aws:iam::<123456789012>:role/<test>",
       "HybridAccessEnabled": true
   }
   ```

------

# 使用混合存取模式共用 AWS Glue 資源
<a name="hybrid-access-mode-cross-account"></a>

在另一個強制 Lake Formation AWS 帳戶 許可中與另一個 AWS 帳戶 或委託人共用資料，而不會中斷現有 Data Catalog 使用者的 IAM 型存取。

案例描述 - 生產者帳戶具有 Data Catalog 資料庫，該資料庫具有使用 Amazon S3 和 AWS Glue 動作的 IAM 主體政策控制的存取。資料庫的資料位置並未向 Lake Formation 註冊。根據預設， `IAMAllowedPrincipals`群組具有資料庫及其所有資料表的`Super`許可。

**在混合存取模式中授予跨帳戶 Lake Formation 許可**

1. 

**生產者帳戶設定**

   1. 使用具有 IAM 許可的角色登入 Lake Formation `lakeformation:PutDataLakeSettings` 主控台。

   1. 前往 **Data Catalog 設定**，然後選擇`Version 4`**跨帳戶版本設定**。

      如果您目前正在使用版本 1 或 2，請參閱更新至版本 3 [更新跨帳戶資料共用版本設定](optimize-ram.md)的說明。

      從第 3 版升級至第 4 版時，不需要變更許可政策。

   1. 註冊您計劃在混合存取模式中共用的資料庫或資料表的 Amazon S3 位置。

   1. 在上述步驟中，確認您以混合存取模式註冊資料位置的資料庫和資料表上，存在`IAMAllowedPrincipals`群組的`Super`許可。

   1. 將 Lake Formation 許可授予 AWS 組織、組織單位 (OUs)，或直接授予另一個帳戶中的 IAM 主體。

   1. 如果您要將許可直接授予 IAM 委託人，請從消費者帳戶選擇加入委託人，透過啟用讓 Lake Formation 許可**立即生效選項，在混合存取模式中強制執行 Lake Formation 許可**。

       如果您要將跨帳戶許可授予另一個 AWS 帳戶，當您選擇加入帳戶時，Lake Formation 許可只會對該帳戶的管理員強制執行。收件人帳戶資料湖管理員需要串聯許可，並選擇帳戶中的主體，以對處於混合存取模式的共用資源強制執行 Lake Formation 許可。

      如果您選擇 **LF 標籤相符的資源**選項來授予跨帳戶許可，則需要先完成授予許可步驟。您可以在 Lake Formation 主控台左側導覽列的許可下選擇**混合存取模式，以選擇將主體和資源加入混合存取模式**作為單獨的步驟。然後選擇**新增**以新增您要強制執行 Lake Formation 許可的資源和主體。

1. 

**消費者帳戶設定**

   1. 以資料湖管理員身分登入 Lake Formation 主控台，網址為 https：//[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)。

   1. 前往 https：//[https://console.aws.amazon.com/ram/home](https://console.aws.amazon.com/ram/home)。 AWS RAM 主控台中的**與我共用**索引標籤會顯示與您的帳戶共用的資料庫和資料表。

   1.  在 Lake Formation 中建立共用資料庫和/或資料表的資源連結。

   1.  將資源連結和`Grant on target`許可 （在原始共用資源上） 的`Describe`許可授予您 （消費者） 帳戶中的 IAM 主體。

   1.  將與您共用之資料庫或資料表的 Lake Formation 許可授予您帳戶中的主體。選擇主體和資源，透過啟用讓 Lake Formation 許可**立即生效的選項，在混合存取模式中強制執行 Lake Formation 許可**。

   1.  執行範例 Athena 查詢，以測試委託人的 Lake Formation 許可。使用 Amazon S3 和 AWS Glue 動作的 IAM 主體政策來測試 AWS Glue 使用者的現有存取權。

      （選用） 移除您設定為使用 Lake Formation 許可之主體的資料存取的 Amazon S3 儲存貯體政策和 的 AWS Glue IAM 主體政策，以及 Amazon S3 資料存取。

# 使用混合存取模式共用 Lake Formation 資源
<a name="hybrid-access-mode-cross-account-IAM"></a>

允許外部帳戶中的新 Data Catalog 使用者使用 IAM 型政策存取 Data Catalog 資料庫和資料表，而不會中斷現有的 Lake Formation 跨帳戶共用許可。

案例描述 - 生產者帳戶具有 Lake Formation 受管資料庫和資料表，這些資料庫和資料表會在帳戶層級或 IAM 委託人層級與外部 （消費者） 帳戶共用。資料庫的資料位置已向 Lake Formation 註冊。`IAMAllowedPrincipals` 群組沒有資料庫及其資料表的`Super`許可。

**透過以 IAM 為基礎的政策授予新 Data Catalog 使用者的跨帳戶存取權，而不會中斷現有的 Lake Formation 許可**

1. 

**生產者帳戶設定**

   1. 使用 的角色登入 Lake Formation 主控台`lakeformation:PutDataLakeSettings`。

   1. 在**資料目錄設定**下，`Version 4`選擇**跨帳戶版本設定**。

      如果您目前正在使用版本 1 或 2，請參閱更新至版本 3 [更新跨帳戶資料共用版本設定](optimize-ram.md)的說明。

      從第 3 版升級至第 4 版不需要任何許可政策變更。

   1. 列出您已授予資料庫和資料表主體的許可。如需詳細資訊，請參閱[在 Lake Formation 中檢視資料庫和資料表許可](viewing-permissions.md)。

   1.  選擇加入主體和資源，以授予現有的 Lake Formation 跨帳戶許可。
**注意**  
在將資料位置註冊更新為混合存取模式以授予跨帳戶許可之前，您需要為每個帳戶授予至少一個跨帳戶資料共用。此步驟是更新附加至 AWS RAM 資源共享的 AWS RAM 受管許可的必要步驟。  
2023 年 7 月，Lake Formation 已更新用於共用資料庫和資料表的 AWS RAM 受管許可：  
`arn:aws:ram::aws:permission/AWSRAMLFEnabledGlueAllTablesReadWriteForDatabase` （資料庫層級共享政策）
`arn:aws:ram::aws:permission/AWSRAMLFEnabledGlueTableReadWrite` （資料表層級共享政策） 
在 2023 年 7 月之前進行的跨帳戶許可授予沒有這些更新的 AWS RAM 許可。  
如果您已將跨帳戶許可直接授予委託人，則需要個別將這些許可授予委託人。如果您略過此步驟，存取共用資源的主體可能會收到非法的組合錯誤。

   1. 前往 https：//[https://console.aws.amazon.com/ram/home](https://console.aws.amazon.com/ram/home)。

   1.  AWS RAM 主控台中的**由我共用**索引標籤會顯示您與外部帳戶或委託人共用的資料庫和資料表名稱。

       確定連接至共用資源的許可具有正確的 ARN。

   1. 確認 AWS RAM 共用中的資源處於 `Associated` 狀態。如果狀態顯示為 `Associating`，請等待其進入 `Associated` 狀態。如果狀態變成 `Failed`，請停止並聯絡 Lake Formation 服務團隊。

   1. 在左側導覽列的**許可**下選擇**混合存取模式**，然後選擇**新增**。

   1.  **新增主體和資源**頁面會顯示資料庫和/或資料表，以及有權存取的主體。您可以新增或移除委託人和資源，以進行必要的更新。

   1.  針對要變更為混合存取模式的資料庫和資料表，選擇具有 Lake Formation 許可的主體。選擇資料庫和資料表。

   1.  選擇**新增**以選擇加入主體，以在混合存取模式中強制執行 Lake Formation 許可。

   1.  將`Super`許可授予資料庫和所選資料表`IAMAllowedPrincipals`上的虛擬群組。

   1. 將 Amazon S3 位置 Lake Formation 註冊編輯為混合存取模式。

   1. 使用 Amazon S3 AWS Glue actions 的 IAM 許可政策，授予外部 （消費者） 帳戶中 AWS Glue 使用者的許可。

1. 

**消費者帳戶設定**

   1. 以資料湖管理員身分登入 Lake Formation 主控台，網址為 https：//[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)。

   1. 前往 https：//[https://console.aws.amazon.com/ram/home](https://console.aws.amazon.com/ram/home)。 AWS RAM 頁面中**與我共用的資源**索引標籤會顯示與您的帳戶共用的資料庫和資料表名稱。

       針對 AWS RAM 共用，請確定連接的許可具有共用 AWS RAM 邀請的正確 ARN。檢查 AWS RAM 共用中的資源是否處於 `Associated` 狀態。如果狀態顯示為 `Associating`，請等待其進入 `Associated` 狀態。如果狀態變成 `Failed`，請停止並聯絡 Lake Formation 服務團隊。

   1.  在 Lake Formation 中建立共用資料庫和/或資料表的資源連結。

   1.  將資源連結和`Grant on target`許可 （在原始共用資源上） 的`Describe`許可授予您 （消費者） 帳戶中的 IAM 主體。

   1. 接下來，在共用資料庫或資料表上為帳戶中的主體設定 Lake Formation 許可。

      在左側導覽列的**許可**下，選擇**混合存取模式**。

   1.  選擇**混合存取模式**頁面下一節中的**新增**，以選擇從生產者帳戶與您共用的主體和資料庫或資料表。

   1.  使用 Amazon S3 AWS Glue actions 的 IAM 許可政策，為您帳戶中 AWS Glue 的使用者授予許可。

   1.  使用 Athena 在資料表上執行個別的範例查詢，以測試使用者的 Lake Formation AWS Glue 許可

      （選用） 針對處於混合存取模式的主體，清除 Amazon S3 的 IAM 許可政策。

# 從混合存取模式移除主體和資源
<a name="delete-hybrid-access"></a>

 請依照下列步驟，從混合存取模式移除資料庫、資料表和主體。

------
#### [ Console ]

1. 登入 Lake Formation 主控台，網址為 https：//[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)。

1. 在**許可**下，選擇**混合存取模式**。

1.  在**混合存取模式**頁面上，選取資料庫或資料表名稱旁的核取方塊，然後選擇 `Remove`。

1. 警告訊息會提示您確認動作。選擇**移除**。

   Lake Formation 不會再強制執行這些資源的許可，而此資源的存取權將使用 IAM 和 AWS Glue 許可進行控制。如果使用者沒有適當的 IAM 許可，這可能會導致他們無法再存取此資源。

------
#### [ AWS CLI ]

 下列範例示範如何從混合存取模式移除資源。

```
aws lakeformation delete-lake-formation-opt-in --cli-input-json file://file path

json:
{
    "Principal": {
        "DataLakePrincipalIdentifier": "arn:aws:iam::<123456789012>:role/role name"
    },
    "Resource": {
        "Table": {
            "CatalogId": "<123456789012>",
            "DatabaseName": "<database name>",
            "Name": "<table name>"
          }
    }
}
```

------

# 在混合存取模式中檢視主體和資源
<a name="view-hybrid-access"></a>

 請依照下列步驟，在混合存取模式中檢視資料庫、資料表和主體。

------
#### [ Console ]

1. 登入 Lake Formation 主控台，網址為 https：//[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)。

1. 在**許可**下，選擇**混合存取模式**。

1.  **混合存取模式**頁面顯示目前處於混合存取模式的資源和主體。

------
#### [ AWS CLI ]

 下列範例顯示如何列出處於混合存取模式的所有選擇加入主體和資源。

```
      
aws lakeformation list-lake-formation-opt-ins
```

 下列範例顯示如何列出特定委託人資源對的選擇。

```
aws lakeformation list-lake-formation-opt-ins --cli-input-json file://file path

json:
{
    "Principal": {
        "DataLakePrincipalIdentifier": "arn:aws:iam::<account-id>:role/<role name>"
    },
    "Resource": {
        "Table": {
            "CatalogId": "<account-id>",
            "DatabaseName": "<database name>",
            "Name": "<table name>"
          }
    }
}
```

------

# 其他資源
<a name="additional-resources-hybrid"></a>

在下列部落格文章中，我們會逐步解說如何在資料庫可透過 IAM 和 Amazon S3 許可存取其他使用者時，以混合存取模式為所選使用者加入 Lake Formation 許可的指示。我們將檢閱在帳戶內和兩個 AWS 帳戶之間設定混合存取模式的指示。
+ [ 介紹 的混合存取模式 AWS Glue Data Catalog ，以使用 Lake Formation 和 IAM 和 Amazon S3 政策來保護存取。 ](https://aws.amazon.com/blogs/big-data/introducing-hybrid-access-mode-for-aws-glue-data-catalog-to-secure-access-using-aws-lake-formation-and-iam-and-amazon-s3-policies/)

# 在 中建立物件 AWS Glue Data Catalog
<a name="populating-catalog"></a>

AWS Lake Formation 使用 AWS Glue Data Catalog (Data Catalog) 來儲存有關資料湖、資料來源、轉換和目標的中繼資料。中繼資料是資料集中的基礎資料的相關資料。每個 AWS 帳戶每個 AWS 區域都有一個資料目錄。

Data Catalog 中的中繼資料會組織在包含目錄、資料庫和資料表的三層資料階層中。它會將來自各種來源的資料組織到稱為目錄的邏輯容器。每個目錄代表來自 Amazon Redshift 資料倉儲、 Amazon DynamoDB 資料庫和第三方資料來源等來源的資料，例如 Snowflake、MySQL 和透過聯合連接器整合的超過 30 個外部資料來源。您也可以在資料目錄中建立新的目錄，將資料存放在 S3 資料表儲存貯體或 Redshift 受管儲存 (RMS) 中。

資料表會儲存基礎資料的相關資訊，包括結構描述資訊、分割區資訊和資料位置。資料庫是資料表的集合。Data Catalog 也包含資源連結，這些連結是外部帳戶中共用目錄、資料庫和資料表的連結，用於跨帳戶存取資料湖中的資料。

Data Catalog 是巢狀目錄物件，其中包含目錄、資料庫和資料表。它由 AWS 帳戶 ID 參考，並且是 帳戶和 中的預設目錄 AWS 區域。Data Catalog 使用三層階層 (catalog.database.table) 來組織資料表。
+ Catalog – Data Catalog 三層中繼資料階層的最上層。您可以透過聯合在 Data Catalog 中新增多個目錄。
+ 資料庫 – 中繼資料階層的第二層，包含資料表和檢視。在 Amazon Redshift 和 Trino 等許多資料系統中，資料庫也稱為結構描述。
+ 資料表和檢視 – Data Catalog 的 3 層資料階層的第三層。

Amazon S3 中的所有 Iceberg 資料表都會存放在目錄 ID = AWS 帳戶 ID 的預設 Data Catalog 中。您可以在 中建立聯合目錄 AWS Glue Data Catalog ，透過聯合在 Amazon Redshift、Amazon S3 Table 儲存體或其他第三方資料來源中存放資料表的定義。

**Topics**
+ [建立目錄](creating-catalog.md)
+ [建立資料庫](creating-database.md)
+ [建立資料表](creating-tables.md)
+ [建置 AWS Glue Data Catalog 檢視](working-with-views.md)

# 建立目錄
<a name="creating-catalog"></a>

目錄代表 的三層中繼資料階層中最高層級或最高層級 AWS Glue Data Catalog。您可以使用多種方法來將資料帶入 Data Catalog 並建立多層目錄。

 如需從外部資料來源建立目錄的詳細資訊，請參閱 [將您的資料帶入 AWS Glue Data Catalog](bring-your-data-overview.md)。

 若要使用 Lake Formation 主控台建立目錄，您必須以資料湖管理員或*目錄建立者*身分登入。目錄建立者是已獲授予 Lake Formation `CREATE_CATALOG`許可的主體。您可以在 Lake Formation 主控台的**管理角色和任務**頁面上查看目錄建立者清單。若要檢視此清單，您必須擁有 `lakeformation:ListPermissions` IAM 許可，並以資料湖管理員或目錄建立者身分登入，並具有`CREATE_CATALOG`許可上的授予選項。

# 建立資料庫
<a name="creating-database"></a>

Data Catalog 中的中繼資料表會存放在資料庫中。您可以視需要建立任意數量的資料庫，並對每個資料庫授予不同的 Lake Formation 許可。

資料庫可以有選用的位置屬性。此位置通常位於向 Lake Formation 註冊的 Amazon Simple Storage Service (Amazon S3) 位置。當您指定位置時，主體不需要資料位置許可，即可建立指向資料庫位置內位置的 Data Catalog 資料表。如需詳細資訊，請參閱[Underlying data access control](access-control-underlying-data.md#data-location-permissions)。

若要使用 Lake Formation 主控台建立資料庫，您必須以資料湖管理員或*資料庫建立者*身分登入。資料庫建立者是已獲授予 Lake Formation `CREATE_DATABASE`許可的主體。您可以在 Lake Formation 主控台的**管理角色和任務**頁面上查看資料庫建立者清單。若要檢視此清單，您必須擁有 `lakeformation:ListPermissions` IAM 許可，並以資料湖管理員或資料庫建立者身分登入，並具有`CREATE_DATABASE`許可上的授予選項。

**若要建立資料庫**

1. 在 https：//[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/) 開啟 AWS Lake Formation 主控台，並以資料湖管理員或資料庫建立者身分登入。

1. 在導覽窗格中的資料**目錄**下，選擇**資料庫**。

1. 選擇**建立資料庫**。

1. 在**建立資料庫**對話方塊中，輸入資料庫名稱、選用位置和選用描述。

1. 或者，選取**僅對此資料庫中的新資料表使用 IAM 存取控制**。

   如需此選項的詳細資訊，請參閱[變更資料湖的預設設定](change-settings.md)。

1. 選擇**建立資料庫**。

# 建立資料表
<a name="creating-tables"></a>

AWS Lake Formation 中繼資料表包含資料湖中資料的相關資訊，包括結構描述資訊、分割區資訊和資料位置。這些資料表存放在 AWS Glue Data Catalog 中。您可以使用它們來存取資料湖中的基礎資料，並使用 Lake Formation 許可管理該資料。資料表存放在 Data Catalog 的資料庫中。

有多種方法可以建立 Data Catalog 資料表：
+ 在 中執行爬蟲程式AWS Glue。請參閱《 *AWS Glue 開發人員指南*[》中的定義爬蟲程式](https://docs.aws.amazon.com/glue/latest/dg/add-crawler.html)。
+ 建立並執行工作流程。請參閱 [在 Lake Formation 中使用工作流程匯入資料](workflows.md)。
+ 使用 Lake Formation 主控台、AWS GlueAPI 或 AWS Command Line Interface () 手動建立資料表AWS CLI。
+ 使用 建立資料表 Amazon Athena。
+ 建立外部帳戶中資料表的資源連結。請參閱 [建立資源連結](creating-resource-links.md)。

# 建立 Apache Iceberg 資料表
<a name="creating-iceberg-tables"></a>

 AWS Lake Formation 支援建立 Apache Iceberg 資料表，這些資料表使用 中的 Apache Parquet 資料格式 AWS Glue Data Catalog 與 Amazon S3 中的資料。Data Catalog 中的資料表是中繼資料定義，表示資料存放區中的資料。根據預設，Lake Formation 會建立 Iceberg v2 資料表。有關 v1 和 v2 資料表之間的區別，請參閱 Apache Iceberg 文件中的[格式版本變更](https://iceberg.apache.org/spec/#appendix-e-format-version-changes)。

 [Apache Iceberg](https://iceberg.apache.org/) 是開放式的資料表格式，專用於非常大型的分析資料集。Iceberg 可讓您輕鬆地變更結構描述，也稱為結構描述演變，這表示使用者可以從資料表中新增、重新命名或移除資料欄，而不會中斷基礎資料。Iceberg 也支援資料版本控制，可讓使用者追蹤資料隨時間的變化。這可啟用時間歷程功能，允許使用者存取和查詢資料的歷史版本，並分析更新和刪除之間的資料變更。

您可以使用 Lake Formation 主控台或 AWS Glue API 中的 `CreateTable`操作，在 Data Catalog 中建立 Iceberg 資料表。如需詳細資訊，請參閱 [CreateTable 動作 (Python: create\$1table)](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-catalog-tables.html#aws-glue-api-catalog-tables-CreateTable)。

當您在 Data Catalog 中建立 Iceberg 資料表時，必須在 Amazon S3 中指定資料表格式和中繼資料檔案路徑，才能執行讀取和寫入。

 當您向 Amazon S3 資料位置註冊時，您可以使用 Lake Formation 使用精細存取控制許可來保護 Iceberg 資料表 AWS Lake Formation。對於 Amazon S3 中的來源資料和未向 Lake Formation 註冊的中繼資料，存取權取決於 Amazon S3 和 AWS Glue 動作的 IAM 許可政策。如需詳細資訊，請參閱[管理 Lake Formation 許可](managing-permissions.md)。

**注意**  
Data Catalog 不支援建立分區和新增 Iceberg 資料表屬性。

**Topics**
+ [先決條件](#iceberg-prerequisites)
+ [建立 Iceberg 資料表](#create-iceberg-table)

## 先決條件
<a name="iceberg-prerequisites"></a>

 若要在 Data Catalog 中建立 Iceberg 資料表，並設定 Lake Formation 資料存取許可，需要滿足下列要求：

1. 

**在沒有向 Lake Formation 註冊資料的情況下建立 Iceberg 資料表所需的許可。**

   除了在 Data Catalog 中建立資料表所需的許可之外，資料表建立者還需要下列許可：
   + `s3:PutObject` on resource arn:aws:s3:::\$1bucketName\$1
   + `s3:GetObject` on resource arn:aws:s3:::\$1bucketName\$1
   + `s3:DeleteObject`on resource arn:aws:s3:::\$1bucketName\$1

1. 

**在向 Lake Formation 註冊資料的情況下建立 Iceberg 資料表所需的許可：**

   若要使用 Lake Formation 來管理和保護資料湖中的資料，請使用 Lake Formation 註冊具有資料表資料的 Amazon S3 位置。這可讓 Lake Formation 將登入資料提供給 AWS 分析服務，例如 Athena、Redshift Spectrum 和 Amazon EMR 來存取資料。如需註冊 Amazon S3 位置的詳細資訊，請參閱 [將 Amazon S3 位置新增至您的資料湖](register-data-lake.md)。

   讀取和寫入向 Lake Formation 註冊的基礎資料的主體需要下列許可：
   + `lakeformation:GetDataAccess`
   + `DATA_LOCATION_ACCESS`

     在某個位置擁有資料位置許可的主體在所有子位置也擁有位置許可。

     如需資料位置許可的詳細資訊，請參閱 [基礎資料存取控制](access-control-underlying-data.md)。

 若要啟用壓縮，服務需要擔任有權在 Data Catalog 中更新資料表的 IAM 角色。如需詳細資訊，請參閱[資料表最佳化先決條件](https://docs.aws.amazon.com/glue/latest/dg/optimization-prerequisites.html)。

## 建立 Iceberg 資料表
<a name="create-iceberg-table"></a>

您可以使用 Lake Formation 主控台或此頁面所記載 AWS Command Line Interface 的方式建立 Iceberg v1 和 v2 資料表。您也可以使用 AWS Glue 主控台或 建立 Iceberg 資料表 AWS Glue 編目程式。如需詳細資訊，請參閱《 AWS Glue 開發人員指南》中的 [Data Catalog 和編目程式](https://docs.aws.amazon.com/glue/latest/dg/catalog-and-crawler.html)。

**若要建立 Iceberg 資料表**

------
#### [ Console ]

1. 登入 AWS 管理主控台，並在 https：//[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/) 開啟 Lake Formation 主控台。

1. 在 Data Catalog 下，選擇**資料表**，然後使用**建立資料表**按鈕來指定下列屬性：
   + **資料表名稱**：輸入資料表的名稱。如果使用 Athena 來存取資料表，請使用《Amazon Athena 使用者指南》中的這些[命名秘訣](https://docs.aws.amazon.com/athena/latest/ug/tables-databases-columns-names.html)。
   + **資料庫**：選擇現有的資料庫或建立新的資料庫。
   + **描述**：資料表的描述。您可以撰寫說明，來協助您了解資料表的內容。
   + **資料表格式**：針對**資料表格式**，選擇 Apache Iceberg。  
![\[使用資料表最佳化選項選取 Apache Iceberg 資料表選項。\]](http://docs.aws.amazon.com/zh_tw/lake-formation/latest/dg/images/table-optimization.png)
   + **資料表最佳化**
     + **壓縮** – 合併和重寫資料檔案，移除過時的資料，並將分段資料合併為更大、更有效的檔案。
     + **快照保留 **– 快照是 Iceberg 資料表的時間戳記版本。快照保留組態可讓客戶強制執行保留快照的時間長度，以及要保留的快照數量。設定快照保留最佳化工具可透過移除較舊、不必要的快照及其相關聯的基礎檔案，協助管理儲存體負荷。
     + **孤立檔案刪除** – 孤立檔案是 Iceberg 資料表中繼資料不再參考的檔案。這些檔案可能會隨著時間累積，特別是在資料表刪除或 ETL 任務失敗等操作之後。啟用孤立檔案刪除 AWS Glue 可讓 定期識別和移除這些不必要的檔案，釋放儲存空間。

     如需詳細資訊，請參閱[最佳化 Iceberg 資料表](https://docs.aws.amazon.com/glue/latest/dg/table-optimizers.html)。
   + **IAM 角色**：若要執行壓縮，服務會代表您擔任 IAM 角色。您可以使用下拉式選單選擇 IAM 角色。請確認角色具有啟用壓縮的必要權限。

     若要進一步了解所需的許可，請參閱[資料表最佳化先決條件](https://docs.aws.amazon.com/glue/latest/dg/optimization-prerequisites.html)。
   + **位置**：指定 Amazon S3 中存放中繼資料表之資料夾的路徑。Iceberg 需要 Data Catalog 中的中繼資料檔案和位置，才能執行讀取和寫入。
   + **結構描述**：選擇**新增資料欄**以新增資料欄和資料欄的資料類型。可以選擇建立空白資料表，稍後再更新結構描述。Data Catalog 支援 Hive 資料類型。如需詳細資訊，請參閱 [Hive 資料類型](https://cwiki.apache.org/confluence/plugins/servlet/mobile?contentId=27838462#content/view/27838462)。

      Iceberg 可讓您在建立資料表之後改進結構描述和分區。可以使用 [Athena 查詢](https://docs.aws.amazon.com/athena/latest/ug/querying-iceberg-evolving-table-schema.html)來更新資料表結構描述，使用 [Spark 查詢](https://iceberg.apache.org/docs/latest/spark-ddl/#alter-table-sql-extensions)來更新分區。

------
#### [ AWS CLI ]

```
aws glue create-table \
    --database-name iceberg-db \
    --region us-west-2 \
    --open-table-format-input '{
      "IcebergInput": { 
           "MetadataOperation": "CREATE",
           "Version": "2"
         }
      }' \
    --table-input '{"Name":"test-iceberg-input-demo",
            "TableType": "EXTERNAL_TABLE",
            "StorageDescriptor":{ 
               "Columns":[ 
                   {"Name":"col1", "Type":"int"}, 
                   {"Name":"col2", "Type":"int"}, 
                   {"Name":"col3", "Type":"string"}
                ], 
               "Location":"s3://DOC_EXAMPLE_BUCKET_ICEBERG/"
            }
        }'
```

------

# 最佳化處理 Iceberg 資料表
<a name="data-compaction"></a>

Lake Formation 支援多個資料表最佳化選項，以增強 AWS 分析引擎和 ETL 任務所使用的 Apache Iceberg 資料表管理和效能。這些最佳化工具可提供高效儲存使用率、改善的查詢效能以及有效的資料管理。Lake Formation 提供三種類型的資料表最佳化工具：
+ **壓縮** – 資料壓縮會壓縮小型資料檔案，以減少儲存用量並提高讀取效能。合併和重寫資料檔案，以移除過時的資料，並將分段資料合併為更大、更有效的檔案。壓縮可設定為自動執行，或視需要手動觸發。
+ **快照保留 **– 快照是 Iceberg 資料表的時間戳記版本。快照保留組態可讓客戶強制執行保留快照的時間長度，以及要保留的快照數量。設定快照保留最佳化工具可透過移除較舊、不必要的快照及其相關聯的基礎檔案，協助管理儲存體負荷。
+ **孤立檔案刪除** – 孤立檔案是 Iceberg 資料表中繼資料不再參考的檔案。這些檔案可能會隨著時間累積，特別是在資料表刪除或 ETL 任務失敗等操作之後。啟用孤立檔案刪除 AWS Glue 可讓 定期識別和移除這些不必要的檔案，釋放儲存空間。

您可以使用 AWS Glue 主控台或 AWS Glue API 操作，啟用或停用 Data Catalog 中個別 Iceberg 資料表的壓縮 AWS CLI、快照保留和孤立檔案刪除最佳化工具。

如需詳細資訊，請參閱《 AWS Glue 開發人員指南》中的[最佳化 Iceberg 資料表](https://docs.aws.amazon.com/glue/latest/dg/table-optimizers.html)。

# 搜尋資料表
<a name="searching-for-tables"></a>

您可以使用 AWS Lake Formation 主控台，依名稱、位置、包含資料庫等來搜尋 Data Catalog 資料表。搜尋結果只會顯示您擁有 Lake Formation 許可的資料表。

**搜尋資料表 （主控台）**

1. 登入 AWS 管理主控台 並開啟 Lake Formation 主控台，網址為 https：//[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)。

1. 在導覽窗格中，選擇 **Tables** (資料表)。

1. 將游標放在頁面頂端的搜尋欄位中。欄位具有依*屬性尋找資料表*的預留位置文字。

   屬性****功能表隨即出現，顯示要搜尋的各種資料表屬性。  
![\[屬性選單會從搜尋欄位中捨棄，並包含下列項目：名稱、分類、資料庫、位置、目錄 ID\]](http://docs.aws.amazon.com/zh_tw/lake-formation/latest/dg/images/search-for-tables.png)

1. 執行以下任意一項：
   + 依包含資料庫的 搜尋。

     1. 從**屬性**功能表中選擇**資料庫**，然後從出現的**資料庫**功能表中選擇資料庫，或輸入資料庫名稱，然後按 **Enter** 鍵。

        列出您在資料庫中擁有許可的資料表。

     1. （選用） 若要將清單縮小為資料庫中的單一資料表，請再次在搜尋欄位中放置游標，從**屬性**功能表中選擇**名稱**，然後從出現的**資料表**功能表中選擇資料表名稱，或輸入資料表名稱，然後按 **Enter** 鍵。

        系統會列出單一資料表，資料庫名稱和資料表名稱都會在搜尋欄位下顯示為圖磚。  
![\[搜尋欄位下方有兩個圖磚：一個標籤資料庫，其中包含選取的資料庫名稱，另一個標籤的資料表，包含選取的資料表名稱。圖磚右側有一個清除篩選條件按鈕。\]](http://docs.aws.amazon.com/zh_tw/lake-formation/latest/dg/images/search-for-tables-with-filter.png)

        若要調整篩選條件，請關閉其中一個圖磚，或選擇**清除篩選條件**。
   + 依其他屬性搜尋。

     1. 從屬性功能表中選擇搜尋**屬性**。

        若要依 AWS 帳戶 ID 搜尋，請從**屬性**功能表中選擇**目錄 ID**，輸入有效的 AWS 帳戶 ID （例如 111122223333)，然後按 **Enter**。

        若要依位置搜尋，請從**屬性**功能表中選擇**位置**，然後從出現的位置功能表中選取**位置**。系統會傳回所選位置 （例如 Amazon S3) 根位置中的所有資料表。

**使用 搜尋資料表 AWS CLI**
+ 下列範例示範如何執行部分 serach。`--search-text` 參數可讓您搜尋在其中繼資料中包含指定文字的資料表。在這種情況下，它會傳回名稱、描述或其他中繼資料欄位中具有「客戶」的所有資料表。

  ```
  aws glue search-tables 
        --search-text "customer" 
        --region AWS 區域
        --max-results 10
        --sort-criteria "FieldName=Name,Sort=ASC"
  ```

# 跨 AWS 帳戶共用 Data Catalog 資料表和資料庫
<a name="sharing-catalog-resources"></a>

您可以透過將資源的 Lake Formation 許可授予外部 AWS 帳戶，與外部帳戶共用 Data Catalog 資源 （資料庫和資料表）。然後，使用者可以執行查詢和任務，以跨多個帳戶聯結和查詢資料表。在某些限制下，當您與其他帳戶共用 Data Catalog 資源時，該帳戶中的主體可以在該資源上操作，就像資源在其 Data Catalog 中一樣。

您不與外部 AWS 帳戶中的特定主體共用資源，而是與 AWS 帳戶或組織共用資源。當您與 AWS 組織共用資源時，您要與該組織所有層級的所有帳戶共用資源。然後，每個外部帳戶中的資料湖管理員必須將共用資源的許可授予其帳戶中的主體。

如需詳細資訊，請參閱[Lake Formation 中的跨帳戶資料共用](cross-account-permissions.md)及[授予 Data Catalog 資源的許可](granting-catalog-permissions.md)。

**另請參閱:**  
[存取和檢視共用的 Data Catalog 資料表和資料庫](viewing-shared-resources.md)
[先決條件](cross-account-prereqs.md)

# 建置 AWS Glue Data Catalog 檢視
<a name="working-with-views"></a>

在 中 AWS Glue Data Catalog，*檢視*是虛擬資料表，其中內容是由參考一或多個資料表的 SQL 查詢定義。您可以使用 Amazon Athena、Amazon Redshift 或 Apache Spark 的 SQL 編輯器，使用 EMR Serverless 或 5.0 AWS Glue 版建立最多參考 10 個資料表的資料目錄檢視。檢視的基礎參考資料表可以屬於相同 AWS 帳戶 Data Catalog 中的相同資料庫或不同資料庫。

您可以參考開放 AWS Glue 資料表格式 (OTF) 的標準資料表和資料表，例如 [Apache Hudi](https://hudi.incubator.apache.org/)、Linux Foundation [Delta Lake](https://delta.io/) 和 [Apache Iceberg](https://iceberg.apache.org/)，並將基礎資料存放在註冊的 Amazon S3 位置 AWS Lake Formation。此外，您可以從與 Lake Formation 共用的 Amazon Redshift 資料共用，從聯合資料表建立檢視。

## 區分 Data Catalog 檢視與其他檢視類型
<a name="diff-views"></a>

Data Catalog 檢視與 Apache Hive、Apache Spark 和 Amazon Athena 檢視不同。Data Catalog 檢視是 的原生功能 AWS Glue Data Catalog，也是多向度定義者建立的檢視。您可以使用其中一個支援的分析服務建立 Data Catalog 檢視，例如 Athena 或 Amazon Redshift Spectrum，並使用其他支援的分析服務存取相同的檢視。另一方面，Apache Hive、Apache Spark 和 Athena 檢視會在 Athena 和 Amazon Redshift 等每個分析服務中獨立建立，並且只能在該服務內可見和存取。

## 什麼是定義器檢視？
<a name="definer-view"></a>

 定義者檢視是一種 SQL 檢視，根據建立它的委託人許可運作。定義者角色具有存取參考資料表的必要許可，並執行定義檢視的 SQL 陳述式。定義器會建立檢視，並透過 的 AWS Lake Formation精細存取控制與其他使用者共用。

當使用者查詢定義者檢視時，查詢引擎會使用定義者角色的許可來存取基礎參考資料表。此方法可讓使用者與檢視互動，而無需直接存取來源資料表、增強安全性並簡化資料存取管理。

若要設定定義者檢視，定義者 IAM 角色可以在與基礎資料表相同的 AWS 帳戶中，或使用跨帳戶定義者角色在不同帳戶中。如需定義者角色所需許可的詳細資訊，請參閱 [建立檢視的先決條件](views-prereqs.md)。

## 多方視觀表的架構
<a name="multi-dialect"></a>

Data Catalog 支援使用多種結構化查詢語言 (SQL) 方言建立檢視。SQL 是一種用於在關聯式資料庫中存放和處理資訊的語言，每個 AWS 分析引擎都會使用自己的 SQL 變化或 SQL 方言。

您可以使用其中一個支援的分析查詢引擎，在一個 SQL 方言中建立 Data Catalog 檢視。然後，您可以使用任何其他支援的分析引擎中不同 SQL 方言中的 `ALTER VIEW`陳述式來更新檢視。不過，每個方言都必須參考一組相同的資料表、資料欄和資料類型。

您可以使用 `GetTable` API AWS CLI 和 AWS 主控台存取可用於檢視的多個方言。因此，資料目錄檢視是可見的，可用於在不同支援的分析引擎之間進行查詢。

透過定義您可以從多個引擎查詢的常見檢視結構描述和中繼資料物件，Data Catalog 檢視可讓您跨資料湖使用統一檢視。

如需如何解決每個方言結構描述的詳細資訊，請參閱 [API 參考的連結]()。如需不同類型相符規則的詳細資訊，請參閱 [API 文件中的相關區段連結]()。

## 與 Lake Formation 許可整合
<a name="lf-view-integ"></a>

您可以使用 AWS Lake Formation 集中管理使用者 AWS Glue Data Catalog 檢視的許可。您可以使用具名資源方法或 LF 標籤，對 Data Catalog 檢視授予精細的許可，並在 AWS 帳戶組織和組織單位之間 AWS 共用這些許可。您也可以 AWS 區域 使用資源連結跨 共用和存取 Data Catalog 檢視。這可讓使用者提供資料存取，而無需複製資料來源，並共用基礎資料表。

Data Catalog 檢視的 `CREATE VIEW` DDL 陳述式可以開放資料表格式 (OTF) 參考標準 AWS Glue 資料表和資料表，例如 Hudi、Delta Lake 和 Iceberg，其中包含存放在向 Lake Formation 註冊的 Amazon S3 位置的基礎資料，以及與 Lake Formation 共用的 Amazon Redshift 資料共用的聯合資料表。只要用於查詢檢視的引擎支援該格式，資料表可以是任何檔案格式。您也可以參考執行引擎的內建函數，但可能不允許其他引擎特定資源。如需詳細資訊，請參閱 [Data Catalog 檢視的考量和限制](views-notes.md)。

## 使用案例
<a name="views-use-cases"></a>

以下是 Data Catalog 檢視的重要使用案例：
+ 建立和管理單一檢視結構描述的許可。這可協助您避免在多個引擎中建立的重複檢視上具有不一致許可的風險。
+ 在參考多個資料表的檢視上將許可授予使用者，而不直接在基礎參考資料表上授予許可。
+ 透過在檢視上套用 LF 標籤並將以 LF 標籤為基礎的許可授予使用者，在資料表上使用 LF 標籤 （其中 LF 標籤只會層疊至資料欄層級） 來達成資料列層級篩選。

## 檢視支援的 AWS 分析服務
<a name="views-supported-engines"></a>

下列 AWS 分析服務支援建立 Data Catalog 檢視：
+ Amazon Redshift
+ Amazon Athena 第 3 版
+ EMR Serverless 上的 Apache Spark
+  5.0 AWS Glue 版上的 Apache Spark

## 其他資源
<a name="views-addtional-resources"></a>

您可以在本指南中進一步了解 Data Catalog，以及使用下列資源：

下列影片示範如何從 Athena 和 Amazon Redshift 建立檢視和查詢檢視。

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/rFO2OoxVYxE?si=Z0qsyuvTp2ZJg-PL/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/rFO2OoxVYxE?si=Z0qsyuvTp2ZJg-PL)


**Topics**
+ [區分 Data Catalog 檢視與其他檢視類型](#diff-views)
+ [什麼是定義器檢視？](#definer-view)
+ [多方視觀表的架構](#multi-dialect)
+ [與 Lake Formation 許可整合](#lf-view-integ)
+ [使用案例](#views-use-cases)
+ [檢視支援的 AWS 分析服務](#views-supported-engines)
+ [其他資源](#views-addtional-resources)
+ [建立檢視的先決條件](views-prereqs.md)
+ [使用 DDL 陳述式建立 Data Catalog 檢視](create-views.md)
+ [使用 AWS Glue APIs建立 Data Catalog 檢視](views-api-usage.md)
+ [授予 Data Catalog 檢視的許可](grant-perms-views.md)
+ [具體化視觀表](materialized-views.md)

# 建立檢視的先決條件
<a name="views-prereqs"></a>
+ 若要在 Data Catalog 中建立檢視，您必須向 Lake Formation 註冊參考資料表的基礎 Amazon S3 資料位置。如需向 Lake Formation 註冊資料的詳細資訊，請參閱 [將 Amazon S3 位置新增至您的資料湖](register-data-lake.md)。
+ 只有 IAM 角色可以建立 Data Catalog 檢視。其他 IAM 身分無法建立 Data Catalog 檢視。
+ 定義檢視的 IAM 角色必須具有下列許可：
  + Lake Formation `SELECT`許可，其中包含所有參考資料表上的 `Grantable`選項。
  + 正在建立檢視的目標資料庫 Lake Formation `CREATE_TABLE`許可。
  + Lake Formation 和 AWS Glue 服務擔任角色的信任政策。

------
#### [ JSON ]

****  

    ```
    {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
            {
                "Sid": "DataCatalogViewDefinerAssumeRole1",
                "Effect": "Allow",
                "Principal": {
                   "Service": [
                        "glue.amazonaws.com",
                        "lakeformation.amazonaws.com"
                     ]
                },
                "Action": "sts:AssumeRole"
            }
        ]
    }
    ```

------
  +  AWS Glue 和 Lake Formation 的 iam：PassRole 許可。

------
#### [ JSON ]

****  

    ```
    {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
            {
                "Sid": "DataCatalogViewDefinerPassRole1",
                "Action": [
                    "iam:PassRole"
                ],
                "Effect": "Allow",
                "Resource": "*",
                "Condition": {
                    "StringEquals": {
                        "iam:PassedToService": [ 
                            "glue.amazonaws.com",
                            "lakeformation.amazonaws.com"
                          ]
                    }
                }
            }
        ]
    }
    ```

------
  + AWS Glue 和 Lake Formation 許可。

------
#### [ JSON ]

****  

    ```
    {
        "Version":"2012-10-17",		 	 	 
                     "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "Glue:GetDatabase",
                    "Glue:GetDatabases",
                    "Glue:CreateTable",
                    "Glue:GetTable",
                    "Glue:GetTables",
                    "Glue:BatchGetPartition",
                    "Glue:GetPartitions",
                    "Glue:GetPartition",
                    "Glue:GetTableVersion",
                    "Glue:GetTableVersions",
    				"Glue:PassConnection",
                    "lakeFormation:GetDataAccess"
                ],
                "Resource": "*"
            }
        ]   
    }
    ```

------
+ 您無法在已將 `Super`或 `ALL`許可授予`IAMAllowedPrincipals`群組的資料庫中建立檢視。您可以在資料庫上撤銷 `IAMAllowedPrincipals`群組的`Super`許可，請參閱[步驟 4：將資料存放區切換至 Lake Formation 許可模型](upgrade-glue-lake-formation.md#upgrade-glue-lake-formation-step4)，或使用在此資料庫方塊中**的新資料表只使用 IAM 存取控制**，在**新建立資料表的預設許可**下取消勾選。

# 使用 DDL 陳述式建立 Data Catalog 檢視
<a name="create-views"></a>

您可以使用 Athena、Amazon Redshift 和 AWS Glue APIs/ 的 SQL 編輯器建立 AWS Glue Data Catalog 檢視AWS CLI。

若要使用 SQL 編輯器建立 Data Catalog 檢視，請選擇 Athena 或 Redshift Spectrum，然後使用`CREATE VIEW`資料定義語言 (DDL) 陳述式建立檢視。在第一個引擎的方言中建立檢視後，您可以使用第二個引擎的 `ALTER VIEW` DDL 陳述式來新增其他方言。

定義檢視時，請務必考量下列事項：
+ **定義多方檢視** – 當您定義具有多個方言的檢視時，不同方言的結構描述必須相符。每個 SQL 方言都有略有不同的語法規格。定義 Data Catalog 檢視的查詢語法應該在所有方言中解析為完全相同的資料欄清單，包括類型和名稱。此資訊會存放在 檢視`StorageDescriptor`的 中。方言也必須參考資料目錄中的相同基礎資料表物件。

  若要使用 DDL 將另一個方言新增至檢視，您可以使用 `ALTER VIEW`陳述式。如果`ALTER VIEW`陳述式嘗試更新檢視定義，例如修改檢視的儲存描述項或基礎資料表，則陳述式會錯誤地說出「輸入和現有儲存描述項不相符」。您可以使用 SQL 轉換操作來確保檢視欄類型相符。
+ **更新檢視** – 若要更新檢視，您可以使用 `UpdateTable` API。如果您在沒有相符儲存描述項或參考資料表的情況下更新檢視，您可以提供 `FORCE`旗標 （如需語法，請參閱引擎 SQL 文件）。強制更新後，檢視將採用強制資料表`StorageDescriptor`和參考資料表。任何進一步的 `ALTER VIEW` DDL 都應符合修改後的值。已更新為具有不相容方言的檢視將處於「過時」狀態。檢視狀態會顯示在 Lake Formation 主控台和使用 `GetTable`操作。
+ **參考 varchar 資料欄類型做為字串** – 無法將 Redshift Spectrum 的 varchar 資料欄類型轉換為字串。如果在 Redshift Spectrum 中使用 varchar 資料欄類型建立檢視，且後續方言嘗試將該欄位參考為字串，則 Data Catalog 會將它視為字串，而不需要`FORCE`標記。
+ **複雜類型欄位的處理** – Amazon Redshift 會將所有複雜類型視為 [SUPER 類型](https://docs.aws.amazon.com/redshift/latest/dg/r_SUPER_type.html)，而 Athena 會指定複雜類型。如果檢視具有`SUPER`類型欄位，且另一個引擎參考該資料欄作為特定複雜類型，例如 struct (`<street_address:struct<street_number:int, street_name:string, street_type:string>>`)，則 Data Catalog 會假設該欄位為特定複雜類型，並在儲存體描述項中使用該欄位，而不需要`Force`旗標。

如需建立和管理 Data Catalog 檢視之語法的詳細資訊，請參閱：
+ 《Amazon Athena 使用者指南》中的[使用 AWS Glue Data Catalog 檢視](https://docs.aws.amazon.com/athena/latest/ug/views-glue.html)。
+ 《Amazon Athena 使用者指南》中的 [Glue Data Catalog 檢視查詢語法](https://docs.aws.amazon.com/athena/latest/ug/views-glue-ddl.html)。
+ 《Amazon Redshift 資料庫開發人員指南》中的在 中[建立檢視 AWS Glue Data Catalog](https://docs.aws.amazon.com/redshift/latest/dg/data-catalog-views-overview.html)。

  若要取得有關與 Data Catalog 中的視觀表相關之 SQL 命令的更多資訊，請參閱[CREATE EXTERNAL VIEW](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_VIEW.html)、[ALTER EXTERNAL VIEW](https://docs.aws.amazon.com/redshift/latest/dg/r_ALTER_EXTERNAL_VIEW.html) 和 [DROP EXTERNAL VIEW](https://docs.aws.amazon.com/redshift/latest/dg/r_DROP_EXTERNAL_VIEW.html)。

建立 Data Catalog 檢視後，您可以在 Lake Formation 主控台中取得檢視的詳細資訊。

1. 在 Lake Formation 主控台中選擇資料目錄下的**檢視**。

1. 可用檢視的清單會顯示在檢視頁面上。

1. 從清單中選擇檢視，詳細資訊頁面會顯示檢視的屬性。

![\[下一節包含五個水平排列的標籤，其中每個標籤都包含對應的資訊 。\]](http://docs.aws.amazon.com/zh_tw/lake-formation/latest/dg/images/view-definition.png)


結構描述  
選擇資料`Column`列，然後選取**編輯 LF 標籤**以更新標籤值或指派新的 LF 標籤。

SQL 定義  
您可以查看可用的 SQL 定義清單。選取**新增 SQL 定義**，然後選擇查詢引擎以新增 SQL 定義。在資料`Edit definition`欄下選擇查詢引擎 (Athena 或 Amazon Redshift) 以更新 SQL 定義。

LF 標籤  
選擇**編輯 LF 標籤**以編輯標籤的值或指派新標籤。您可以使用 LF 標籤來授予檢視的許可。

跨帳戶存取權  
您可以查看已與您共用 Data Catalog 檢視的組織 AWS 帳戶和組織單位 (OUs) 清單。

基礎資料表  
用於建立檢視的 SQL 定義中參考的基礎資料表會顯示在此索引標籤下方。

# 使用 AWS Glue APIs建立 Data Catalog 檢視
<a name="views-api-usage"></a>

您可以使用 AWS Glue [CreateTable](https://docs.aws.amazon.com/glue/latest/webapi/API_CreateTable.html) 和 [UpdateTable](https://docs.aws.amazon.com/glue/latest/webapi/API_UpdateTable.html) APIs Data Catalog 中建立和更新檢視。`CreateTable` 和 `UpdateTable`操作具有 的新`TableInput`結構`ViewDefinition`，而 `SearchTables`、`GetTable``GetTables`、`GetTableVersion`、、 `GetTableVersions`操作在其檢視的輸出語法`ViewDefinition`中提供 。此外，`GetTable`API 輸出中有新的`Status`欄位。

有兩個新的 AWS Glue 連線可用於驗證每個支援的查詢引擎 Amazon Athena 和 Amazon Redshift 的 SQL 方言。

與檢視搭配使用時， `CreateTable`和 `UpdateTable` APIs是非同步的。當使用多個 SQL 方言呼叫這些 APIs 時，呼叫會驗證每個引擎，以判斷該方言是否可以在該引擎上執行，以及每個方言的檢視結果結構描述是否相符。 AWS Glue 服務使用這些連線對分析引擎進行內部呼叫。這些呼叫會模擬引擎如何驗證在引擎上執行的 `CREATE VIEW`或 `ALTER VIEW` SQL DDL。

如果提供的 SQL 有效，且檢視方言之間的結構描述相符，則 API 會以 AWS Glue 原子方式遞交結果。Atomicity 允許建立或修改具有多個方言的檢視，而不會停機。

**Topics**
+ [建立 AWS Glue 連線以驗證狀態](views-api-usage-connection.md)
+ [驗證檢視產生狀態](views-api-usage-get-table.md)
+ [非同步狀態和操作](views-api-usage-async-states.md)
+ [檢視非同步操作期間的建立失敗案例](views-api-usage-errors.md)

# 建立 AWS Glue 連線以驗證狀態
<a name="views-api-usage-connection"></a>

若要使用 或 `UpdateTable`操作建立`CreateTable`或更新 AWS Glue Data Catalog 檢視，您必須建立新的連線類型 AWS Glue 以進行驗證，並將其提供給支援的分析引擎。搭配 Athena 或 Amazon Redshift 使用 Data Catalog 檢視需要這些連線。您只能使用 AWS CLI、 AWS SDKs或 AWS Glue APIs建立這些連線。您無法使用 AWS 管理主控台 建立 AWS Glue 連線。

**注意**  
如果檢視定義者角色和呼叫 `CreateTable`或 `UpdateTable` 的角色不同，則兩者都需要其 IAM 政策陳述式中的`glue:PassConnection`許可。

如需詳細資訊，請參閱 [create-connection](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/glue/create-connection.html) AWS CLI 文件。

**AWS CLI 用於建立連線的 命令**  
以下是用於建立連線的 AWS CLI 命令：

```
aws glue create-connection --region us-east-1 
--endpoint-url https://glue.us-east-1.amazonaws.com 
--cli-input-json file:///root/path/to/create-connection.json
```

**AWS CLI 輸入 JSON**  
對於 Amazon Redshift：

```
{
    "CatalogId": "123456789012",
    "ConnectionInput": {
        "ConnectionType": "VIEW_VALIDATION_REDSHIFT",
        "Name": "views-preview-cluster-connection-2",
        "Description": "My first Amazon Redshift validation connection",
        "ConnectionProperties": {
            "DATABASE": "dev",
            "CLUSTER_IDENTIFIER": "glue-data-catalog-views-preview-cluster"
        }
    }
}
```

對於 Amazon Athena：

```
{
    "CatalogId": "123456789012",
    "ConnectionInput": {
        "ConnectionType": "VIEW_VALIDATION_ATHENA",
        "Name": "views-preview-cluster-connection-3",
        "Description": "My first Amazon Athena validation connection",
        "ConnectionProperties": {
            "WORKGROUP_NAME": "workgroup-name"
        }
    }
}
```

# 驗證檢視產生狀態
<a name="views-api-usage-get-table"></a>

當您執行 `CreateTable`或 `UpdateTable`操作時，`GetTable`API 輸出的 `Status` 欄位會顯示檢視建立狀態的詳細資訊。對於資料表尚不存在的`create`請求， 會在非同步程序期間 AWS Glue 建立空資料表。呼叫 時`GetTable`，您可以傳遞選用的布林值旗標 `IncludeStatusDetails`，其中顯示請求的診斷資訊。如果失敗，此旗標會顯示錯誤訊息，其中包含每個方言的個別狀態。

檢視建立、讀取、更新和刪除 (CRUD) 操作期間的錯誤可能發生在 AWS Glue/Lake Formation 服務的處理期間，或在 Amazon Redshift 或 Athena 的檢視 SQL 驗證期間。在引擎驗證期間發生錯誤時，服務 AWS Glue 會提供引擎傳回的錯誤訊息。

**狀態欄位**  
以下是狀態欄位：
+ 狀態：一般狀態，與不同類型的任務無關：
  + QUEUED
  + IN\$1PROGRESS
  + 成功
  + 失敗
+ 動作 – 指出在資料表上呼叫的動作，目前只有 `CREATE`或 `UPDATE`操作可用。

  使用檢視時，區分 `UPDATE`和 `CREATE`操作非常重要。操作類型會決定您應該如何繼續查詢資料表。

   `UPDATE` 操作表示資料表已存在於 Data Catalog 中。在這種情況下，您可以繼續查詢先前建立的資料表，而不會發生任何問題。另一方面，`CREATE `操作表示之前從未成功建立資料表。如果資料表標示為 `CREATE`，嘗試查詢將會失敗，因為資料表尚未存在於系統中。因此，在嘗試查詢資料表之前，請務必識別操作類型 (UPDATE 或 CREATE)。
+ RequestedBy – 請求非同步變更之使用者的 ARN。
+ UpdatedBy – 上次手動變更非同步變更程序的使用者 ARN，例如請求取消或修改。
+ 錯誤 – 此欄位只會在狀態為 **FAILED** 時出現。這是父層級例外狀況訊息。每個方言可能會有不同的錯誤。
  + ErrorCode – 例外狀況的類型。
  + ErrorMessage – 例外狀況的簡短描述。
+ RequestTime – ISO 8601 格式的日期字串，指出啟動變更的時間。
+ UpdateTime – ISO 8601 格式的日期字串，指出上次更新狀態的時間。

# 非同步狀態和操作
<a name="views-api-usage-async-states"></a>

當您執行`glue:CreateTable`請求時，會開始非同步建立 Data Catalog 檢視。在下列各節中，本文件說明`glue:GetTable`回應中可用的 AWS Glue 檢視`Status`的 。為了簡潔起見，本節省略完整回應。

```
{
    "Table": {
        ...
        "Status": {
            ...
            "Action": "CREATE",
            "State": "QUEUED",
        }
    }
}
```

上述兩個屬性都代表重要的診斷資訊，指出非同步操作的狀態，以及可在此檢視上執行的動作。以下是這些屬性可以接受的可能值。

1. `Status.Action`

   1. CREATE

   1. UPDATE

1. `Status.State`

   1. QUEUED

   1. IN\$1PROGRESS

   1. 成功

   1. 失敗

也請務必注意，Data Catalog 檢視上的某些更新不需要非同步操作。例如，可能想要更新資料表的 `Description` 屬性。由於這不需要任何非同步操作，因此產生的資料表中繼資料將沒有任何 `Status`，且屬性將為 `NULL`。

```
{
    "Table": {
        ...,
        "Description": "I changed this attribute!"
    }
}
```

接下來，本主題會探索上述狀態資訊如何影響可在 AWS Glue 檢視上執行的操作。

**glue:CreateTable**  
相較於任何 Glue 資料表的 `glue:CreateTable`函數，此 API 沒有任何變更。 `CreateTable` 可能針對尚未存在的任何資料表名稱呼叫 。

**glue:UpdateTable**  
此操作無法在具有下列狀態資訊的 AWS Glue 檢視上執行：

1. 動作 == CREATE 和狀態 == QUEUED

1. 動作 == CREATE 和狀態 == IN\$1PROGRESS

1. 動作 == CREATE 和狀態 == 失敗

1. 動作 == UPDATE 和狀態 == QUEUED

1. 動作 == UPDATE 和狀態 == IN\$1PROGRESS

總而言之，只有在 Data Catalog 檢視符合下列要求時，您才能更新它。

1. 第一次成功建立。

   1. 動作 == CREATE 和狀態 == 成功

1. 在非同步更新操作之後，它已達到結束狀態。

   1. 動作 == UPDATE 和狀態 == 成功

   1. 動作 == UPDATE 和狀態 == 失敗

1. 由於同步更新，它具有`NULL`狀態屬性。

**glue:DeleteTable**  
相較於任何 AWS Glue 資料表的 `glue:DeleteTable` 函數，此操作沒有任何變更。您可以刪除 Data Catalog 檢視，無論其狀態為何。

**glue:GetTable**  
相較於任何 AWS Glue 資料表的 `glue:GetTable` 函數，此操作沒有任何變更。不過，在第一次成功建立 Data Catalog 檢視之前，您無法從分析引擎查詢 Data Catalog 檢視。 `Action == CREATE and State == SUCCESS`第一次成功建立 Data Catalog 檢視後，無論其狀態為何，您都可以查詢檢視。

**注意**  
本節中的所有資訊適用於所有資料表讀取 APIs`GetTables`，例如 `GetTable`、 和 `SearchTables`。

# 檢視非同步操作期間的建立失敗案例
<a name="views-api-usage-errors"></a>

下列範例代表可能因`CreateTable`或`UpdateTable`檢視 API 呼叫而產生的錯誤類型。它們並不詳盡，因為 SQL 查詢失敗的錯誤表面相當大。

## 案例 1：Amazon Redshift 查詢失敗
<a name="views-api-usage-errors-scenario-1"></a>

驗證期間，在資料目錄中找不到針對 Amazon Redshift 提供的查詢，其中包含拼寫錯誤的資料表名稱。產生的錯誤會顯示在檢視`GetTable`回應的 `Status` 欄位中。

`GetTable` 請求：

```
{
    "CatalogId": "123456789012",
    "DatabaseName": "async-view-test-db",
    "TableInput": {
        "Name": "view-athena-redshift-72",
        "Description": "This is an atomic operation",
        "StorageDescriptor": {
            "Columns": [
                { "Name": "col1", "Type": "int" },
                { "Name": "col2", "Type": "string" },
                { "Name": "col3", "Type": "double" }
            ]
        },
        "ViewDefinition": {
            "Definer": "arn:aws:iam::123456789012:role/GDCViewDefiner",
            "SubObjects": [ "arn:aws:glue:us-east-1:123456789012:table/gdc-view-playground-db/table_1" ],
            "Representations": [
                {
                    "Dialect": "ATHENA",
                    "DialectVersion": "3",
                    "ViewOriginalText": "SELECT * FROM \"gdc-view-playground-db\".\"table_1\"",
                    "ValidationConnection": "athena-connection"
                },
                {
                    "Dialect": "REDSHIFT",
                    "DialectVersion": "1.0",
                    "ViewOriginalText": "SELECT * FROM \"gdc-view-playground-external-schema\".\"table__1\";",
                    "ValidationConnection": "redshift-connection"
                }
            ]
        }
    }
}
```

`GetTable` 回應：

```
IncludeStatusDetails = FALSE
{
    "Table": {
        "Name": "view-athena-redshift-72",
        "DatabaseName": "async-view-test-db",
        "Description": "",
        "CreateTime": "2024-07-11T11:39:19-07:00",
        "UpdateTime": "2024-07-11T11:39:19-07:00",
        "Retention": 0,
        "ViewOriginalText": "",
        "ViewExpandedText": "",
        "TableType": "",
        "CreatedBy": "arn:aws:iam::123456789012:user/zcaisse",
        "IsRegisteredWithLakeFormation": false,
        "CatalogId": "123456789012",
        "IsRowFilteringEnabled": false,
        "VersionId": "-1",
        "DatabaseId": "<databaseID>",
        "IsMultiDialectView": false,
        "Status": {
            "RequestedBy": "arn:aws:iam::123456789012:user/zcaisse",
            "UpdatedBy": "arn:aws:iam::123456789012:user/zcaisse",
            "RequestTime": "2024-07-11T11:39:19-07:00",
            "UpdateTime": "2024-07-11T11:40:06-07:00",
            "Action": "CREATE",
            "State": "FAILED"
        }
    }
}

IncludeStatusDetails = TRUE
{
    "Table": {
        "Name": "view-athena-redshift-72",
        "DatabaseName": "async-view-test-db",
        "Description": "",
        "CreateTime": "2024-07-11T11:39:19-07:00",
        "UpdateTime": "2024-07-11T11:39:19-07:00",
        "Retention": 0,
        "ViewOriginalText": "",
        "ViewExpandedText": "",
        "TableType": "",
        "CreatedBy": "arn:aws:iam::123456789012:user/zcaisse",
        "IsRegisteredWithLakeFormation": false,
        "CatalogId": "123456789012",
        "IsRowFilteringEnabled": false,
        "VersionId": "-1",
        "DatabaseId": "<databaseID>",
        "IsMultiDialectView": false,
        "Status": {
            "RequestedBy": "arn:aws:iam::123456789012:user/zcaisse",
            "UpdatedBy": "arn:aws:iam::123456789012:user/zcaisse",
            "RequestTime": "2024-07-11T11:39:19-07:00",
            "UpdateTime": "2024-07-11T11:40:06-07:00",
            "Action": "CREATE",
            "State": "FAILED",
            "Error": {
                "ErrorCode": "QueryExecutionException",
                "ErrorMessage": "Error received during view SQL validation using a connection: [Connection Name: redshift-connection | Query Execution Id: ddb711d3-2415-4aa9-b251-6a76ab4f41b1 | Timestamp: Thu Jul 11 18:39:37 UTC 2024]: Redshift returned error for the statement: ERROR: AwsClientException: EntityNotFoundException from glue - Entity Not Found"
            },
            "Details": {
                "RequestedChange": {
                    "Name": "view-athena-redshift-72",
                    "DatabaseName": "async-view-test-db",
                    "Description": "This is an atomic operation",
                    "Retention": 0,
                    "StorageDescriptor": {
                        "Columns": [
                            {
                                "Name": "col1",
                                "Type": "int"
                            },
                            {
                                "Name": "col2",
                                "Type": "string"
                            },
                            {
                                "Name": "col3",
                                "Type": "double"
                            }
                        ],
                        "Compressed": false,
                        "NumberOfBuckets": 0,
                        "SortColumns": [],
                        "StoredAsSubDirectories": false
                    },
                    "TableType": "VIRTUAL_VIEW",
                    "IsRegisteredWithLakeFormation": false,
                    "CatalogId": "123456789012",
                    "IsRowFilteringEnabled": false,
                    "VersionId": "-1",
                    "DatabaseId": "<databaseID>",
                    "ViewDefinition": {
                        "IsProtected": true,
                        "Definer": "arn:aws:iam::123456789012:role/GDCViewDefiner",
                        "SubObjects": [
                            "arn:aws:glue:us-east-1:123456789012:table/gdc-view-playground-db/table_1"
                        ],
                        "Representations": [
                            {
                                "Dialect": "ATHENA",
                                "DialectVersion": "3",
                                "ViewOriginalText": "SELECT * FROM \"gdc-view-playground-db\".\"table_1\"",
                                "IsStale": false
                            },
                            {
                                "Dialect": "REDSHIFT",
                                "DialectVersion": "1.0",
                                "ViewOriginalText": "SELECT * FROM \"gdc-view-playground-external-schema\".\"table__1\";",
                                "IsStale": false
                            }
                        ]
                    },
                    "IsMultiDialectView": true
                },
                "ViewValidations": [
                    {
                        "Dialect": "ATHENA",
                        "DialectVersion": "3",
                        "ViewValidationText": "SELECT * FROM \"gdc-view-playground-db\".\"table_1\"",
                        "UpdateTime": "2024-07-11T11:40:06-07:00",
                        "State": "SUCCESS"
                    },
                    {
                        "Dialect": "REDSHIFT",
                        "DialectVersion": "1.0",
                        "ViewValidationText": "SELECT * FROM \"gdc-view-playground-external-schema\".\"table__1\";",
                        "UpdateTime": "2024-07-11T11:39:37-07:00",
                        "State": "FAILED",
                        "Error": {
                            "ErrorCode": "QueryExecutionException",
                            "ErrorMessage": "Error received during view SQL validation using a connection: [Connection Name: redshift-connection | Query Execution Id: ddb711d3-2415-4aa9-b251-6a76ab4f41b1 | Timestamp: Thu
 Jul 11 18:39:37 UTC 2024]: Redshift returned error for the statement: ERROR: AwsClientException: EntityNotFoundException from glue - Entity Not Found"
                        }
                    }
                ]
            }
        }
    }
}
```

## 案例 2：無效的 Amazon Redshift 連線
<a name="views-api-usage-errors-scenario-2"></a>

下列範例中的 Amazon Redshift 連線格式錯誤，因為它是指在提供的叢集/無伺服器端點中不存在的 Amazon Redshift 資料庫。Amazon Redshift 無法驗證檢視，回應中的 `Status` 欄位`GetTable`會顯示錯誤 (`"State": "FAILED"`來自 Amazon Redshift。

`GetTable` 請求：

```
{
    "CatalogId": "123456789012",
    "DatabaseName": "async-view-test-db",
    "TableInput": {
        "Name": "view-athena-redshift-73",
        "Description": "This is an atomic operation",
        "StorageDescriptor": {
            "Columns": [
                { "Name": "col1", "Type": "int" },
                { "Name": "col2", "Type": "string" },
                { "Name": "col3", "Type": "double" }
            ]
        },
        "ViewDefinition": {
            "Definer": "arn:aws:iam::123456789012:role/GDCViewDefiner",
            "SubObjects": [ "arn:aws:glue:us-east-1:123456789012:table/gdc-view-playground-db/table_1" ],
            "Representations": [
                {
                    "Dialect": "ATHENA",
                    "DialectVersion": "3",
                    "ViewOriginalText": "SELECT * FROM \"gdc-view-playground-db\".\"table_1\"",
                    "ValidationConnection": "athena-connection"
                },
                {
                    "Dialect": "REDSHIFT",
                    "DialectVersion": "1.0",
                    "ViewOriginalText": "SELECT * FROM \"gdc-view-playground-external-schema\".\"table_1\";",
                    "ValidationConnection": "redshift-connection-malformed"
                }
            ]
        }
    }
}
```

`GetTable` 回應：

```
IncludeStatusDetails = FALSE
{
    "Table": {
        "Name": "view-athena-redshift-73",
        "DatabaseName": "async-view-test-db",
        "Description": "",
        "CreateTime": "2024-07-11T11:43:27-07:00",
        "UpdateTime": "2024-07-11T11:43:27-07:00",
        "Retention": 0,
        "ViewOriginalText": "",
        "ViewExpandedText": "",
        "TableType": "",
        "CreatedBy": "arn:aws:iam::123456789012:user/zcaisse",
        "IsRegisteredWithLakeFormation": false,
        "CatalogId": "123456789012",
        "IsRowFilteringEnabled": false,
        "VersionId": "-1",
        "DatabaseId": "<databaseID>",
        "IsMultiDialectView": false,
        "Status": {
            "RequestedBy": "arn:aws:iam::123456789012:user/zcaisse",
            "UpdatedBy": "arn:aws:iam::123456789012:user/zcaisse",
            "RequestTime": "2024-07-11T11:43:27-07:00",
            "UpdateTime": "2024-07-11T11:43:40-07:00",
            "Action": "CREATE",
            "State": "FAILED"
        }
    }
}

IncludeStatusDetails = TRUE
{
    "Table": {
        "Name": "view-athena-redshift-73",
        "DatabaseName": "async-view-test-db",
        "Description": "",
        "CreateTime": "2024-07-11T11:43:27-07:00",
        "UpdateTime": "2024-07-11T11:43:27-07:00",
        "Retention": 0,
        "ViewOriginalText": "",
        "ViewExpandedText": "",
        "TableType": "",
        "CreatedBy": "arn:aws:iam::123456789012:user/zcaisse",
        "IsRegisteredWithLakeFormation": false,
        "CatalogId": "123456789012",
        "IsRowFilteringEnabled": false,
        "VersionId": "-1",
        "DatabaseId": "<databaseID>",
        "IsMultiDialectView": false,
        "Status": {
            "RequestedBy": "arn:aws:iam::123456789012:user/zcaisse",
            "UpdatedBy": "arn:aws:iam::123456789012:user/zcaisse",
            "RequestTime": "2024-07-11T11:43:27-07:00",
            "UpdateTime": "2024-07-11T11:43:40-07:00",
            "Action": "CREATE",
            "State": "FAILED",
            "Error": {
                "ErrorCode": "QueryExecutionException",
                "ErrorMessage": "Error received during view SQL validation using a connection: [Connection Name: redshift-connection-malformed | Query Execution Id: 69bfafd4-3d51-4cb0-9320-7ce5404b1809 | Timestamp: Thu Jul 11 18:43:38 UTC 2024]: Redshift returned error for the statement: FATAL: database \"devooo\" does not exist"
            },
            "Details": {
                "RequestedChange": {
                    "Name": "view-athena-redshift-73",
                    "DatabaseName": "async-view-test-db",
                    "Description": "This is an atomic operation",
                    "Retention": 0,
                    "StorageDescriptor": {
                        "Columns": [
                            {
                                "Name": "col1",
                                "Type": "int"
                            },
                            {
                                "Name": "col2",
                                "Type": "string"
                            },
                            {
                                "Name": "col3",
                                "Type": "double"
                            }
                        ],
                        "Compressed": false,
                        "NumberOfBuckets": 0,
                        "SortColumns": [],
                        "StoredAsSubDirectories": false
                    },
                    "TableType": "VIRTUAL_VIEW",
                    "IsRegisteredWithLakeFormation": false,
                    "CatalogId": "123456789012",
                    "IsRowFilteringEnabled": false,
                    "VersionId": "-1",
                    "DatabaseId": "<databaseID>",
                    "ViewDefinition": {
                        "IsProtected": true,
                        "Definer": "arn:aws:iam::123456789012:role/GDCViewDefiner",
                        "SubObjects": [
                            "arn:aws:glue:us-east-1:123456789012:table/gdc-view-playground-db/table_1"
                        ],
                        "Representations": [
                            {
                                "Dialect": "ATHENA",
                                "DialectVersion": "3",
                                "ViewOriginalText": "SELECT * FROM \"gdc-view-playground-db\".\"table_1\"",
                                "IsStale": false
                            },
                            {
                                "Dialect": "REDSHIFT",
                                "DialectVersion": "1.0",
                                "ViewOriginalText": "SELECT * FROM \"gdc-view-playground-external-schema\".\"table_1\";",
                                "IsStale": false
                            }
                        ]
                    },
                    "IsMultiDialectView": true
                },
                "ViewValidations": [
                    {
                        "Dialect": "ATHENA",
                        "DialectVersion": "3",
                        "ViewValidationText": "SELECT * FROM \"gdc-view-playground-db\".\"table_1\"",
                        "UpdateTime": "2024-07-11T11:43:40-07:00",
                        "State": "SUCCESS"
                    },
                    {
                        "Dialect": "REDSHIFT",
                        "DialectVersion": "1.0",
                        "ViewValidationText": "SELECT * FROM \"gdc-view-playground-external-schema\".\"table_1\";",
                        "UpdateTime": "2024-07-11T11:43:38-07:00",
                        "State": "FAILED",
                        "Error": {
                            "ErrorCode": "QueryExecutionException",
                            "ErrorMessage": "Error received during view SQL validation using a connection: [Connection Name: redshift-connection-malformed | Query Execution Id: 69bfafd4-3d51-4cb0-9320-7ce5404b1809 | Time
stamp: Thu Jul 11 18:43:38 UTC 2024]: Redshift returned error for the statement: FATAL: database \"devooo\" does not exist"
                        }
                    }
                ]
            }
        }
    }
}
```

## 案例 3：Athena 查詢失敗
<a name="views-api-usage-errors-scenario-3"></a>

這裡的 SQL for Athena 無效，因為查詢漏接資料庫名稱。Athena 查詢驗證會擷取此項目，而產生的錯誤會透過`GetTable`呼叫中的`Status`物件呈現。

`GetTable` 請求：

```
{
    "CatalogId": "123456789012",
    "DatabaseName": "async-view-test-db",
    "TableInput": {
        "Name": "view-athena-redshift-70",
        "Description": "This is an atomic operation",
        "StorageDescriptor": {
            "Columns": [
                { "Name": "col1", "Type": "int" },
                { "Name": "col2", "Type": "string" },
                { "Name": "col3", "Type": "double" }
            ]
        },
        "ViewDefinition": {
            "Definer": "arn:aws:iam::123456789012:role/GDCViewDefiner",
            "SubObjects": [ "arn:aws:glue:us-east-1:123456789012:table/gdc-view-playground-db/table_1" ],
            "Representations": [
                {
                    "Dialect": "ATHENA",
                    "DialectVersion": "3",
                    "ViewOriginalText": "SELECT * FROM \"gdc--view-playground-db\".\"table_1\"",
                    "ValidationConnection": "athena-connection"
                },
                {
                    "Dialect": "REDSHIFT",
                    "DialectVersion": "1.0",
                    "ViewOriginalText": "SELECT * FROM \"gdc-view-playground-external-schema\".\"table_1\";",
                    "ValidationConnection": "redshift-connection"
                }
            ]
        }
    }
}
```

`GetTable` 回應：

```
IncludeStatusDetails = FALSE
{
    "Table": {
        "Name": "view-athena-redshift-70",
        "DatabaseName": "async-view-test-db",
        "Description": "",
        "CreateTime": "2024-07-11T11:09:53-07:00",
        "UpdateTime": "2024-07-11T11:09:53-07:00",
        "Retention": 0,
        "ViewOriginalText": "",
        "ViewExpandedText": "",
        "TableType": "",
        "CreatedBy": "arn:aws:iam::123456789012:user/",
        "IsRegisteredWithLakeFormation": false,
        "CatalogId": "123456789012",
        "IsRowFilteringEnabled": false,
        "VersionId": "-1",
        "DatabaseId": "<databaseID>",
        "IsMultiDialectView": false,
        "Status": {
            "RequestedBy": "arn:aws:iam::123456789012:user/zcaisse",
            "UpdatedBy": "arn:aws:iam::123456789012:user/zcaisse",
            "RequestTime": "2024-07-11T11:09:54-07:00",
            "UpdateTime": "2024-07-11T11:10:41-07:00",
            "Action": "CREATE",
            "State": "FAILED",
        }
    }
}

IncludeStatusDetails = TRUE
{
    "Table": {
        "Name": "view-athena-redshift-70",
        "DatabaseName": "async-view-test-db",
        "Description": "",
        "CreateTime": "2024-07-11T11:09:53-07:00",
        "UpdateTime": "2024-07-11T11:09:53-07:00",
        "Retention": 0,
        "ViewOriginalText": "",
        "ViewExpandedText": "",
        "TableType": "",
        "CreatedBy": "arn:aws:iam::123456789012:user/zcaisse",
        "IsRegisteredWithLakeFormation": false,
        "CatalogId": "123456789012",
        "IsRowFilteringEnabled": false,
        "VersionId": "-1",
        "DatabaseId": "<databaseID>",
        "IsMultiDialectView": false,
        "Status": {
            "RequestedBy": "arn:aws:iam::123456789012:user/zcaisse",
            "UpdatedBy": "arn:aws:iam::123456789012:user/zcaisse",
            "RequestTime": "2024-07-11T11:09:54-07:00",
            "UpdateTime": "2024-07-11T11:10:41-07:00",
            "Action": "CREATE",
            "State": "FAILED",
            "Error": {
                "ErrorCode": "QueryExecutionException",
                "ErrorMessage": "Error received during view SQL validation using a connection: [Connection Name: athena-connection | Query Execution Id: d9bb1e6d-ce26-4b35-8276-8a199af966aa | Timestamp: Thu Jul 11 18:10:
41 UTC 2024]: Athena validation FAILED: {ErrorCategory: 2,ErrorType: 1301,Retryable: false,ErrorMessage: line 1:118: Schema 'gdc--view-playground-db' does not exist}"
            },
            "Details": {
                "RequestedChange": {
                    "Name": "view-athena-redshift-70",
                    "DatabaseName": "async-view-test-db",
                    "Description": "This is an atomic operation",
                    "Retention": 0,
                    "StorageDescriptor": {
                        "Columns": [
                            {
                                "Name": "col1",
                                "Type": "int"
                            },
                            {
                                "Name": "col2",
                                "Type": "string"
                            },
                            {
                                "Name": "col3",
                                "Type": "double"
                            }
                        ],
                        "Compressed": false,
                        "NumberOfBuckets": 0,
                        "SortColumns": [],
                        "StoredAsSubDirectories": false
                    },
                    "TableType": "VIRTUAL_VIEW",
                    "IsRegisteredWithLakeFormation": false,
                    "CatalogId": "123456789012",
                    "IsRowFilteringEnabled": false,
                    "VersionId": "-1",
                    "DatabaseId": "<databaseID>",
                    "ViewDefinition": {
                        "IsProtected": true,
                        "Definer": "arn:aws:iam::123456789012:role/GDCViewDefiner",
                        "SubObjects": [
                            "arn:aws:glue:us-east-1:123456789012:table/gdc-view-playground-db/table_1"
                        ],
                        "Representations": [
                            {
                                "Dialect": "ATHENA",
                                "DialectVersion": "3",
                                "ViewOriginalText": "SELECT * FROM \"gdc--view-playground-db\".\"table_1\"",
                                "IsStale": false
                            },
                            {
                                "Dialect": "REDSHIFT",
                                "DialectVersion": "1.0",
                                "ViewOriginalText": "SELECT * FROM \"gdc-view-playground-external-schema\".\"table_1\";",
                                "IsStale": false
                            }
                        ]
                    },
                    "IsMultiDialectView": true
                },
                "ViewValidations": [
                    {
                        "Dialect": "ATHENA",
                        "DialectVersion": "3",
                        "ViewValidationText": "SELECT * FROM \"gdc--view-playground-db\".\"table_1\"",
                        "UpdateTime": "2024-07-11T11:10:41-07:00",
                        "State": "FAILED",
                        "Error": {
                            "ErrorCode": "QueryExecutionException",
                            "ErrorMessage": "Error received during view SQL validation using a connection: [Connection Name: athena-connection | Query Execution Id: d9bb1e6d-ce26-4b35-8276-8a199af966aa | Timestamp: Thu J
ul 11 18:10:41 UTC 2024]: Athena validation FAILED: {ErrorCategory: 2,ErrorType: 1301,Retryable: false,ErrorMessage: line 1:118: Schema 'gdc--view-playground-db' does not exist}"
                        }
                    },
                    {
                        "Dialect": "REDSHIFT",
                        "DialectVersion": "1.0",
                        "ViewValidationText": "SELECT * FROM \"gdc-view-playground-external-schema\".\"table_1\";",
                        "UpdateTime": "2024-07-11T11:10:41-07:00",
                        "State": "SUCCESS"
                    }
                ]
            }
        }
    }
}
```

## 案例 4：不相符的儲存描述項
<a name="views-api-usage-errors-scenario-4"></a>

Athena 方言提供的 SQL 會選取 `col1`，`col2`而 SQL for Redshift 只會選取 `col1`。這會導致儲存描述項不相符錯誤。

`GetTable` 請求：

```
{
    "CatalogId": "123456789012",
    "DatabaseName": "async-view-test-db",
    "TableInput": {
        "Name": "view-athena-redshift-71",
        "Description": "This is an atomic operation",
        "StorageDescriptor": {
            "Columns": [
                { "Name": "col1", "Type": "int" },
                { "Name": "col2", "Type": "string" },
                { "Name": "col3", "Type": "double" }
            ]
        },
        "ViewDefinition": {
            "Definer": "arn:aws:iam::123456789012:role/GDCViewDefiner",
            "SubObjects": [ "arn:aws:glue:us-east-1:123456789012:table/gdc-view-playground-db/table_1" ],
            "Representations": [
                {
                    "Dialect": "ATHENA",
                    "DialectVersion": "3",
                    "ViewOriginalText": "SELECT col1, col2 FROM \"gdc-view-playground-db\".\"table_1\"",
                    "ValidationConnection": "athena-connection"
                },
                {
                    "Dialect": "REDSHIFT",
                    "DialectVersion": "1.0",
                    "ViewOriginalText": "SELECT col1 FROM \"gdc-view-playground-external-schema\".\"table_1\";",
                    "ValidationConnection": "redshift-connection"
                }
            ]
        }
    }
}
```

`GetTable` 回應：

```
IncludeStatusDetails = FALSE

{
    "Table": {
        "Name": "view-athena-redshift-71",
        "DatabaseName": "async-view-test-db",
        "Description": "",
        "CreateTime": "2024-07-11T11:22:02-07:00",
        "UpdateTime": "2024-07-11T11:22:02-07:00",
        "Retention": 0,
        "ViewOriginalText": "",
        "ViewExpandedText": "",
        "TableType": "",
        "CreatedBy": "arn:aws:iam::123456789012:user/zcaisse",
        "IsRegisteredWithLakeFormation": false,
        "CatalogId": "123456789012",
        "IsRowFilteringEnabled": false,
        "VersionId": "-1",
        "DatabaseId": "<databaseID>",
        "IsMultiDialectView": false,
        "Status": {
            "RequestedBy": "arn:aws:iam::123456789012:user/zcaisse",
            "UpdatedBy": "arn:aws:iam::123456789012:user/zcaisse",
            "RequestTime": "2024-07-11T11:22:02-07:00",
            "UpdateTime": "2024-07-11T11:23:19-07:00",
            "Action": "CREATE",
            "State": "FAILED"
        }
    }
}

IncludeStatusDetails = TRUE

{
    "Table": {
        "Name": "view-athena-redshift-71",
        "DatabaseName": "async-view-test-db",
        "Description": "",
        "CreateTime": "2024-07-11T11:22:02-07:00",
        "UpdateTime": "2024-07-11T11:22:02-07:00",
        "Retention": 0,
        "ViewOriginalText": "",
        "ViewExpandedText": "",
        "TableType": "",
        "CreatedBy": "arn:aws:iam::123456789012:user/zcaisse",
        "IsRegisteredWithLakeFormation": false,
        "CatalogId": "123456789012",
        "IsRowFilteringEnabled": false,
        "VersionId": "-1",
        "DatabaseId": "<databaseID>",
        "IsMultiDialectView": false,
        "Status": {
            "RequestedBy": "arn:aws:iam::123456789012:user/zcaisse",
            "UpdatedBy": "arn:aws:iam::123456789012:user/zcaisse",
            "RequestTime": "2024-07-11T11:22:02-07:00",
            "UpdateTime": "2024-07-11T11:23:19-07:00",
            "Action": "CREATE",
            "State": "FAILED",
            "Error": {
                "ErrorCode": "InvalidInputException",
                "ErrorMessage": "Engine and existing storage descriptor mismatch"
            },
            "Details": {
                "RequestedChange": {
                    "Name": "view-athena-redshift-71",
                    "DatabaseName": "async-view-test-db",
                    "Description": "This is an atomic operation",
                    "Retention": 0,
                    "StorageDescriptor": {
                        "Columns": [
                            {
                                "Name": "col1",
                                "Type": "int"
                            },
                            {
                                "Name": "col2",
                                "Type": "string"
                            },
                            {
                                "Name": "col3",
                                "Type": "double"
                            }
                        ],
                        "Compressed": false,
                        "NumberOfBuckets": 0,
                        "SortColumns": [],
                        "StoredAsSubDirectories": false
                    },
                    "TableType": "VIRTUAL_VIEW",
                    "IsRegisteredWithLakeFormation": false,
                    "CatalogId": "123456789012",
                    "IsRowFilteringEnabled": false,
                    "VersionId": "-1",
                    "DatabaseId": "<databaseID>",
                    "ViewDefinition": {
                        "IsProtected": true,
                        "Definer": "arn:aws:iam::123456789012:role/GDCViewDefiner",
                        "SubObjects": [
                            "arn:aws:glue:us-east-1:123456789012:table/gdc-view-playground-db/table_1"
                        ],
                        "Representations": [
                            {
                                "Dialect": "ATHENA",
                                "DialectVersion": "3",
                                "ViewOriginalText": "SELECT col1, col2 FROM \"gdc-view-playground-db\".\"table_1\"",
                                "IsStale": false
                            },
                            {
                                "Dialect": "REDSHIFT",
                                "DialectVersion": "1.0",
                                "ViewOriginalText": "SELECT col1 FROM \"gdc-view-playground-external-schema\".\"table_1\";",
                                "IsStale": false
                            }
                        ]
                    },
                    "IsMultiDialectView": true
                },
                "ViewValidations": [
                    {
                        "Dialect": "ATHENA",
                        "DialectVersion": "3",
                        "ViewValidationText": "SELECT col1, col2 FROM \"gdc-view-playground-db\".\"table_1\"",
                        "UpdateTime": "2024-07-11T11:23:19-07:00",
                        "State": "FAILED",
                        "Error": {
                            "ErrorCode": "InvalidInputException",
                            "ErrorMessage": "Engine and existing storage descriptor mismatch"
                        }
                    },
                    {
                        "Dialect": "REDSHIFT",
                        "DialectVersion": "1.0",
                        "ViewValidationText": "SELECT col1 FROM \"gdc-view-playground-external-schema\".\"table_1\";",
                        "UpdateTime": "2024-07-11T11:22:49-07:00",
                        "State": "FAILED",
                        "Error": {
                            "ErrorCode": "InvalidInputException",
                            "ErrorMessage": "Engine and existing storage descriptor mismatch"
                        }
                    }
                ]
            }
        }
    }
}
```

# 授予 Data Catalog 檢視的許可
<a name="grant-perms-views"></a>

 在 中建立檢視後 AWS Glue Data Catalog，您可以將檢視的資料湖許可授予跨 AWS 帳戶組織和組織單位的主體。您可以使用 LF-Tags 或具名資源方法授予許可。如需標記資源的詳細資訊，請參閱 [Lake Formation 標籤型存取控制](tag-based-access-control.md)。如需直接授予檢視許可的詳細資訊，請參閱 [使用具名資源方法授予檢視的許可](granting-view-permissions.md)。

# 具體化視觀表
<a name="materialized-views"></a>

**Topics**
+ [區分具體化視觀表與其他視觀表類型](#materialized-views-differentiating)
+ [使用案例](#materialized-views-use-cases)
+ [重要概念](#materialized-views-key-concepts)
+ [具體化視觀表的許可](#materialized-views-permissions)
+ [建立和管理具體化視觀表](#materialized-views-creating-managing)
+ [儲存和資料存取](#materialized-views-storage-access)
+ [與 AWS Lake Formation 許可整合](#materialized-views-lake-formation)
+ [監控與除錯](#materialized-views-monitoring-debugging)
+ [管理重新整理任務](#materialized-views-managing-refresh-jobs)
+ [監控和疑難排解](#materialized-views-monitoring-troubleshooting)
+ [考量和限制](#materialized-views-considerations-limitations)

在 AWS Glue 資料目錄中，具體化檢視是受管資料表，以 Apache Iceberg 格式存放 SQL 查詢的預先計算結果。與每次存取時執行查詢的標準 Data Catalog 檢視不同，具體化檢視會實際存放查詢結果，並在基礎來源資料表變更時加以更新。您可以在 Amazon Athena、Amazon EMR 或 中使用 Apache Spark 3.5.6\$1 版建立具體化視觀表。 AWS Glue

具體化視觀表參考在 AWS Glue Data Catalog 中註冊的 Apache Iceberg 資料表，預先計算的資料會儲存為 Amazon S3 Tables 儲存貯體或 Amazon S3 一般用途儲存貯體中的 Apache Iceberg 資料表，使其可從多個查詢引擎存取，包括 Amazon Athena、Amazon Redshift 和第三方 Iceberg 相容引擎。

## 區分具體化視觀表與其他視觀表類型
<a name="materialized-views-differentiating"></a>

具體化視觀表與 AWS Glue Data Catalog 檢視、Apache Spark 檢視和 Amazon Athena 檢視有基本差異。雖然 Data Catalog 檢視是虛擬資料表，每次存取 SQL 查詢定義時都會執行，但具體化檢視會實際存放預先計算的查詢結果。這可消除備援運算，並大幅改善經常存取複雜轉換的查詢效能。

具體化視觀表也與使用 AWS Glue ETL 或自訂 Spark 任務建置的傳統資料轉換管道不同。您可以使用標準 SQL 語法定義具體化視觀表，而不是編寫自訂程式碼來處理變更偵測、增量更新和工作流程協同運作。Data Catalog AWS Glue 會自動監控來源資料表、偵測變更，並使用全受管運算基礎設施重新整理具體化視觀表。

## 使用案例
<a name="materialized-views-use-cases"></a>

以下是具體化視觀表的重要使用案例：
+ **加速複雜的分析查詢** – 建立具體化視觀表，預先計算昂貴的聯結、彙總和視窗函數。Spark 引擎會自動重寫後續查詢，以使用預先計算的結果，進而降低查詢延遲和運算成本。
+ **簡化資料轉換管道** – 使用簡單的 SQL 型具體化視觀表定義取代處理變更偵測、增量更新和工作流程協同運作的複雜 ETL 任務。 AWS Glue Data Catalog 會自動管理所有操作複雜性。
+ **使用受管資料存取啟用自助式分析** – 建立策劃的具體化視觀表，將原始資料轉換為業務就緒的資料集。授予使用者對具體化視觀表的存取權，而不公開基礎來源資料表，簡化安全管理，同時授權自助式分析。
+ **最佳化機器學習的功能工程** – 定義實作 ML 模型功能轉換的具體化視觀表。自動重新整理功能可確保功能存放區在來源資料演進時保持最新狀態，而增量重新整理可將運算成本降至最低。
+ **實作有效率的資料共用** – 建立具體化視觀表，以篩選和轉換特定消費者的資料。使用 在帳戶和區域之間共用具體化視觀表 AWS Lake Formation，無需重複資料，同時保持集中式控管。

## 重要概念
<a name="materialized-views-key-concepts"></a>

### 自動重新整理
<a name="materialized-views-automatic-refresh"></a>

自動重新整理是持續監控來源資料表並根據您定義的排程更新具體化視觀表的功能。當您建立具體化視觀表時，您可以使用以時間為基礎的排程來指定重新整理頻率，間隔頻率為一小時。 AWS Glue Data Catalog 使用受管 Spark 運算基礎設施在背景執行重新整理操作，透明地處理變更偵測和增量更新的所有層面。

當來源資料在重新整理間隔之間變更時，具體化視觀表會暫時過時。直接存取具體化檢視的查詢可能會傳回過期的結果，直到下一次排定的重新整理完成為止。對於需要立即存取最新資料的案例，您可以使用 `REFRESH MATERIALIZED VIEW` SQL 命令執行手動重新整理。

### 增量重新整理
<a name="materialized-views-incremental-refresh"></a>

增量重新整理是一種最佳化技術，只會處理自上次重新整理後在來源資料表中變更的資料，而不是重新計算整個具體化視觀表。 AWS Glue Data Catalog 利用 Apache Iceberg 的中繼資料層，有效率地追蹤來源資料表的變更，並判斷具體化視觀表的哪些部分需要更新。

相較於完整重新整理操作，此方法可大幅降低運算成本和重新整理持續時間，尤其是在重新整理週期之間只有少量資料變更的大型資料集。增量重新整理機制會自動運作；您不需要撰寫自訂邏輯來偵測或處理變更的資料。

### 自動查詢重寫
<a name="materialized-views-automatic-query-rewrite"></a>

自動查詢重寫是 Spark 引擎跨 Amazon Athena、Amazon EMR 和 提供的查詢最佳化功能 AWS Glue。當您對基礎資料表執行查詢時，Spark 最佳化工具會分析您的查詢計畫，並自動判斷可用的具體化檢視是否可以更有效率地滿足查詢。如果存在適當的具體化視觀表，最佳化工具會透明地重寫查詢，以使用預先計算的結果，而不是處理基礎資料表。

此最佳化無需變更應用程式程式碼或查詢陳述式。Spark 最佳化工具可確保自動查詢重寫僅適用於具體化視觀表為最新版本，並可產生準確的結果。如果具體化視觀表過時或不符合查詢需求，最佳化工具會根據基底資料表執行原始查詢計劃，並優先考慮效能的正確性。

### 檢視定義者角色
<a name="materialized-views-view-definer-role"></a>

具體化視觀表會根據建立視觀表的 IAM 角色許可運作，稱為視觀表定義者角色。定義者角色必須具有具體化檢視定義中參考的所有基礎資料表的讀取存取權，並在目標資料庫上建立資料表許可。當 Data Catalog AWS Glue 重新整理具體化視觀表時，它會擔任定義者角色來存取來源資料表並寫入更新的結果。

此安全模型可讓您授予使用者具體化視觀表的存取權，而無需授予他們基礎來源資料表的直接許可。如果檢視定義者角色無法存取任何基礎資料表，後續重新整理操作將會失敗，直到許可還原為止。

## 具體化視觀表的許可
<a name="materialized-views-permissions"></a>

若要建立和管理具體化視觀表，您必須設定 AWS Lake Formation 許可。建立具體化檢視的 IAM 角色 （定義者角色） 需要來源資料表和目標資料庫的特定許可。

### 定義者角色的必要許可
<a name="materialized-views-required-permissions-definer-role"></a>

定義者角色必須具有下列 Lake Formation 許可：
+ 在來源資料表上 – 沒有資料列、資料欄或儲存格篩選條件的 SELECT 或 ALL 許可
+ 在目標資料庫上 – CREATE\$1TABLE 許可
+ 在 AWS Glue 資料目錄上 – GetTable 和 CreateTable API 許可

當您建立具體化檢視時，定義者角色的 ARN 會存放在檢視定義中。 AWS Glue Data Catalog 會在執行自動重新整理操作時擔任此角色。如果定義者角色無法存取來源資料表，重新整理操作將會失敗，直到許可還原為止。

### AWS Glue 任務的 IAM 許可
<a name="materialized-views-iam-permissions-glue-jobs"></a>

 AWS Glue 任務的 IAM 角色需要下列許可：

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "glue:GetCatalog",
                "glue:GetCatalogs",
                "glue:GetTable",
                "glue:GetTables",
                "glue:CreateTable",
                "glue:UpdateTable",
                "glue:DeleteTable",
                "glue:GetDatabase",
                "glue:GetDatabases",
                "cloudwatch:PutMetricData"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:DeleteObject"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": [
                "arn:aws:logs:*:*:*:/aws-glue/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "lakeformation:GetDataAccess"
            ],
            "Resource": "*"
        }
    ]
}
```

您用於具體化檢視自動重新整理的角色必須具有角色的 iam：PassRole 許可。

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "iam:PassRole"
      ],
      "Resource": [
        "arn:aws:iam::111122223333:role/materialized-view-role-name"
      ]
    }
  ]
}
```

若要讓 Glue 為您自動重新整理具體化視觀表，角色也必須具有下列信任政策，讓服務能夠擔任該角色。

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "glue.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

如果具體化檢視存放在 S3 資料表儲存貯體中，您也需要將下列許可新增至角色。

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3tables:PutTableMaintenanceConfiguration"
      ],
      "Resource": "arn:aws:s3tables:*:123456789012:*"
    }
  ]
}
```

### 授予具體化視觀表的存取權
<a name="materialized-views-granting-access"></a>

若要授予其他使用者查詢具體化視觀表的存取權，請使用 AWS Lake Formation 授予具體化視觀表的 SELECT 許可。使用者可以查詢具體化視觀表，而不需要直接存取基礎來源資料表。

如需設定 Lake Formation 許可的詳細資訊，請參閱《 AWS Lake Formation 開發人員指南》中的授予和撤銷 Data Catalog 資源的許可。

## 建立和管理具體化視觀表
<a name="materialized-views-creating-managing"></a>

您可以使用 Spark 引擎中的 `CREATE MATERIALIZED VIEW` SQL 陳述式建立具體化視觀表。檢視定義會指定定義轉換邏輯的 SQL 查詢、目標資料庫和資料表名稱，以及選用的重新整理組態。您可以定義複雜的轉換，包括彙總、跨多個資料表的聯結、篩選條件和視窗函數。

```
CREATE MATERIALIZED VIEW sales_summary
AS
SELECT 
    region,
    product_category,
    SUM(sales_amount) as total_sales,
    COUNT(DISTINCT customer_id) as unique_customers
FROM sales_transactions
WHERE transaction_date >= current_date - interval '90' day
GROUP BY region, product_category;
```

若要設定自動重新整理，請在檢視定義中包含重新整理排程：

```
CREATE MATERIALIZED VIEW sales_summary
SCHEDULE REFRESH EVERY 1 HOUR
AS
SELECT region, product_category, SUM(sales_amount) as total_sales
FROM sales_transactions
GROUP BY region, product_category;
```

您可以隨時使用 `REFRESH MATERIALIZED VIEW`命令手動重新整理具體化視觀表：

```
REFRESH MATERIALIZED VIEW sales_summary;
```

若要修改現有具體化視觀表的重新整理排程，請使用 `ALTER MATERIALIZED VIEW`陳述式：

```
ALTER MATERIALIZED VIEW sales_summary
ADD SCHEDULE REFRESH EVERY 2 HOURS;
```

### 巢狀具體化視觀表
<a name="materialized-views-nested"></a>

您可以建立具體化視觀表，將其他具體化視觀表參考為基礎資料表，以啟用多階段資料轉換。當您建立巢狀具體化視觀表時， AWS Glue Data Catalog 會追蹤相依性，並自動透過具體化視觀表階層傳播更新。當基礎具體化視觀表重新整理時，所有依賴該視觀表的下游具體化視觀表都會隨之更新。

此功能可讓您將複雜的轉換分解為邏輯階段，改善可維護性，並根據資料新鮮度需求選擇性重新整理轉換層。

## 儲存和資料存取
<a name="materialized-views-storage-access"></a>

具體化視觀表會將預先計算的結果儲存為 S3 Tables 儲存貯體中的 Apache Iceberg 資料表，或 AWS 帳戶中的一般用途 S3 儲存貯體。 AWS Glue Data Catalog 透過 S3 Tables 的自動化最佳化功能，管理 Iceberg 資料表維護的所有層面，包括壓縮和快照保留。

由於具體化視觀表會儲存為 Iceberg 資料表，因此您可以直接從任何 Iceberg 相容引擎讀取，包括 Amazon Athena、Amazon Redshift 和第三方分析平台。此多引擎可存取性可確保您的預先計算資料在整個分析生態系統中保持可存取，而不會進行資料重複或格式轉換。

## 與 AWS Lake Formation 許可整合
<a name="materialized-views-lake-formation"></a>

您可以使用 AWS Lake Formation 來管理具體化視觀表的精細許可。檢視建立者會自動成為具體化檢視的擁有者，並且可以使用 AWS Lake Formation具名資源方法或 LF 標籤授予其他使用者或角色許可。

當您授予使用者具體化檢視的`SELECT`許可時，他們可以查詢預先計算的結果，而不需要存取基礎來源資料表。此安全模型可簡化資料存取管理，並可讓您實作最低權限原則，讓使用者只能存取所需的特定資料轉換。

您可以使用 AWS Lake Formation跨 AWS 帳戶共用功能，跨帳戶、 AWS 組織和組織單位共用具體化視觀表。您也可以使用資源連結跨 AWS 區域存取具體化視觀表，透過分散式資料存取實現集中式資料控管。

## 監控與除錯
<a name="materialized-views-monitoring-debugging"></a>

 AWS Glue Data Catalog 會將所有具體化檢視重新整理操作和相關聯的指標發佈至 Amazon CloudWatch。您可以透過 CloudWatch 指標監控重新整理開始時間、結束時間、持續時間、處理的資料磁碟區和重新整理狀態。當重新整理操作失敗時，會在 CloudWatch Logs 中擷取錯誤訊息和診斷資訊。

您可以設定 CloudWatch 警示，以在重新整理任務超過預期持續時間或重複失敗時接收通知。 AWS Glue Data Catalog 也會針對成功和失敗的重新整理執行，將變更事件發佈至 ，讓您能夠將具體化視觀表操作整合至更廣泛的工作流程自動化。

若要檢查具體化檢視的目前狀態，請使用 `DESCRIBE MATERIALIZED VIEW` SQL 命令，這會傳回中繼資料，包括過時狀態、上次重新整理時間戳記和重新整理排程組態。

## 管理重新整理任務
<a name="materialized-views-managing-refresh-jobs"></a>

### 開始手動重新整理
<a name="materialized-views-manual-refresh"></a>

在排程間隔之外觸發立即重新整理。

必要許可：用於進行 API 呼叫的 AWS 登入資料必須具有具體化檢視的`glue:GetTable`許可。

對於 S3 Tables Catalog：

```
aws glue start-materialized-view-refresh-task-run \
    --catalog-id <ACCOUNT_ID>:s3tablescatalog/<CATALOG_NAME> \
    --database-name <DATABASE_NAME> \
    --table-name <MV_TABLE_NAME>
```

對於根目錄：

```
aws glue start-materialized-view-refresh-task-run \
    --catalog-id <ACCOUNT_ID> \
    --database-name <DATABASE_NAME> \
    --table-name <MV_TABLE_NAME>
```

### 檢查重新整理狀態
<a name="materialized-views-checking-refresh-status"></a>

取得特定重新整理任務的狀態：

```
aws glue get-materialized-view-refresh-task-run \
    --catalog-id <CATALOG_ID> \
    --materialized-view-refresh-task-run-id <TASK_RUN_ID>
```

### 列出重新整理歷史記錄
<a name="materialized-views-listing-refresh-history"></a>

檢視具體化檢視的所有重新整理任務：

```
aws glue list-materialized-view-refresh-task-runs \
    --catalog-id <CATALOG_ID> \
    --database-name <DATABASE_NAME> \
    --table-name <MV_TABLE_NAME>
```

**注意**  
將 `<ACCOUNT_ID>:s3tablescatalog/<CATALOG_NAME>` 用於 S3 資料表，或將 `<ACCOUNT_ID>`用於根目錄。

### 停止執行中的重新整理
<a name="materialized-views-stopping-refresh"></a>

取消進行中重新整理任務：

```
aws glue stop-materialized-view-refresh-task-run \
    --catalog-id <CATALOG_ID> \
    --database-name <DATABASE_NAME> \
    --table-name <MV_TABLE_NAME>
```

## 監控和疑難排解
<a name="materialized-views-monitoring-troubleshooting"></a>

監控具體化視觀表重新整理任務的方法有三種：

### CloudWatch Metrics
<a name="materialized-views-cloudwatch-metrics"></a>

在 CloudWatch 中檢視所有具體化檢視重新整理任務的彙總指標：

可用的指標：
+ AWS/Glue 命名空間與維度：
  + CatalogId：您的目錄識別符
  + DatabaseName：包含具體化視觀表的資料庫
  + TableName：具體化檢視名稱
  + TaskType：設定為 "MaterializedViewRefresh"

在主控台中檢視：

1. 導覽至 CloudWatch 主控台 → 指標

1. Select AWS/Glue 命名空間

1. 依維度篩選： CatalogId、DatabaseName、TableName、TaskType

1. 檢視任務成功、失敗和持續時間的指標

CloudWatch 指標查詢範例：

```
{AWS/Glue,CatalogId,DatabaseName,TableName,TaskType} MaterializedViewRefresh
```

使用 AWS CLI：

```
aws cloudwatch get-metric-statistics \
    --namespace AWS/Glue \
    --metric-name <MetricName> \
    --dimensions Name=CatalogId,Value=<CATALOG_ID> \
                 Name=DatabaseName,Value=<DATABASE_NAME> \
                 Name=TableName,Value=<TABLE_NAME> \
                 Name=TaskType,Value=MaterializedViewRefresh \
    --start-time <START_TIME> \
    --end-time <END_TIME> \
    --period 3600 \
    --statistics Sum \
    --region <REGION>
```

### CloudWatch Logs
<a name="materialized-views-cloudwatch-logs"></a>

檢視個別重新整理任務執行的詳細執行日誌：

日誌群組： `/aws-glue/materialized-views/<task_run_id>`

其中 `<task_run_id>`是 UUID （例如 abc12345-def6-7890-ghij-klmnopqrstuv)。

檢視日誌：

```
# List log streams for a task run
aws logs describe-log-streams \
    --log-group-name /aws-glue/materialized-views/<TASK_RUN_ID> \
    --region <REGION>

# Get log events
aws logs get-log-events \
    --log-group-name /aws-glue/materialized-views/<TASK_RUN_ID> \
    --log-stream-name <LOG_STREAM_NAME> \
    --region <REGION>
```

在 CloudWatch 主控台中：

1. 導覽至 CloudWatch → 日誌群組

1. 搜尋 /aws-glue/materialized-views/

1. 選取具有任務執行 ID 的日誌群組

1. 檢視詳細的執行日誌、錯誤和 Spark 任務輸出

### 通知
<a name="materialized-views-eventbridge"></a>

訂閱事件以取得有關重新整理任務狀態變更的即時通知：

可用的事件類型：
+ Glue 具體化檢視重新整理任務已啟動
+ Glue 具體化檢視重新整理任務成功
+ Glue 具體化檢視重新整理任務失敗
+ Glue 具體化檢視自動重新整理調用失敗

建立 規則：

```
aws events put-rule \
    --name materialized-view-refresh-notifications \
    --event-pattern '{
        "source": ["aws.glue"],
        "detail-type": [
            "Glue Materialized View Refresh Task Started",
            "Glue Materialized View Refresh Task Succeeded",
            "Glue Materialized View Refresh Task Failed",
            "Glue Materialized View Auto-Refresh Invocation Failure"
        ]
    }' \
    --region <REGION>
```

新增目標 （例如 SNS 主題）：

```
aws events put-targets \
    --rule materialized-view-refresh-notifications \
    --targets "Id"="1","Arn"="arn:aws:sns:<REGION>:<ACCOUNT_ID>:<TOPIC_NAME>" \
    --region <REGION>
```

### 檢視重新整理狀態
<a name="materialized-views-refresh-status"></a>

使用 AWS Glue API 檢查具體化檢視重新整理任務的狀態：

```
aws glue get-materialized-view-refresh-task-run \
    --catalog-id <CATALOG_ID> \
    --materialized-view-refresh-task-run-id <TASK_RUN_ID> \
    --region <REGION>
```

或列出所有最近的重新整理執行：

```
aws glue list-materialized-view-refresh-task-runs \
    --catalog-id <CATALOG_ID> \
    --database-name <DATABASE_NAME> \
    --table-name <MV_TABLE_NAME> \
    --region <REGION>
```

這會顯示：
+ 上次重新整理時間
+ 重新整理狀態 （成功、失敗、執行中、已停止）
+ 任務執行 ID
+ 錯誤訊息 （如果失敗）

常見重新整理狀態：
+ 執行中：重新整理任務目前正在執行
+ SUCCEEDED：重新整理成功完成
+ 失敗：重新整理發生錯誤
+ 已停止：手動取消重新整理

故障診斷失敗的重新整理：

如果重新整理失敗，請檢查：

1. IAM 許可：確保定義者角色可存取所有基礎資料表和具體化視觀表位置

1. 基礎資料表可用性：確認所有參考的資料表都存在且可供存取

1. 查詢有效性：確認 SQL 查詢對 Spark SQL 方言有效

1. 資源限制：檢查是否已達到帳戶的並行重新整理限制

使用 GetMaterializedViewRefreshTaskRun API 擷取詳細的錯誤訊息。

## 考量和限制
<a name="materialized-views-considerations-limitations"></a>
+ 具體化視觀表只能參考在 AWS Glue 資料目錄中註冊為基礎資料表的 Apache Iceberg 資料表。
+ 檢視建立和自動查詢重寫僅適用於 Amazon Athena、Amazon EMR 和 AWS Glue (5.1 版） 的 Apache Spark 3.5.6 版及更新版本中的 Spark 引擎。
+ 具體化視觀表最終與基礎資料表一致。在重新整理時段期間，直接存取具體化檢視的查詢可能會傳回過期的資料。若要立即存取目前的資料，請執行手動重新整理。
+ 最短自動重新整理間隔為一小時。對於需要更頻繁更新的使用案例，請使用 `REFRESH MATERIALIZED VIEW`命令以程式設計方式執行手動重新整理。
+ 查詢重寫會優先考慮效能的正確性。如果具體化視觀表過時或無法準確滿足查詢要求，Spark 引擎會對基底資料表執行原始查詢。

# 在 Lake Formation 中使用工作流程匯入資料
<a name="workflows"></a>

使用 AWS Lake Formation，您可以使用*工作流程*匯入資料。工作流程會定義將資料匯入資料湖的資料來源和排程。這是AWS Glue爬蟲程式、任務和觸發程序的容器，用於協調程序以載入和更新資料湖。

**Topics**
+ [Lake Formation 中的藍圖和工作流程](workflows-about.md)
+ [建立工作流程](workflows-creating.md)
+ [執行工作流程](workflows-running.md)

# Lake Formation 中的藍圖和工作流程
<a name="workflows-about"></a>

工作流程會封裝複雜的多工作業擷取、轉換和載入 (ETL) 活動。工作流程會產生 AWS Glue 爬蟲程式、任務和觸發程序，以協調資料的載入和更新。Lake Formation 會以單一實體的形式執行和追蹤工作流程。您可以設定工作流程以隨需或排程執行。

**注意**  
Spark parquet 寫入器不支援資料欄名稱中的特殊字元。這是寫入器本身的技術限制，而不是組態問題。

您在 Lake Formation 中建立的工作流程會在AWS Glue主控台中顯示為導向無環圖 (DAG)。每個 DAG 節點都是任務、爬蟲程式或觸發程序。若要監控進度和疑難排解，您可以追蹤工作流程中每個節點的狀態。

當 Lake Formation 工作流程完成時，執行工作流程的使用者會獲得工作流程所建立之 Data Catalog 資料表的 Lake Formation `SELECT`許可。

您也可以在 中建立工作流程AWS Glue。不過，由於 Lake Formation 可讓您從藍圖建立工作流程，因此在 Lake Formation 中建立工作流程更為簡單且自動化。Lake Formation 提供下列類型的藍圖：
+ **資料庫快照** – 從 JDBC 來源將資料從所有資料表載入或重新載入至資料湖。您可以根據排除模式從來源排除一些資料。
+ **增量資料庫** – 根據先前設定的書籤，僅從 JDBC 來源將新資料載入資料湖。您可以在 JDBC 來源資料庫中指定要包含的個別資料表。對於每個資料表，您可以選擇書籤資料欄和書籤排序順序，以追蹤先前載入的資料。第一次針對一組資料表執行增量資料庫藍圖時，工作流程會從資料表載入所有資料，並為下一個增量資料庫藍圖執行設定書籤。因此，您可以使用增量資料庫藍圖而非資料庫快照藍圖來載入所有資料，前提是您將資料來源中的每個資料表指定為參數。
+ **日誌檔案** – 從日誌檔案來源大量載入資料 AWS CloudTrail，包括 Elastic Load Balancing 日誌和 Application Load Balancer 日誌。

使用下表來協助決定是否要使用資料庫快照或增量資料庫藍圖。


| 使用資料庫快照時... | 在下列情況下使用增量資料庫... | 
| --- | --- | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/lake-formation/latest/dg/workflows-about.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/lake-formation/latest/dg/workflows-about.html)  | 

**注意**  
使用者無法編輯 Lake Formation 建立的藍色列印和工作流程。

# 建立工作流程
<a name="workflows-creating"></a>

開始之前，請確定您已將必要的資料許可和資料位置許可授予角色 `LakeFormationWorkflowRole`。這是為了讓工作流程可以在 Data Catalog 中建立中繼資料表，並將資料寫入 Amazon S3 中的目標位置。如需詳細資訊，請參閱[（選用） 建立工作流程的 IAM 角色](initial-lf-config.md#iam-create-blueprint-role)及[Lake Formation 許可概觀](lf-permissions-overview.md)。

**注意**  
Lake Formation 使用 `GetTemplateInstance`、 `GetTemplateInstances`和 `InstantiateTemplate`操作從藍圖建立工作流程。這些操作不可公開使用，且僅用於內部代表您建立資源。您會收到用於建立工作流程的 CloudTrail 事件。

**從藍圖建立工作流程**

1. 在 https：//[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/) 開啟 AWS Lake Formation 主控台。以資料湖管理員或具有資料工程師許可的使用者身分登入。如需詳細資訊，請參閱[Lake Formation 角色和 IAM 許可參考](permissions-reference.md)。

1. 在導覽窗格中，選擇**藍圖**，然後選擇**使用藍圖**。

1. 在**使用藍圖**頁面上，選擇圖磚以選取藍圖類型。

1. 在**匯入來源**下，指定資料來源。

   如果您是從 JDBC 來源匯入，請指定下列項目：
   + ****資料庫連線**** – 從清單中選擇連線。使用 AWS Glue主控台建立其他連線。連線中的 JDBC 使用者名稱和密碼會決定工作流程可存取的資料庫物件。
   + ****來源資料路徑**** – 輸入 *<database>*/*<schema>*/*<table>* 或 *<database>*/*<table>*，視資料庫產品而定。Oracle 資料庫和 MySQL 不支援路徑中的結構描述。您可以用百分比 (%) 字元取代 *<schema>* 或 *<table>*。例如，對於系統識別符 (SID) 為 的 Oracle 資料庫`orcl`，輸入 `orcl/%` 以匯入連線中名為 之使用者可存取的所有資料表。
**重要**  
此欄位區分大小寫。如果任何元件的案例不相符，工作流程將會失敗。

     如果您指定 MySQL 資料庫， AWS Glue ETL 預設會使用 Mysql5 JDBC 驅動程式，因此原生不支援 MySQL8。您可以編輯 ETL 任務指令碼來使用`customJdbcDriverS3Path`參數，如《 *AWS Glue 開發人員指南*》中的 [JDBC connectionType 值](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-connect.html#aws-glue-programming-etl-connect-jdbc)中所述，以使用支援 MySQL8 的不同 JDBC 驅動程式。

   如果您是從日誌檔案匯入 ，請確定您為工作流程指定的角色 (「工作流程角色」) 具有存取資料來源所需的 IAM 許可。例如，若要匯入 AWS CloudTrail 日誌，使用者必須具有 `cloudtrail:DescribeTrails`和 `cloudtrail:LookupEvents`許可，才能在建立工作流程時查看 CloudTrail 日誌清單，而且工作流程角色必須具有 Amazon S3 中 CloudTrail 位置的許可。

1. 執行以下任意一項：
   + 對於**資料庫快照**藍圖類型，選擇性地指定一或多個排除模式來識別要匯入的資料子集。這些排除模式是 Unix 樣式`glob`模式。它們會儲存為工作流程所建立資料表的屬性。

     如需可用排除模式的詳細資訊，請參閱《 *AWS Glue 開發人員指南*》中的[包含和排除模式](https://docs.aws.amazon.com/glue/latest/dg/define-crawler.html#crawler-data-stores-exclude)。
   + 針對**增量資料庫**藍圖類型，指定下列欄位。為每個要匯入的資料表新增一列。  
**資料表名稱**  
要匯入的資料表。必須是全部小寫。  
**書籤索引鍵**  
定義書籤索引鍵的資料欄名稱逗號分隔清單。如果為空白，則會使用主索引鍵來判斷新資料。每個資料欄的案例必須符合資料來源中定義的案例。  
主索引鍵只有在循序增加或減少 （沒有間隙） 時，才符合預設書籤索引鍵的資格。如果您想要使用主索引鍵做為書籤索引鍵且具有間隙，則必須將主索引鍵欄命名為書籤索引鍵。  
**書籤順序**  
當您選擇**遞增**時，值大於書籤值的資料列會識別為新資料列。當您選擇**遞減**時，值小於書籤值的資料列會識別為新資料列。  
**分割結構**  
（選用） 分割索引鍵資料欄的清單，以斜線 (/) 分隔。範例：` year/month/day`。  
![\[主控台的增量資料區段包含下列欄位：資料表名稱、書籤索引鍵、書籤順序、分割方案。您可以新增或移除資料列，其中每一列適用於不同的資料表。\]](http://docs.aws.amazon.com/zh_tw/lake-formation/latest/dg/images/incremental-data.png)

     如需詳細資訊，請參閱《 *AWS Glue 開發人員指南*》中的[使用任務書籤追蹤已處理的資料](https://docs.aws.amazon.com/glue/latest/dg/monitor-continuations.html)。

1. 在**匯入目標**下，指定目標資料庫、目標 Amazon S3 位置和資料格式。

   確定工作流程角色對資料庫和 Amazon S3 目標位置具有必要的 Lake Formation 許可。
**注意**  
目前，藍圖不支援加密目標的資料。

1. 選擇匯入頻率。

   您可以使用**自訂**選項指定`cron`表達式。

1. 在**匯入選項**下：

   1. 輸入工作流程名稱。

   1. 針對角色，選擇`LakeFormationWorkflowRole`您在 中建立的角色 [（選用） 建立工作流程的 IAM 角色](initial-lf-config.md#iam-create-blueprint-role)。

   1. 選擇性地指定資料表字首。字首會加上工作流程建立的 Data Catalog 資料表名稱。

1. 選擇**建立**，然後等待主控台報告工作流程已成功建立。
**提示**  
您是否收到下列錯誤訊息？  
`User: arn:aws:iam::<account-id>:user/<username> is not authorized to perform: iam:PassRole on resource:arn:aws:iam::<account-id>:role/<rolename>...`  
若是如此，請檢查您是否在所有政策中將 *<account-id>* 取代為有效的 AWS 帳號。

**另請參閱：**  
[Lake Formation 中的藍圖和工作流程](workflows-about.md)

# 執行工作流程
<a name="workflows-running"></a>

您可以使用 Lake Formation 主控台、AWS Glue主控台或AWS Glue命令列界面 (AWS CLI) 或 API 來執行工作流程。

**執行工作流程 (Lake Formation 主控台）**

1. 在 https：//[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/) 開啟 AWS Lake Formation 主控台。以資料湖管理員或具有資料工程師許可的使用者身分登入。如需詳細資訊，請參閱[Lake Formation 角色和 IAM 許可參考](permissions-reference.md)。

1. 在導覽窗格中，選擇 **Blueprints (藍圖)**。

1. 在**藍圖**頁面上，選取工作流程。然後在**動作**功能表上，選擇**開始**。

1. 當工作流程執行時，請在**上次執行狀態**欄中檢視其進度。偶爾選擇重新整理按鈕。

   狀態會從 **RUNNING** 到 **Discovering**、**匯入**，再到 **COMPLETED**。

   當工作流程完成時：
   + Data Catalog 有新的中繼資料表。
   + 您的資料會擷取至資料湖。

   如果工作流程失敗，請執行下列動作：

   1. 選取工作流程。選擇**動作**，然後選擇**檢視圖形**。

      工作流程會在 AWS Glue主控台中開啟。

   1. 確認已選取工作流程，然後選擇 **History (歷史記錄)** 標籤。

   1. 在**歷史記錄**下，選取最近的執行，然後選擇**檢視執行詳細資訊**。

   1. 在動態 （執行時間） 圖形中選取失敗的任務或爬蟲程式，然後檢閱錯誤訊息。失敗的節點為紅色或黃色。

**另請參閱：**  
[Lake Formation 中的藍圖和工作流程](workflows-about.md)