

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

# 搭配 DynamoDB 使用屬性型存取控制
<a name="attribute-based-access-control"></a>

[屬性型存取控制 (ABAC)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction_attribute-based-access-control.html) 是一種授權策略，可根據身分型政策或其他 AWS 政策中的[標籤條件](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Tagging.html)定義存取許可，例如資源型政策和組織 IAM 政策。您可以將標籤附加至 DynamoDB 資料表，系統會根據標籤式條件進行評估。資料表所關聯的索引會繼承您新增至該資料表的標籤。每個 DynamoDB 資料表最多可新增 50 個標籤。資料表中所有標籤支援的大小上限為 10 KB。如需有關標記 DynamoDB 資源及標記限制的詳細資訊，請參閱[在 DynamoDB 中標記資源](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Tagging.Operations.html)與 [DynamoDB 中的標記限制](Tagging.md#TaggingRestrictions)。

如需使用標籤控制 AWS 資源存取的詳細資訊，請參閱《IAM 使用者指南》中的下列主題：
+ [什麼是 ABAC AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction_attribute-based-access-control.html)
+ [使用標籤控制對 AWS 資源的存取](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html)

使用 ABAC，您可以為團隊與應用程式設定不同的存取層級，並以更少的政策在 DynamoDB 資料表上執行操作。您可以在 IAM 政策的[條件元素](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html)中指定標籤，以控制對 DynamoDB 資料表或索引的存取。這些條件決定 IAM 主體、使用者或角色對 DynamoDB 資料表與索引的存取層級。當 IAM 主體向 DynamoDB 提出存取請求時，系統會根據 IAM 政策中的標籤條件評估資源與身分的標籤。之後，僅在符合標籤條件時，該政策才會生效。這可讓您建立能實現以下任一條件的 IAM 政策：
+ *允許使用者僅管理具有標籤鍵`X`與值 `Y` 標籤的資源*。
+ *拒絕所有使用者存取具有標籤鍵 `X` 的資源*。

例如，您可以建立政策，僅允許使用者更新具有下列標籤鍵值對的資料表：`"environment": "staging"`。您可以使用 [aws：ResourceTag](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-resourcetag) 條件鍵，根據附加至該資料表的標籤來允許或拒絕存取。

您可以在建立政策時或稍後使用 AWS 管理主控台、 AWS API、 AWS Command Line Interface (AWS CLI)、 AWS SDK 或 包含屬性型條件 AWS CloudFormation。

下列範例允許在名為 `MusicTable` 的資料表上執行 [UpdateItem](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateItem.html) 動作，前提是該資料表具有名稱為 `environment`、值為 `production` 的標籤鍵值。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "dynamodb:UpdateItem"
      ],
      "Resource": "arn:aws:dynamodb:*:*:table/MusicTable",
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/environment": "production"
        }
      }
    }
  ]
}
```

------

**Topics**
+ [為什麼要使用 ABAC？](#why-use-abac)
+ [使用 DynamoDB 實作 ABAC 的條件鍵](#condition-keys-implement-abac)
+ [搭配 DynamoDB 使用 ABAC 的注意事項](#abac-considerations)
+ [在 DynamoDB 中啟用 ABAC](abac-enable-ddb.md)
+ [在 DynamoDB 資料表與索引中使用 ABAC](abac-implementation-ddb-tables.md)
+ [使用 ABAC 搭配 DynamoDB 資料表與索引的範例](abac-example-use-cases.md)
+ [疑難排解 DynamoDB 資料表與索引的常見 ABAC 錯誤](abac-troubleshooting.md)

## 為什麼要使用 ABAC？
<a name="why-use-abac"></a>
+ **更簡單的政策管理：**您可以減少使用的政策數量，因為不需為每個 IAM 主體建立不同的政策來定義其存取層級。
+ **可擴展的存取控制：**使用 ABAC 可讓存取控制更容易擴展，因為在建立新的 DynamoDB 資源時，無需更新政策。您可以使用標籤授權存取那些擁有與資源標籤相符標籤的 IAM 主體。您可以新增 IAM 主體或 DynamoDB 資源，套用適當的標籤，即可自動授予必要的權限，無需修改任何政策。
+ **細粒度權限管理：**在建立政策時，最佳實務是[授與最低權限](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege)。使用 ABAC，您可以為 IAM 主體建立標籤，並依據這些標籤授與符合的特定動作與資源的存取權限。
+ **與公司目錄對應：**您可以將標籤對應至公司目錄中的員工屬性，使存取控制政策與組織結構保持一致。

## 使用 DynamoDB 實作 ABAC 的條件鍵
<a name="condition-keys-implement-abac"></a>

您可以在 AWS 政策中使用下列條件索引鍵來控制 DynamoDB 資料表和索引的存取層級：
+ [aws:ResourceTag/tag-key](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-resourcetag)：根據 DynamoDB 資料表或索引上的標籤鍵值組是否與政策中的標籤鍵和值相符來控制存取。此條件鍵適用於所有針對現有資料表或索引運作的 API。

  這些 `dynamodb:ResourceTag` 條件的評估方式與資源未附加任何標籤時相同。
+ [aws:RequestTag/tag-key](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-requesttag)：可用於比較請求中傳遞的標籤鍵值組與政策中指定的標籤鍵值組。此條件鍵適用於在請求承載中包含標籤的 API。包含這些 API：[CreateTable](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_CreateTable.html) 與 [TagResource](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_TagResource.html)。
+ [aws:TagKeys](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-tagkeys)：用於比較請求中的標籤鍵與政策中指定的標籤鍵。此條件鍵適用於在請求承載中包含標籤的 API。相關 API 包含 `CreateTable`、`TagResource` 與 `UntagResource`。

## 搭配 DynamoDB 使用 ABAC 的注意事項
<a name="abac-considerations"></a>

當您將 ABAC 用於 DynamoDB 資料表或索引時，請注意以下事項：
+ DynamoDB Streams 不支援標籤與 ABAC。
+ DynamoDB 備份不支援標籤與 ABAC。若要在備份中使用 ABAC，建議您使用 [AWS Backup](https://docs.aws.amazon.com/aws-backup/latest/devguide/whatisbackup.html)。
+ 標籤不會在還原的資料表中保留。您必須先將標籤新增至還原的資料表，才能在政策中使用標籤式條件。