

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

# 자습서: IAM 마스터 사용자 및 Amazon Cognito 인증을 사용하여 도메인 구성
<a name="fgac-iam"></a>

이 자습서에서는 [세분화된 액세스 제어](fgac.md)를 위한 인기 있는 Amazon OpenSearch Service 사용 사례인 OpenSearch 대시보드에 대한 Amazon Cognito 인증을 사용하는 IAM 마스터 사용자를 다룹니다.

이 자습서에서는 **마스터 IAM 역할과 **제한된 IAM 역할을 구성한 다음 이를 Amazon Cognito의 사용자와 연결합니다. 그러면 마스터 사용자는 OpenSearch Dashboard에 로그인하여 제한된 사용자를 역할에 매핑하고 세분화된 액세스 제어를 사용하여 사용자의 권한을 제한할 수 있습니다.

![\[IAM roles and Amazon Cognito integration with OpenSearch Dashboards access control.\]](http://docs.aws.amazon.com/ko_kr/opensearch-service/latest/developerguide/images/fgac-cognito.png)


이러한 단계는 Amazon Cognito 사용자 풀을 인증에 사용하지만, 동일한 기본 프로세스가 모든 Cognito 인증 공급자에 대해 작동하므로 다양한 사용자에게 다양한 IAM 역할을 할당할 수 있습니다.

이 자습서에서는 다음 단계를 완료합니다.

1. [마스터 및 제한된 IAM 역할 생성](#fgac-iam-roles)

1. [Cognito 인증을 사용하여 도메인 생성](#fgac-iam-domain)

1. [Cognito 사용자 풀 및 자격 증명 풀을 구성합니다](#fgac-iam-cognito)

1. [OpenSearch 대시보드에서 역할 매핑](#fgac-iam-dashboards)

1. [권한 테스트](#fgac-iam-test)

## 1단계: 마스터 및 제한된 IAM 역할 생성
<a name="fgac-iam-roles"></a>

 AWS Identity and Access Management (IAM) 콘솔로 이동하여 두 개의 개별 역할을 생성합니다.
+ `MasterUserRole` – 마스터 사용자는 클러스터에 대한 전체 권한을 갖고 역할과 역할 매핑을 관리합니다.
+ `LimitedUserRole` – 마스터 사용자로서 제한된 액세스 권한을 부여하는 좀 더 제한된 역할입니다.

역할을 생성하는 방법에 대한 자세한 내용은 *IAM 사용 설명서*의 [사용자 지정 신뢰 정책을 사용하여 역할 생성](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-custom.html)을 참조하세요.

두 역할 모두 Cognito 자격 증명 풀이 역할을 맡도록 허용하는 다음 신뢰 정책이 있어야 합니다.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [{
    "Effect": "Allow",
    "Principal": {
      "Federated": "cognito-identity.amazonaws.com"
    },
    "Action": "sts:AssumeRoleWithWebIdentity",
    "Condition": {
      "StringEquals": {
        "cognito-identity.amazonaws.com:aud": "{identity-pool-id}"
      },
      "ForAnyValue:StringLike": {
        "cognito-identity.amazonaws.com:amr": "authenticated"
      }
    }
  }]
}
```

------

**참고**  
`identity-pool-id`를 Amazon Cognito 자격 증명 풀의 고유 식별자로 교체하세요. 예를 들어 `us-east-1:0c6cdba7-3c3c-443b-a958-fb9feb207aa6`입니다.

## 2단계: Cognito 인증을 사용하여 도메인 생성
<a name="fgac-iam-domain"></a>

[https://console.aws.amazon.com/aos/home/](https://console.aws.amazon.com/aos/home/) Amazon OpenSearch Service 콘솔로 이동하여 다음 설정을 사용하여 [도메인을 생성합니다](createupdatedomains.md).
+ OpenSearch 1.0 이상 또는 Elasticsearch 7.8 이상
+ 공개 액세스(Public access)
+ 마스터 사용자(이전 단계에서 생성)로 `MasterUserRole`이(가) 활성화된 세분화된 액세스 제어 
+ OpenSearch 대시보드에 대한 Amazon Cognito 인증 활성화. Cognito 인증을 활성화하고 사용자 및 ID 풀을 선택하는 방법에 대한 지침은 [Amazon Cognito 인증을 사용하도록 도메인 구성](cognito-auth.md#cognito-auth-config) 섹션을 참조하세요.
+ 다음 도메인 액세스 정책:

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

****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Effect": "Allow",
        "Principal": {
          "AWS": "arn:aws:iam::111122223333:root"
        },
        "Action": [
          "es:ESHttp*"
        ],
        "Resource": "arn:aws:es:us-east-1:111122223333:domain/{domain-name}/*"
      }
    ]
  }
  ```

------
+ 도메인에 대한 모든 트래픽에 HTTPS 필요
+ 노드 간 암호화
+ 저장 데이터의 암호화

## 3단계: Cognito 사용자 및 그룹 구성
<a name="fgac-iam-cognito"></a>

도메인이 생성되는 동안 *Amazon Cognito 개발자 안내서*의 [사용자 풀 생성](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-as-user-directory.html)에 따라 Amazon Cognito 내에서 마스터 및 제한된 사용자를 구성합니다. 마지막으로 [Amazon Cognito에서 자격 증명 풀 생성](https://docs.aws.amazon.com/cognito/latest/developerguide/getting-started-with-identity-pools.html#create-identity-pool)의 단계에 따라 자격 증명 풀을 구성합니다. 사용자 풀과 자격 증명 풀은 동일한 AWS 리전에 있어야 합니다.

## 4단계: OpenSearch 대시보드에서 역할 매핑
<a name="fgac-iam-dashboards"></a>

이제 사용자가 구성되었으므로 OpenSearch Dashboards에 마스터 사용자로 로그인하여 사용자를 역할에 매핑할 수 있습니다.

1. OpenSearch Service 콘솔로 돌아가서 생성한 도메인의 OpenSearch 대시보드 URL로 이동합니다. URL은 `domain-endpoint/_dashboards/` 형식입니다.

1. `master-user` 보안 인증으로 로그인합니다.

1. **Add sample data**(샘플 데이터 추가)를 선택하고 샘플 비행 데이터를 추가합니다.

1. 왼쪽 탐색 창에서 **Security**(보안), **Roles**(역할), **Create role**(역할 생성)을 선택합니다.

1. 역할 이름을 `new-role`로 지정합니다.

1. **Index**(인덱스)의 경우 `opensearch_dashboards_sample_data_fli*`(Elasticsearch 도메인의 경우 `kibana_sample_data_fli*`)를 지정합니다.

1. **Index permissions**(인덱스 권한)의 경우 **read**(읽기)를 선택합니다.

1. **문서 수준 보안 쿼리(Document Level Security Query)**에 다음 쿼리를 지정합니다.

   ```
   {
     "match": {
       "FlightDelay": true
     }
   }
   ```

1. 필드 수준 보안의 경우 **제외(Exclude)**를 선택하고 `FlightNum`을 지정합니다.

1. **익명화(Anonymization)**에 `Dest`를 지정합니다.

1. **생성(Create)**을 선택합니다.

1. **매핑된 사용자(Mapped users)**, **매핑 관리(Manage mapping)**를 차례로 선택합니다. `LimitedUserRole`에 대한 Amazon 리소스 이름(ARN)을 외부 자격 증명으로 추가하고 **Map**(매핑)을 선택합니다.

1. 역할 목록으로 돌아가서 **opensearch\$1dashboards\$1user**를 선택합니다. **매핑된 사용자(Mapped users)**, **매핑 관리(Manage mapping)**를 차례로 선택합니다. `LimitedUserRole`에 대한 ARN을 백엔드 역할로 추가하고 **맵(Map)**을 선택합니다.

## 5단계: 권한 테스트
<a name="fgac-iam-test"></a>

역할이 올바르게 매핑되면 제한된 사용자로 로그인하고 권한을 테스트할 수 있습니다.

1. 새로운 프라이빗 브라우저 창에서 도메인의 OpenSearch 대시보드 URL로 이동하고 `limited-user` 보안 인증을 사용하여 로그인한 다음 **Explore on my own**(직접 탐색)을 선택합니다.

1. **개발 도구(Dev Tools)**로 이동하여 기본 검색을 실행합니다.

   ```
   GET _search
   {
     "query": {
       "match_all": {}
     }
   }
   ```

   권한 오류를 확인합니다. `limited-user`에는 클러스터 전체 검색을 실행할 권한이 없습니다.

1. 또 다른 검색을 실행합니다.

   ```
   GET opensearch_dashboards_sample_data_flights/_search
   {
     "query": {
       "match_all": {}
     }
   }
   ```

   일치하는 모든 문서에 `true` 값을 갖는 `FlightDelay` 필드와 익명화된 `Dest` 필드가 있으며 `FlightNum` 필드는 없는 것을 확인할 수 있습니다.

1. `master-user`로 로그인한 원래 브라우저 창에서 **개발 도구(Dev Tools)**를 선택한 다음 동일한 검색을 수행합니다. 권한, 결과 수, 일치하는 문서 및 포함된 필드의 차이를 확인합니다.