

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

# 使用屬性型存取控制授予許可
<a name="abac-granting-permissions"></a>

本主題說明您需要遵循的步驟，以授予 Data Catalog 資源的屬性型存取許可。您可以使用 Lake Formation 主控台或 AWS 命令列界面 (AWS CLI)。

## 使用 ABAC 授予許可 (AWS 管理主控台)
<a name="w2aac15b9c31c19b5b1"></a>

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

1. 執行以下任意一項：
   + 在導覽窗格中的**許可**下，選擇**資料湖許可**。然後選擇**授予**。
   + 在導覽窗格中，選擇資料**目錄**下的目錄。 ****然後，從**許可**下**的動作**選單中選擇目錄物件 （目錄、資料庫、資料表和資料篩選條件），然後選擇**授予**。

1. 在**授予許可**頁面上，**依屬性選擇委託人**。

1. 指定屬性索引鍵和值 (s)。如果您選擇多個值，則會使用 `OR`運算子建立屬性表達式。這表示如果指派給 IAM 角色或使用者配對的任何屬性標籤值，該角色/使用者會取得資源的存取許可。

   如果您指定多個屬性標籤，則會使用 `AND`運算子建立屬性表達式。只有在屬性表達式中每個屬性標籤的 IAM 角色/使用者獲指派相符標籤時，才會授予 Data Catalog 資源的主體許可。

   檢閱主控台中顯示的產生的 Cedar 政策表達式。  
![在授予許可對話方塊中，會建立屬性表達式。](http://docs.aws.amazon.com/zh_tw/lake-formation/latest/dg/images/abac-grant-permissions.png)

1. 選擇許可範圍。如果承授者屬於外部帳戶，請選擇**外部帳戶**，然後輸入 AWS 帳戶 ID。

1. 接著，選擇 Data Catalog 帳戶或在外部帳戶中。您必須對資源擁有對應的可授予許可，才能成功完成許可授予。

1. 指定您要允許具有相符屬性之主體 （使用者或角色） 執行的動作。系統會將存取權授予已指派標籤的 IAM 實體，以及至少符合其中一個指定屬性表達式的值。在 主控台中檢閱 Cedar 政策表達式。如需 Cedar 的詳細資訊，請參閱[什麼是 Cedar？ \| Cedar 政策語言參考GuideLink](https://docs.cedarpolicy.com/)。

1. 接下來，選擇 Data Catalog 資源以授予存取權。您可以定義各種 Data Catalog 資源的這些許可，包括目錄、資料庫、資料表和資料篩選條件。

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

   此方法可讓您根據屬性控制存取，確保只有具有適當標籤的使用者或角色才能對指定的資源執行特定動作。

## 使用 ABAC 授予許可 (AWS CLI)
<a name="abac-granting-permissions-cli"></a>

 下列範例顯示必須滿足才能接收資源上所有可用許可的屬性表達式。您也可以指定個別許可，例如 `Select`、 `Describe`或 `Drop`。表達式使用 Cedar 政策表達式。如需 Cedar 的詳細資訊，請參閱[什麼是 Cedar？ \| Cedar 政策語言參考GuideLink](https://docs.cedarpolicy.com/)。

 此條件會檢查 IAM 主體是否具有`department`標籤，且`department`標籤值是否等於 `sales`。

```
aws lakeformation grant-permissions 
--principal '{"DataLakePrincipalIdentifier": "{{111122223333}}:IAMPrincipals"}' \
--resource '{"Database": {"CatalogId": {{111122223333}}, "Name": "{{abac-db}}"}}' \
--permissions {{ALL}} \
--condition '{"Expression": "context.iam.principalTags.hasTag(\"{{department}}\") \
   && context.iam.principalTags.getTag(\"{{department}}\") == \"{{sales}}\""}'
```