

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Amazon OpenSearch Serverless를 위한 데이터 액세스 제어
<a name="serverless-data-access"></a>

Amazon OpenSearch Serverless의 데이터 액세스 제어를 사용하면 액세스 메커니즘이나 네트워크 소스와 관계없이 사용자가 컬렉션 및 인덱스에 액세스하도록 허용할 수 있습니다. IAM 역할 및 [SAML ID](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 권한은 `CreateCollection` 및 `ListAccessPolicies`와 같은 [서버리스 API 작업](https://docs.aws.amazon.com/opensearch-service/latest/ServerlessAPIReference/Welcome.html)에 대한 액세스를 제어합니다. 데이터 액세스 정책은 OpenSearch Serverless가 지원하는 [OpenSearch 작업](#serverless-data-supported-permissions)(예: `PUT <index>` 또는 `GET _cat/indices`)에 대한 액세스를 제어합니다.

`aoss:CreateAccessPolicy` 및 `aoss:GetAccessPolicy`(다음 섹션에서 설명)와 같은 데이터 액세스 정책 API 작업에 대한 액세스를 제어하는 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`에 대한 액세스 권한을 부여해야 합니다. 두 권한 모두 컬렉션 리소스에 대한 전체 액세스 권한을 부여하는 반면, 대시보드 권한은 OpenSearch 대시보드 액세스 권한도 제공합니다. 보안 주체에게 이 두 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>

데이터 액세스 정책에는 규칙 세트가 포함되어 있으며 각 규칙에는 다음 요소가 포함되어 있습니다.


| 요소 | 설명 | 
| --- | --- | 
| ResourceType | 권한이 적용되는 리소스 유형(컬렉션 또는 인덱스)입니다. 별칭 및 템플릿 권한은 컬렉션 수준에 있고 데이터 생성, 수정, 검색 권한은 인덱스 수준에 있습니다. 자세한 내용은 [지원되는 정책 권한](#serverless-data-supported-permissions)을 참조하세요. | 
| Resource | 리소스 이름 및/또는 패턴 목록. 패턴은 와일드카드(\$1)가 뒤따르는 접두사로 연결된 권한을 여러 리소스에 적용할 수 있도록 합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/opensearch-service/latest/developerguide/serverless-data-access.html) | 
| Permission | 지정된 리소스에 대해 부여할 권한 목록입니다. 권한 및 허용되는 API 작업의 전체 목록은 [지원되는 OpenSearch API 작업 및 권한](serverless-genref.md#serverless-operations) 섹션을 참조하세요. | 
| Principal | 액세스 권한을 부여할 하나 이상의 보안 주체 목록입니다. 보안 주체는 IAM 역할 ARN 또는 SAML ID일 수 있습니다. 이러한 보안 주체는 현재 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는 데이터를 추가하기 전에 Dashboards를 탐색하는 데 도움이 되는 시각화, 대시보드 및 기타 도구와 더불어 [샘플 데이터 세트를](https://opensearch.org/docs/latest/dashboards/quickstart-dashboards/#adding-sample-data) 제공합니다. 이 샘플 데이터로 인덱스를 만들려면 작업하려는 데이터 세트에 권한을 부여하는 데이터 액세스 정책이 필요합니다. 다음 정책은 와일드카드(`*`)를 사용하여 세 샘플 데이터 세트 모두에 권한을 부여합니다.

```
[
  {
    "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://console.aws.amazon.com/aos/home](https://console.aws.amazon.com/aos/home ) Amazon OpenSearch Service 콘솔을 엽니다.

1. 왼쪽 탐색 창에서 **서버리스**를 확장하고 **보안**에서 **데이터 액세스 정책**을 선택합니다.

1. **Create access policy**(액세스 정책 생성)를 선택합니다.

1. 정책의 이름 및 설명을 입력합니다.

1. 정책의 첫 번째 규칙 이름을 입력합니다. 예: “로그 컬렉션 액세스”.

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. **생성(Create)**을 선택합니다. 정책을 만든 시점과 권한이 적용된 시점 사이에 약 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` 요소 내용에서 정책 정보를 찾으십시오. 이 정책의 `name` 및 `type`를 기록하고 [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-b`에서 액세스해야 하는 컬렉션을 `account-a`에서 소유한 경우 `account-b`의 사용자가 `account-a`에서 역할을 수임할 수 있습니다. 역할은 IAM 권한 `aoss:APIAccessAll` 및 `aoss:DashboardsAccessAll`을 보유해야 하며 `account-a`의 데이터 액세스 정책에 포함되어야 합니다.