

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

# Amazon OpenSearch Serverless 的資料存取控制
<a name="serverless-data-access"></a>

透過 Amazon OpenSearch Serverless 中的資料存取控制，無論使用者的存取機制或網路來源為何，您都可讓使用者存取集合和索引。您可以提供 IAM 角色和 [SAML 身分](serverless-saml.md)的存取權。

您可以透過*資料存取政策*管理許可，這些政策套用至集合和索引資源。資料存取政策會自動將存取許可指派給符合特定模式的集合和索引，以協助您大規模管理集合。可將多個資料存取政策套用至單一資源。請注意，您必須擁有集合的資料存取政策，才能存取 OpenSearch Dashboards URL。

**Topics**
+ [資料存取政策與 IAM 政策比較](#serverless-data-access-vs-iam)
+ [設定資料存取政策所需的 IAM 許可](#serverless-data-access-permissions)
+ [政策語法](#serverless-data-access-syntax)
+ [支援的政策許可](#serverless-data-supported-permissions)
+ [OpenSearch Dashboards 上的範例資料集](#serverless-data-sample-index)
+ [建立資料存取政策 (主控台)](#serverless-data-access-console)
+ [建立資料存取政策 (AWS CLI)](#serverless-data-access-cli)
+ [檢視資料存取政策](#serverless-data-access-list)
+ [更新資料存取政策](#serverless-data-access-update)
+ [刪除資料存取政策](#serverless-data-access-delete)
+ [跨帳戶資料存取](#serverless-data-access-cross)

## 資料存取政策與 IAM 政策比較
<a name="serverless-data-access-vs-iam"></a>

資料存取政策在邏輯上與 AWS Identity and Access Management (IAM) 政策分開。IAM 許可會控制對[無伺服器 API 操作](https://docs.aws.amazon.com/opensearch-service/latest/ServerlessAPIReference/Welcome.html) (例如 `CreateCollection` 和 `ListAccessPolicies`) 的存取。資料存取政策會控制 OpenSearch Serverless 支援之 [OpenSearch 操作](#serverless-data-supported-permissions) (例如 `PUT <index>` 或 `GET _cat/indices`) 的存取。

控制資料存取政策 API 操作 (例如 `aoss:CreateAccessPolicy` 和 `aoss:GetAccessPolicy`，請參閱下一節所述) 存取的 IAM 許可不會影響資料存取政策中指定的許可。

例如，假設 IAM 政策拒絕使用者為 `collection-a` 建立資料存取政策，但允許其為所有集合 (`*`) 建立資料存取政策：

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Deny",
            "Action": [
                "aoss:CreateAccessPolicy"
            ],
            "Resource": "*",
            "Condition": {
                "StringLike": {
                    "aoss:collection": "collection-a"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "aoss:CreateAccessPolicy"
            ],
            "Resource": "*"
        }
    ]
}
```

------

如果使用者建立的資料存取政策允許*所有*集合 (`collection/*` 或 `index/*/*`) 的特定許可，則該政策將套用至所有集合，包括集合 A。

**重要**  
在資料存取政策中授予許可不足以存取 OpenSearch Serverless 集合中的資料。也必須將 IAM 許可`aoss:APIAccessAll`和 的存取權**授予相關聯的委託人`aoss:DashboardsAccessAll`。這兩個許可都授予集合資源的完整存取權，而 Dashboards 許可也提供 OpenSearch Dashboards 的存取權。如果委託人沒有這兩個 IAM 許可，則在嘗試將請求傳送至集合時，會收到 403 個錯誤。如需詳細資訊，請參閱[使用 OpenSearch API 操作](security-iam-serverless.md#security_iam_id-based-policy-examples-data-plane)。

## 設定資料存取政策所需的 IAM 許可
<a name="serverless-data-access-permissions"></a>

OpenSearch Serverless 的資料存取控制使用下列 IAM 許可。您可以指定 IAM 條件，將使用者限制為特定存取政策名稱。
+ `aoss:CreateAccessPolicy`：建立存取政策。
+ `aoss:ListAccessPolicies`：列出所有存取政策。
+ `aoss:GetAccessPolicy`：請參閱有關特定存取政策的詳細資訊。
+ `aoss:UpdateAccessPolicy`：修改存取政策。
+ `aoss:DeleteAccessPolicy`：刪除存取政策。

下列身分型存取政策讓使用者可以檢視所有存取政策，以及更新包含資源模式 `collection/logs` 的政策。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "aoss:ListAccessPolicies",
                "aoss:GetAccessPolicy"
            ],
            "Effect": "Allow",
            "Resource": "*"
        },
        {
            "Action": [
                "aoss:UpdateAccessPolicy"
            ],
            "Effect": "Allow",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aoss:collection": [
                        "logs"
                    ]
                }
            }
        }
    ]
}
```

------

**注意**  
此外，OpenSearch Serverless 需要集合資源的 `aoss:APIAccessAll`和 `aoss:DashboardsAccessAll`許可。如需詳細資訊，請參閱[使用 OpenSearch API 操作](security-iam-serverless.md#security_iam_id-based-policy-examples-data-plane)。

## 政策語法
<a name="serverless-data-access-syntax"></a>

資料存取政策包含一組規則，每個規則均包含下列元素：


| Element | Description | 
| --- | --- | 
| ResourceType | 許可套用的資源類型 (集合或索引)。別名和範本許可位於集合層級，而建立、修改和搜尋資料的許可則位於索引層級。如需詳細資訊，請參閱 [Supported policy permissions](#serverless-data-supported-permissions) (支援的政策許可)。 | 
| Resource | 資源名稱和/或模式的清單。模式是字首後接萬用字元 (\$1)，允許關聯的許可套用至多個資源。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/opensearch-service/latest/developerguide/serverless-data-access.html) | 
| Permission | 為指定資源授予的許可清單。(如需許可與其允許之 API 操作的完整清單，請參閱 [支援的 OpenSearch API 操作與許可](serverless-genref.md#serverless-operations))。 | 
| Principal | 要授予存取權的一個或多個主體清單。主體可以是 IAM 角色 ARN，也可以是 SAML 身分。這些主體必須在目前的 AWS 帳戶內。資料存取政策不直接支援跨帳戶存取，但您可以在政策中包含角色，而來自不同 的使用者 AWS 帳戶 可以在集合擁有帳戶中擔任該角色。如需詳細資訊，請參閱[跨帳戶資料存取](#serverless-data-access-cross)。 | 

下列範例政策會將別名和範本許可授予名為 `autopartsinventory` 的集合以及任何以字首 `sales*` 開頭的集合。同時也會將讀取和寫入許可授予 `autopartsinventory` 集合中的所有索引，以及以字首 `orders*` 開頭的 `salesorders` 集合中的任何索引。

```
[
   {
      "Description": "Rule 1",
      "Rules":[
         {
            "ResourceType":"collection",
            "Resource":[
               "collection/autopartsinventory",
               "collection/sales*"
            ],
            "Permission":[
               "aoss:CreateCollectionItems",
               "aoss:UpdateCollectionItems",
               "aoss:DescribeCollectionItems"
            ]
         },
         {
            "ResourceType":"index",
            "Resource":[
               "index/autopartsinventory/*",
               "index/salesorders/orders*"
            ],
            "Permission":[
               "aoss:*"
            ]
         }
      ],
      "Principal":[
         "arn:aws:iam::123456789012:user/Dale",
         "arn:aws:iam::123456789012:role/RegulatoryCompliance",
         "saml/123456789012/myprovider/user/Annie",
         "saml/123456789012/anotherprovider/group/Accounting"
      ]
   }
]
```

您無法在政策中明確拒絕存取。因此，所有政策許可均可附加。例如，若一個政策授予使用者 `aoss:ReadDocument`，而另一個政策授予 `aoss:WriteDocument`，則使用者將同時擁有*兩個*許可。如果第三個政策授予相同的使用者 `aoss:*`，則使用者可以對關聯的索引執行*所有*動作；限制較多的許可不會覆寫限制較少的許可。

## 支援的政策許可
<a name="serverless-data-supported-permissions"></a>

資料存取政策支援下列許可。如需了解每個許可允許的 OpenSearch API 操作，請參閱 [支援的 OpenSearch API 操作與許可](serverless-genref.md#serverless-operations)。

**集合許可**
+ `aoss:CreateCollectionItems`
+ `aoss:DeleteCollectionItems`
+ `aoss:UpdateCollectionItems`
+ `aoss:DescribeCollectionItems`
+ `aoss:*`

**索引許可**
+ `aoss:ReadDocument`
+ `aoss:WriteDocument`
+ `aoss:CreateIndex`
+ `aoss:DeleteIndex`
+ `aoss:UpdateIndex`
+ `aoss:DescribeIndex`
+ `aoss:*`

## OpenSearch Dashboards 上的範例資料集
<a name="serverless-data-sample-index"></a>

OpenSearch Dashboards 提供範例[資料集](https://opensearch.org/docs/latest/dashboards/quickstart-dashboards/#adding-sample-data)，其中包含視覺化、儀表板和其他工具，協助您在新增自己的資料之前探索 Dashboards。若要從此範例資料建立索引，您需要一個資料存取政策，以提供您要使用之資料集的許可。下列政策使用萬用字元 (`*`) 為所有三個範例資料集提供許可。

```
[
  {
    "Rules": [
      {
        "Resource": [
          "index/<collection-name>/opensearch_dashboards_sample_data_*"
        ],
        "Permission": [
          "aoss:CreateIndex",
          "aoss:DescribeIndex",
          "aoss:ReadDocument"
        ],
        "ResourceType": "index"
      }
    ],
    "Principal": [
      "arn:aws:iam::<account-id>:user/<user>"
    ]
  }
]
```

## 建立資料存取政策 (主控台)
<a name="serverless-data-access-console"></a>

您可以使用視覺化編輯器，或以 JSON 格式建立資料存取政策。當您建立集合時，系統會將對應的許可指派給符合政策中定義模式之一的任何新集合。

**建立 OpenSearch Serverless 資料存取政策**

1. 開啟位於 https：//[https://console.aws.amazon.com/aos/home](https://console.aws.amazon.com/aos/home ) 的 Amazon OpenSearch Service 主控台。

1. 在左側導覽窗格中，展開**無伺服器**，然後在**安全性**下選擇**資料存取政策**。

1. 選擇 **Create access policy** (建立存取政策)。

1. 提供政策的名稱和描述。

1. 為政策中的第一個規則提供名稱。例如，"Logs collection access" (日誌集合存取)。

1. 選擇 **Add principals** (新增主體)，然後選取要向其提供資料存取權的一個或多個 IAM 角色或 [SAML 使用者和群組](serverless-saml.md)。
**注意**  
若要從下拉式選單中選取主體，您必須具有 `iam:ListUsers` 和 `iam:ListRoles` 許可 (對於 IAM 主體) 和 `aoss:ListSecurityConfigs` 許可 (對於 SAML 身分)。

1. 選擇 **Grant** (授予)，然後選取別名、範本和索引許可，以授予關聯的主體。如需完整的許可及其允許之存取的完整清單，請參閱 [支援的 OpenSearch API 操作與許可](serverless-genref.md#serverless-operations)。

1. (選用) 設定政策的其他規則。

1. 選擇**建立**。在您建立政策與強制執行許可之間，可能會有大約一分鐘的延遲時間。如果延遲超過 5 分鐘，請聯絡 [支援](https://console.aws.amazon.com/support/home)。

**重要**  
如果您的政策僅包含索引許可 (而且沒有集合許可)，您可能仍會看到相符集合的訊息，表示 `Collection cannot be accessed yet. Configure data access policies so that users can access the data within this collection`。您可以忽略此警告。允許的主體仍然可以對集合執行其指派的索引相關操作。

## 建立資料存取政策 (AWS CLI)
<a name="serverless-data-access-cli"></a>

若要使用 OpenSearch Serverless API 建立資料存取政策，請使用 `CreateAccessPolicy` 命令。該命令接受內嵌政策和 .json 檔案。內嵌政策必須編碼為 [JSON 逸出字串](https://www.freeformatter.com/json-escape.html)。

下列請求會建立資料存取政策：

```
aws opensearchserverless create-access-policy \
    --name marketing \
    --type data \
    --policy "[{\"Rules\":[{\"ResourceType\":\"collection\",\"Resource\":[\"collection/autopartsinventory\",\"collection/sales*\"],\"Permission\":[\"aoss:UpdateCollectionItems\"]},{\"ResourceType\":\"index\",\"Resource\":[\"index/autopartsinventory/*\",\"index/salesorders/orders*\"],\"Permission\":[\"aoss:ReadDocument\",\"aoss:DescribeIndex\"]}],\"Principal\":[\"arn:aws:iam::123456789012:user/Shaheen\"]}]"
```

若要在 .json 檔案中提供政策，請使用格式 `--policy file://my-policy.json`。

包含在政策中的主體現在可以使用其獲得存取權的 [OpenSearch 操作](#serverless-data-supported-permissions)。

## 檢視資料存取政策
<a name="serverless-data-access-list"></a>

在建立集合之前，您可能想要預覽帳戶中的現有資料存取政策，以查看哪個政策的資源模式與集合名稱相符。下列 [ListAccessPolicies](https://docs.aws.amazon.com/opensearch-service/latest/ServerlessAPIReference/API_ListAccessPolicies.html) 請求會列出您帳戶中的所有資料存取政策：

```
aws opensearchserverless list-access-policies --type data
```

該請求會傳回所有已設定資料存取政策的相關資訊。若要檢視一個特定政策中定義的模式規則，請在回應中的 `accessPolicySummaries`元素內容中找到政策資訊。請注意此政策`type`的 `name`和 ，並在 [GetAccessPolicy](https://docs.aws.amazon.com/opensearch-service/latest/ServerlessAPIReference/API_GetAccessPolicy.html) 請求中使用這些屬性來接收包含下列政策詳細資訊的回應：

```
{
    "accessPolicyDetails": [
        {
            "type": "data",
            "name": "my-policy",
            "policyVersion": "MTY2NDA1NDE4MDg1OF8x",
            "description": "My policy",
            "policy": "[{\"Rules\":[{\"ResourceType\":\"collection\",\"Resource\":[\"collection/autopartsinventory\",\"collection/sales*\"],\"Permission\":[\"aoss:UpdateCollectionItems\"]},{\"ResourceType\":\"index\",\"Resource\":[\"index/autopartsinventory/*\",\"index/salesorders/orders*\"],\"Permission\":[\"aoss:ReadDocument\",\"aoss:DescribeIndex\"]}],\"Principal\":[\"arn:aws:iam::123456789012:user/Shaheen\"]}]",
            "createdDate": 1664054180858,
            "lastModifiedDate": 1664054180858
        }
    ]
}
```

您可以包含資源篩選條件，將結果限制為包含特定集合或索引的政策：

```
aws opensearchserverless list-access-policies --type data --resource "index/autopartsinventory/*"
```

若要檢視有關特定政策的詳細資訊，請使用 [GetAccessPolicy](https://docs.aws.amazon.com/opensearch-service/latest/ServerlessAPIReference/API_GetAccessPolicy.html) 命令。

## 更新資料存取政策
<a name="serverless-data-access-update"></a>

當您更新資料存取政策時，所有關聯的集合均會受到影響。若要在 OpenSearch Serverless 主控台中更新資料存取政策，請選擇 **Data access control** (資料存取控制)，選取要修改的政策，然後選擇 **Edit** (編輯)。進行變更，然後選擇 **Save** (儲存)。

若要使用 OpenSearch Serverless API 更新資料存取政策，請傳送 `UpdateAccessPolicy` 請求。您必須包含政策版本，您可以使用 `ListAccessPolicies` 或 `GetAccessPolicy` 命令擷取該版本。將最新的政策版本納入其中，可確保您不會意外覆寫其他人所做的變更。

下列 [UpdateAccessPolicy](https://docs.aws.amazon.com/opensearch-service/latest/ServerlessAPIReference/API_UpdateAccessPolicy.html) 請求會使用新的政策 JSON 文件更新資料存取政策：

```
aws opensearchserverless update-access-policy \
    --name sales-inventory \
    --type data \
    --policy-version MTY2NDA1NDE4MDg1OF8x \
    --policy file://my-new-policy.json
```

在您更新政策與強制執行新許可之間，可能會有幾分鐘的延遲時間。

## 刪除資料存取政策
<a name="serverless-data-access-delete"></a>

當您刪除資料存取政策時，所有關聯的集合均會失去政策中定義的存取權。在刪除政策之前，請確保您的 IAM 和 SAML 使用者具有集合的適當存取權。若要刪除 OpenSearch Serverless 主控台中的政策，請選取該政策，然後選擇 **Delete** (刪除)。

您也可以使用 [DeleteAccessPolicy](https://docs.aws.amazon.com/opensearch-service/latest/ServerlessAPIReference/API_DeleteAccessPolicy.html) 命令：

```
aws opensearchserverless delete-access-policy --name my-policy --type data
```

## 跨帳戶資料存取
<a name="serverless-data-access-cross"></a>

雖然您無法建立具有跨帳戶身分或跨帳戶集合的資料存取政策，但您仍然可以使用擔任角色選項來設定跨帳戶存取。例如，如果 `account-a`擁有`account-b`需要存取的集合，則來自 的使用者可以在 中`account-b`擔任角色`account-a`。角色必須具有 IAM 許可`aoss:APIAccessAll`和 `aoss:DashboardsAccessAll`，並包含在 上的資料存取政策中`account-a`。