Amazon OpenSearch Serverless를 위한 데이터 액세스 제어 - Amazon OpenSearch 서비스

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

Amazon OpenSearch Serverless를 위한 데이터 액세스 제어

Amazon OpenSearch Serverless의 데이터 액세스 제어를 사용하면 액세스 메커니즘이나 네트워크 소스와 관계없이 사용자가 컬렉션 및 인덱스에 액세스하도록 허용할 수 있습니다. IAM 역할 및 SAML ID에 대한 액세스를 제공할 수 있습니다.

컬렉션 및 인덱스 리소스에 적용되는 데이터 액세스 정책을 통해 액세스 권한을 관리합니다. 데이터 액세스 정책을 사용하면 특정 패턴과 일치하는 컬렉션 및 인덱스에 액세스 권한을 자동으로 할당하여 컬렉션을 대규모로 관리하는 데 도움이 됩니다. 단일 리소스에 여러 데이터 액세스 정책을 적용할 수 있습니다. 단, OpenSearch Dashboards URL에 액세스하려면 컬렉션에 대한 데이터 액세스 정책이 있어야 합니다.

데이터 액세스 정책 대 IAM 정책

데이터 액세스 정책은 논리적으로 AWS Identity and Access Management(IAM) 정책과 분리되어 있습니다. IAM 권한은 CreateCollectionListAccessPolicies와 같은 서버리스 API 작업에 대한 액세스를 제어합니다. 데이터 액세스 정책은 OpenSearch Serverless가 지원하는 OpenSearch 작업(예: PUT <index> 또는 GET _cat/indices)에 대한 액세스를 제어합니다.

aoss:CreateAccessPolicyaoss:GetAccessPolicy(다음 섹션에서 설명)와 같은 데이터 액세스 정책 API 작업에 대한 액세스를 제어하는 IAM 권한은 데이터 액세스 정책에 지정된 권한에 영향을 미치지 않습니다.

예를 들어 IAM 정책이 사용자의 collection-a에 대한 데이터 액세스 정책 생성을 거부하지만 모든 컬렉션(*)에 대한 데이터 액세스 정책을 생성할 수 있도록 허용한다고 가정해 보겠습니다.

{ "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:APIAccessAllaoss:DashboardsAccessAll에 대한 액세스 권한을 부여해야 합니다. 두 권한 모두 컬렉션 리소스에 대한 전체 액세스 권한을 부여하는 반면, 대시보드 권한은 OpenSearch 대시보드 액세스 권한도 제공합니다. 보안 주체에게 이 두 IAM 권한이 모두 있지 않으면 컬렉션에 대한 요청을 보낼 때 403 오류가 발생합니다. 자세한 내용은 API 작업 사용 OpenSearch 단원을 참조하십시오.

데이터 액세스 정책을 구성하는 데 필요한 IAM 권한

OpenSearch Serverless의 데이터 액세스 제어는 다음과 같은 IAM 권한을 사용합니다. 사용자를 특정 액세스 정책 이름으로 제한하도록 IAM 조건을 지정할 수 있습니다.

  • aoss:CreateAccessPolicy – 액세스 정책을 생성합니다.

  • aoss:ListAccessPolicies – 모든 액세스 정책을 나열합니다.

  • aoss:GetAccessPolicy – 특정 액세스 정책에 대한 세부 정보를 봅니다.

  • aoss:UpdateAccessPolicy – 액세스 정책을 수정합니다.

  • aoss:DeleteAccessPolicy – 액세스 정책을 삭제합니다.

다음 자격 증명 기반 액세스 정책은 사용자가 리소스 패턴 collection/logs를 포함하는 모든 액세스 정책 및 업데이트 정책을 볼 수 있도록 허용합니다.

{ "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:APIAccessAllaoss:DashboardsAccessAll 권한이 필요합니다. 자세한 내용은 API 작업 사용 OpenSearch 단원을 참조하십시오.

정책 구문

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

Element 설명
ResourceType 권한이 적용되는 리소스 유형(컬렉션 또는 인덱스)입니다. 별칭 및 템플릿 권한은 컬렉션 수준에 있고 데이터 생성, 수정, 검색 권한은 인덱스 수준에 있습니다. 자세한 내용은 지원되는 정책 권한을 참조하세요.
Resource 리소스 이름 및/또는 패턴 목록. 패턴은 와일드카드(*)가 뒤따르는 접두사로 연결된 권한을 여러 리소스에 적용할 수 있도록 합니다.
  • 컬렉션은 collection/<name|pattern> 형식을 취합니다.

  • 인덱스는 index/<collection-name|pattern>/<index-name|pattern/> 형식을 취합니다.

Permission 지정된 리소스에 대해 부여할 권한 목록입니다. 권한 및 허용되는 API 작업의 전체 목록은 지원되는 OpenSearch API 작업 및 권한 섹션을 참조하세요.
Principal 액세스 권한을 부여할 하나 이상의 보안 주체 목록입니다. 보안 주체는 IAM 역할 ARN 또는 SAML ID일 수 있습니다. 이러한 보안 주체는 현재 AWS 계정 내에 있어야 합니다. 데이터 액세스 정책은 교차 계정 액세스를 직접 지원하지 않지만 다른 AWS 계정의 사용자가 컬렉션 소유 계정에서 수임할 수 있는 역할을 정책에 포함할 수 있습니다. 자세한 내용은 교차 계정 데이터 액세스 단원을 참조하십시오.

다음 예시 정책은 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:* 권한을 부여하면 사용자는 연결된 인덱스에서 모든 작업을 수행할 수 있습니다. 더 제한적인 권한이 덜 제한적인 권한보다 우선하지는 않습니다.

지원되는 정책 권한

데이터 액세스 정책에서 지원되는 권한은 다음과 같습니다. 각 권한에서 허용하는 OpenSearch API 작업에 대한 내용은 지원되는 OpenSearch API 작업 및 권한을 참조하세요.

컬렉션 권한

  • aoss:CreateCollectionItems

  • aoss:DeleteCollectionItems

  • aoss:UpdateCollectionItems

  • aoss:DescribeCollectionItems

  • aoss:*

인덱스 권한

  • aoss:ReadDocument

  • aoss:WriteDocument

  • aoss:CreateIndex

  • aoss:DeleteIndex

  • aoss:UpdateIndex

  • aoss:DescribeIndex

  • aoss:*

OpenSearch Dashboards의 샘플 데이터 세트

OpenSearch Dashboards는 데이터를 추가하기 전에 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>" ] } ]

데이터 액세스 정책 생성(콘솔)

시각적 편집기를 사용하거나 JSON 형식으로 데이터 액세스 정책을 생성할 수 있습니다. 정책에 정의된 패턴 중 하나와 일치하는 모든 새 컬렉션에는 컬렉션을 생성할 때 해당 권한이 할당됩니다.

OpenSearch Serverless 데이터 액세스 정책 생성하기
  1. https://console.aws.amazon.com/aos/home에서 Amazon OpenSearch Service 콘솔을 엽니다.

  2. 왼쪽 탐색 창에서 Serverless(서버리스)를 확장하고 Data access control(데이터 액세스 제어)을 선택합니다.

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

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

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

  6. Add principals(보안 주체 추가)를 선택하고 데이터 액세스를 제공할 하나 이상의 IAM 역할 또는 SAML 사용자 및 그룹을 선택합니다.

    참고

    드롭다운 메뉴에서 보안 주체를 선택하려면 iam:ListUsersiam:ListRoles 권한(IAM 보안 주체의 경우)과 aoss:ListSecurityConfigs 권한(SAML 자격 증명의 경우)이 있어야 합니다.

  7. Grant(부여)를 선택하고 별칭, 템플릿, 인덱스 권한을 선택하여 연관된 보안 주체에게 부여합니다. 전체 권한 및 해당 목록에서 허용되는 액세스는 지원되는 OpenSearch API 작업 및 권한 섹션을 참조하세요.

  8. (선택 사항) 정책에 대한 추가 규칙을 구성합니다.

  9. 생성(Create)을 선택합니다. 정책을 만든 시점과 권한이 적용된 시점 사이에 약 1분의 지연 시간이 있을 수 있습니다. 5분 넘게 소요될 경우 AWS Support에 문의하세요.

중요

정책에 인덱스 권한만 포함되어 있고 컬렉션 권한은 없는 경우 Collection cannot be accessed yet. Configure data access policies so that users can access the data within this collection이라는 일치하는 컬렉션에 대한 메시지가 계속 표시될 수 있습니다. 이 경고는 무시해도 됩니다. 허용된 보안 주체는 여전히 컬렉션에서 할당된 인덱스 관련 작업을 수행할 수 있습니다.

데이터 액세스 정책 생성(AWS CLI)

OpenSearch Serverless API를 사용하여 데이터 액세스 정책을 생성하려면 CreateAccessPolicy 명령을 사용합니다. 이 명령은 인라인 정책과 .json 파일을 모두 허용합니다. 인라인 정책은 JSON 이스케이프 문자열로 인코딩해야 합니다.

다음 요청은 데이터 액세스 정책을 생성합니다.

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 작업을 사용할 수 있습니다.

데이터 액세스 정책 보기

컬렉션을 생성하기 전에 계정의 기존 데이터 액세스 정책을 미리 보고 컬렉션 이름과 일치하는 리소스 패턴을 가진 정책을 확인하는 것이 좋습니다. 다음 ListAccessPolicies 요청은 계정의 모든 데이터 액세스 정책을 나열합니다.

aws opensearchserverless list-access-policies --type data

요청은 구성된 모든 데이터 액세스 정책에 대한 정보를 반환합니다. 특정 정책에 정의된 패턴 규칙을 보려면 응답의 accessPolicySummaries 요소 내용에서 정책 정보를 찾으십시오. 이 정책의 nametype를 기록하고 GetAccessPolicy 요청에서 이러한 속성을 사용하여 다음 정책 세부 정보가 포함된 응답을 수신하세요.

{ "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 명령을 사용합니다.

데이터 액세스 정책 업데이트

데이터 액세스 정책을 업데이트하면 모든 관련 컬렉션이 영향을 받습니다. OpenSearch Serverless 콘솔에서 데이터 액세스 정책을 업데이트하려면 Data access control(데이터 액세스 제어)을 선택하고 수정할 정책을 선택한 다음 Edit(편집)를 선택합니다. 변경하고 Save(저장)를 선택합니다.

OpenSearch Serverless API를 사용하여 데이터 액세스 정책을 업데이트하려면 UpdateAccessPolicy 요청을 전송하세요. ListAccessPolicies 또는 GetAccessPolicy 명령을 사용하여 검색할 수 있는 정책 버전을 포함해야 합니다. 최신 정책 버전을 포함하면 다른 사람이 변경한 내용을 실수로 재정의하지 않습니다.

다음 UpdateAccessPolicy 요청은 새 정책 JSON 문서로 데이터 액세스 정책을 업데이트합니다.

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

정책을 업데이트하는 시점과 새 권한이 적용되는 시점 사이에 몇 분의 지연 시간이 있을 수 있습니다.

데이터 액세스 정책 삭제

데이터 액세스 정책을 삭제하면 연결된 모든 컬렉션이 정책에 정의된 액세스 권한을 잃게 됩니다. 정책을 삭제하기 전에 IAM 및 SAML 사용자에게 컬렉션에 대한 적절한 액세스 권한이 있는지 확인하세요. OpenSearch Serverless 콘솔에서 정책을 삭제하려면 정책을 선택하고 Delete(삭제)를 선택합니다.

DeleteAccessPolicy 명령을 사용할 수도 있습니다.

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

교차 계정 데이터 액세스

교차 계정 자격 증명 또는 교차 계정 컬렉션으로 데이터 액세스 정책을 생성할 수는 없지만 여전히 수임 역할 옵션을 사용하여 교차 계정 액세스를 설정할 수 있습니다. 예를 들어 account-b에서 액세스해야 하는 컬렉션을 account-a에서 소유한 경우 account-b의 사용자가 account-a에서 역할을 수임할 수 있습니다. 역할은 IAM 권한 aoss:APIAccessAllaoss:DashboardsAccessAll을 보유해야 하며 account-a의 데이터 액세스 정책에 포함되어야 합니다.