

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

# 를 사용하여 SAML 페더레이션 활성화 AWS Identity and Access Management
<a name="application-enable-SAML-identity-federation"></a>

OpenSearch UI는 많은 ID 공급자가 사용하는 개방형 표준인 Security Assertion Markup Language 2.0(SAML)을 지원합니다. 이렇게 하면 AWS Identity and Access Management (IAM)와의 ID 페더레이션이 활성화됩니다. 이 지원을 통해 계정 또는 조직의 사용자는 IAM 역할을 맡아 OpenSearch UI에 직접 액세스할 수 있습니다. 최종 사용자를 위한 ID 공급자(IdP) 시작 Single Sign-On 환경을 생성할 수 있습니다. 여기서 최종 사용자는 외부 ID 공급자에서 인증하고 OpenSearch UI의 정의된 페이지로 직접 라우팅될 수 있습니다. OpenSearch UI 및 관련 데이터 소스에 액세스할 수 있는 권한이 서로 다른 다양한 IAM 역할을 맡도록 최종 사용자 또는 그룹을 구성하여 세분화된 액세스 제어를 구현할 수도 있습니다.

이 주제에서는 OpenSearch UI에서 SAML 사용을 구성하기 위한 단계별 지침을 제공합니다. 이 절차에서는 Okta 자격 증명 및 액세스 관리 애플리케이션을 구성하는 단계를 예로 사용합니다. Azure Active Directory, Ping 등, 다른 ID 공급자의 구성 단계는 비슷합니다.

**Topics**
+ [1단계: ID 공급자 애플리케이션 설정(Okta)](#SAML-identity-federation-step-1)
+ [2단계: Okta에 대한 AWS 구성 설정](#SAML-identity-federation-step-2)
+ [3단계: IAM에서 Amazon OpenSearch Service 액세스 정책 생성](#SAML-identity-federation-step-3)
+ [4단계: SAML을 사용하여 ID 공급자가 시작한 Single Sign-On 환경 확인](#SAML-identity-federation-step-4)
+ [5단계: SAML 속성 기반 세분화된 액세스 제어 구성](#SAML-identity-federation-step-5)

## 1단계: ID 공급자 애플리케이션 설정(Okta)
<a name="SAML-identity-federation-step-1"></a>

OpenSearch UI에서 SAML을 사용하기 위한 첫 번째 단계는 ID 공급자를 설정하는 것입니다.

**작업 1: Okta 사용자 생성**

1. 관리 권한이 있는 사용자로 [https://login.okta.com/](https://login.okta.com/) Okta 조직에 로그인합니다.

1. 관리자 콘솔의 탐색 창에 있는 **디렉터리**에서 **사람**을 선택합니다.

1. **사람 추가**(Add Person)를 선택합니다.

1. **이름**에 사용자의 이름을 입력합니다.

1. **성**에 사용자의 성을 입력합니다.

1. **사용자 이름**에 이메일 형식으로 사용자의 사용자 이름을 입력합니다.

1. **암호를 설정합니다**를 선택하고 암호를 입력합니다..

1. (선택 사항) 사용자가 처음 로그인할 때 암호를 변경하지 않도록 하려면 **사용자가 처음 로그인할 때 암호를 변경해야 함** 상자를 선택 취소합니다.

1. **저장**을 선택합니다.

**작업 2: 그룹 생성 및 할당**

1. 관리 권한이 있는 사용자로 [https://login.okta.com/](https://login.okta.com/) Okta 조직에 로그인합니다.

1. 관리자 콘솔의 탐색 창에 있는 **디렉터리**에서 **그룹**을 선택합니다.

1. **그룹 추가**를 선택합니다.

1. 그룹 이름을 입력하고 **저장**을 선택합니다.

1. 새로 생성된 그룹을 선택한 다음 **사용자 할당**을 선택합니다.

1. 더하기 기호(**\$1**)를 선택한 다음 **완료**를 선택합니다.

1. (선택 사항) 1\$16단계를 반복하여 그룹을 더 추가합니다.

**작업 3: Okta 애플리케이션 생성**

1. 관리 권한이 있는 사용자로 [https://login.okta.com/](https://login.okta.com/) Okta 조직에 로그인합니다.

1. 관리자 콘솔의 탐색 창에 있는 **애플리케이션**에서 **애플리케이션**을 선택합니다.

1.  **앱 통합 생성(Create App Integration)**을 선택합니다.

1. 로그인 방법으로 SAML 2.0을 선택한 후 **다음**을 선택합니다.

1.  앱 통합의 이름(예: **OpenSearch\$1UI**)을 입력한 후 **다음**을 선택합니다.

1. 앱에 다음 값을 입력합니다. 다른 값은 변경할 필요가 없습니다.

   1.  1. **Single Sign On URL**에 상용 AWS 리전 **https://signin.aws.amazon.com/saml** 또는 해당 리전에 해당하는 URL을 입력합니다.

   1. 2. **대상 URI(SP 엔터티 ID)**에 **urn:amazon:webservices**를 입력합니다.

   1. 3. **이름 ID 형식**에 **EmailAddress**를 입력합니다.

1. **다음**을 선택합니다.

1. **내부 앱을 추가하는 Okta 고객임**을 선택한 다음 **생성한 내부 앱입니다**를 선택합니다.

1. **마침**을 클릭합니다.

1. **할당**을 선택한 다음 **할당**을 선택합니다.

1. **그룹에 할당**을 선택한 다음 추가하려는 그룹 옆에 있는 **할당**을 선택합니다.

1. **완료**를 선택합니다.

**작업 4: Okta 고급 구성 설정**

사용자 지정 SAML 애플리케이션을 생성한 후 다음 단계를 완료합니다.

1. 관리 권한이 있는 사용자로 [https://login.okta.com/](https://login.okta.com/) Okta 조직에 로그인합니다.

   관리자 콘솔의 **일반** 영역에 있는 **SAML 설정**에서 **편집**을 선택합니다.

1. **다음**을 선택합니다.

1. 다음 형식을 사용하여 **기본 릴레이 상태**를 OpenSearch UI 엔드포인트로 설정합니다.

   `https://region.console.aws.amazon.com/aos/home?region=region#opensearch/applications/application-id/redirectToDashboardURL`. 

   다음은 예제입니다.

   `https://us-east-2.console.aws.amazon.com/aos/home?region=us-east-2#opensearch/applications/abc123def4567EXAMPLE/redirectToDashboardURL` 

1. **속성 문(선택 사항)**에 다음 속성을 추가합니다.

   1. **역할** 속성을 사용하여 IAM 역할 및 ID 공급자를 쉼표로 구분된 형식으로 제공합니다. AWS 구성을 설정할 때 이후 단계에서 동일한 IAM 역할 및 자격 증명 공급자를 사용합니다.

   1. **RoleSessionName**의 **user.login**을 설정합니다. 이는 역할을 맡을 때 발급되는 임시 자격 증명의 식별자로 사용됩니다.

   참조용:    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/opensearch-service/latest/developerguide/application-enable-SAML-identity-federation.html)

1. 속성을 추가하고 **다음**을 선택한 후 **완료**를 선택합니다.

속성은 다음 이미지에 표시된 것과 비슷한 형식이어야 합니다. **기본 릴레이 상태** 값은 Okta에서 Single Sign-On 검증을 완료한 후 계정 또는 조직의 최종 사용자를 위한 랜딩 페이지를 정의하는 URL입니다. OpenSearch UI의 모든 페이지로 설정한 다음 해당 URL을 의도한 최종 사용자에게 제공할 수 있습니다.

![\['SAML 2.0' 영역에는 애플리케이션의 기본 릴레이 상태 URL 및 메타데이터 URL이 표시됩니다.\]](http://docs.aws.amazon.com/ko_kr/opensearch-service/latest/developerguide/images/ui-saml-2.0-area-okta.png)


## 2단계: Okta에 대한 AWS 구성 설정
<a name="SAML-identity-federation-step-2"></a>

다음 작업을 완료하여 Okta에 대한 AWS 구성을 설정합니다.

**작업 1: Okta 정보 수집**

이 단계에서는 나중에 AWS에서 구성할 수 있도록 Okta 정보를 수집해야 합니다.

1. 관리 권한이 있는 사용자로 [https://login.okta.com/](https://login.okta.com/) Okta 조직에 로그인합니다.

1. **로그인** 탭의 페이지 오른쪽 하단에서 **SAML 설정 지침 보기**를 선택합니다.

1. **ID 공급자 Single Sign-On**의 값을 기록해 둡니다. [SQL Workbench/J](https://www.sql-workbench.eu/)와 같은 서드 파티 SQL 클라이언트에 연결할 때 이 URL을 사용할 수 있습니다.

1. 블록 4에서 ID 공급자 메타데이터를 사용한 다음 메타데이터 파일을 .xml 형식(예: `metadata.xml`)으로 저장합니다.

**작업 2: IAM 공급자 생성**

IAM 공급자를 생성하려면 다음 단계를 완료합니다.

1. 에 로그인 AWS Management Console 하고 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) IAM 콘솔을 엽니다.

1. 탐색 창의 **액세스 관리**에서 **ID 공급자**를 선택합니다.

1. **공급자 추가**를 선택합니다.

1. **공급자 유형**에서 **SAML**을 선택합니다.

1. **공급자 이름**에 이름을 입력합니다.

1. **메타데이터 문서**에서 **파일 선택**을 선택하고 이전에 다운로드한 메타데이터 파일(.xml)을 업로드합니다.

1. **공급자 추가**를 선택합니다.

**작업 3: IAM 역할 생성**

 AWS Identity and Access Management 역할을 생성하려면 다음 단계를 완료합니다.

1. 에 로그인 AWS Management Console 하고 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) IAM 콘솔을 엽니다.

1. 탐색 창의 **액세스 관리**에서 **역할**을 선택합니다.

1. **역할 생성**을 선택합니다.

1. **신뢰할 수 있는 엔티티 유형**에서 **SAML 2.0 페더레이션**을 선택합니다.

1. **SAML 2.0 기반 공급자**의 경우 앞서 생성한 ID 공급자를 선택합니다.

1. **프로그래밍 방식 및 AWS Management Console 액세스 허용**을 선택합니다.

1. **다음**을 선택합니다.

1. **권한 정책** 목록에서 AWS 관리형 정책 OpenSearch Service 권한을 부여하는 정책의 확인란을 선택합니다. **AmazonOpenSearchServiceFullAccess**

1. **다음**을 선택합니다.

1. **검토** 영역에서 **역할 이름**에 역할의 이름을 입력합니다(예: **oktarole**).

1. (선택 사항) **설명**에 역할의 용도에 대한 간략한 설명을 입력합니다.

1. **역할 생성**을 선택합니다.

1. 방금 생성한 역할로 이동하여 **신뢰 관계** 탭을 선택한 다음 **신뢰 정책 편집**을 선택합니다.

1. **문 편집** 창의 **STS에 대한 작업 추가**에서 **TagSession**의 확인란을 선택합니다.

1. **정책 업데이트**를 선택합니다.

## 3단계: IAM에서 Amazon OpenSearch Service 액세스 정책 생성
<a name="SAML-identity-federation-step-3"></a>

OpenSearch 액세스 제어를 위해 IAM 역할을 구성하는 방법을 알아봅니다. IAM 역할을 사용하면 Okta 사용자 그룹이 OpenSearch 리소스에 액세스할 수 있도록 세분화된 액세스 제어를 구현할 수 있습니다. 이 주제에서는 2개의 예시 그룹을 사용하는 IAM 역할 기반 구성을 보여줍니다.

------
#### [ Sample group: Alice ]

요청:

```
GET _plugins/_security/api/roles/alice-group
```

결과:

```
{
  "alice-group": {
    "reserved": false,
    "hidden": false,
    "cluster_permissions": [
      "unlimited"
    ],
    "index_permissions": [
      {
        "index_patterns": [
          "alice*"
        ],
        "dls": "",
        "fls": [],
        "masked_fields": [],
        "allowed_actions": [
          "indices_all"
        ]
      }
    ],
    "tenant_permissions": [
      {
        "tenant_patterns": [
          "global_tenant"
        ],
        "allowed_actions": [
          "kibana_all_write"
        ]
      }
    ],
    "static": false
  }
}
```

------
#### [ Sample group: Bob ]

요청:

```
GET _plugins/_security/api/roles/bob-group
```

결과:

```
{
  "bob-group": {
    "reserved": false,
    "hidden": false,
    "cluster_permissions": [
      "unlimited"
    ],
    "index_permissions": [
      {
        "index_patterns": [
          "bob*"
        ],
        "dls": "",
        "fls": [],
        "masked_fields": [],
        "allowed_actions": [
          "indices_all"
        ]
      }
    ],
    "tenant_permissions": [
      {
        "tenant_patterns": [
          "global_tenant"
        ],
        "allowed_actions": [
          "kibana_all_write"
        ]
      }
    ],
    "static": false
  }
}
```

------

다음 예와 같이 백엔드 역할 매핑을 사용하여 Amazon OpenSearch Service 도메인 역할을 IAM 역할에 매핑할 수 있습니다.

```
{
  "bob-group": {
    "hosts": [],
    "users": [],
    "reserved": false,
    "hidden": false,
    "backend_roles": [
      "arn:aws:iam::111222333444:role/bob-group"
    ],
    "and_backend_roles": []
  },
  "alice-group": {
    "hosts": [],
    "users": [],
    "reserved": false,
    "hidden": false,
    "backend_roles": [
      "arn:aws:iam::111222333444:role/alice-group"
    ],
    "and_backend_roles": []
  }
}
```

## 4단계: SAML을 사용하여 ID 공급자가 시작한 Single Sign-On 환경 확인
<a name="SAML-identity-federation-step-4"></a>

**기본 릴레이 상태**의 URL을 열어 Okta 인증 페이지를 엽니다. 최종 사용자의 자격 증명을 입력합니다. 자동으로 OpenSearch UI로 리디렉션됩니다.

다음 이미지와 같이 탐색 창 하단의 사용자 아이콘을 선택하여 현재 자격 증명을 확인할 수 있습니다.

![\[Okta '설정 및 설치' 페이지에서 사용자 아이콘을 선택하면 현재 사용자의 자격 증명이 표시됩니다.\]](http://docs.aws.amazon.com/ko_kr/opensearch-service/latest/developerguide/images/ui-okta-user-icon.png)


탐색 패널 하단의 개발자 도구에 액세스하고 콘솔에서 쿼리를 실행하여 사용자의 세분화된 액세스 제어 권한을 확인할 수도 있습니다. 다음은 샘플 쿼리입니다.

------
#### [ Example 1: Displays information about the current user ]

요청:

```
GET _plugins/_security/api/account
```

결과:

```
{
  "user_name": "arn:aws:iam::XXXXXXXXXXXX:role/bob-group",
  "is_reserved": false,
  "is_hidden": false,
  "is_internal_user": false,
  "user_requested_tenant": null,
  "backend_roles": [
    "arn:aws:iam::XXXXXXXXXXXX:role/bob-group"
  ],
  "custom_attribute_names": [],
  "tenants": {
    "global_tenant": true,
    "arn:aws:iam::XXXXXXXXXXXX:role/bob-group": true
  },
  "roles": [
    "bob-group"
  ]
}
```

------
#### [ Example 2: Displays actions permitted for a user ]

요청:

```
GET bob-test/_search
```

결과:

```
{
  "took": 390,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 1,
      "relation": "eq"
    },
    "max_score": 1,
    "hits": [
      {
        "_index": "bob-test",
        "_id": "ui01N5UBCIHpjO8Jlvfy",
        "_score": 1,
        "_source": {
          "title": "Your Name",
          "year": "2016"
        }
      }
    ]
  }
}
```

------
#### [ Example 3: Displays actions not permitted for a user ]

요청:

```
GET alice-test
```

결과:

```
{
  "error": {
    "root_cause": [
      {
        "type": "security_exception",
        "reason": "no permissions for [indices:admin/get] and User [name=arn:aws:iam::111222333444:role/bob-group, backend_roles=[arn:aws:iam::111222333444:role/bob-group], requestedTenant=null]"
      }
    ],
    "type": "security_exception",
    "reason": "no permissions for [indices:admin/get] and User [name=arn:aws:iam::111222333444:role/bob-group, backend_roles=[arn:aws:iam::111222333444:role/bob-group], requestedTenant=null]"
  },
  "status": 403
}
```

------

## 5단계: SAML 속성 기반 세분화된 액세스 제어 구성
<a name="SAML-identity-federation-step-5"></a>

Amazon OpenSearch Service에서는 SAML과 함께 세분화된 액세스 제어를 사용하여 ID 공급자의 사용자 및 그룹을 OpenSearch 세분화된 액세스 제어 사용자 및 역할에 동적으로 매핑할 수 있습니다. 이러한 역할의 범위를 특정 OpenSearch 도메인 및 서버리스 컬렉션으로 지정하고 인덱스 수준 권한 및 문서 수준 보안을 정의할 수 있습니다.

**참고**  
세분화된 액세스 제어에 대한 자세한 내용은 [Amazon OpenSearch Service에서 세분화된 액세스 제어](fgac.md) 섹션을 참조하세요.

**Topics**
+ [세분화된 액세스 제어를 위한 SAML 속성](#saml-fgac-key-attributes)
+ [작업 1: 세분화된 액세스 제어를 위한 Okta 구성](#configure-okta-fgac)
+ [작업 2: OpenSearch 도메인에서 SAML 구성](#configure-opensearch-domain-fgac)
+ [작업 3: OpenSearch Serverless 컬렉션에서 SAML 구성](#saml-configure-collections)

### 세분화된 액세스 제어를 위한 SAML 속성
<a name="saml-fgac-key-attributes"></a>

**subjectKey**  
인증할 사용자를 식별하는 이메일, 사용자 이름 등의 고유한 사용자 속성에 매핑됩니다.

**rolesKey**  
권한 부여를 위한 역할 또는 권한을 결정하는 IdP의 그룹 또는 역할 속성에 매핑됩니다.

### 작업 1: 세분화된 액세스 제어를 위한 Okta 구성
<a name="configure-okta-fgac"></a>

**세분화된 액세스 제어를 위한 Okta를 구성하려면**

1. **속성 문** 섹션에서 OpenSearch 사용자 보안 위탁자에 대한 새 속성을 추가합니다.
   + 이름: `UserName`
   + 값: `${user-email}`

   이 속성은 인증을 위한 OpenSearch 세분화된 액세스 제어 구성에서 **제목 키**로 사용됩니다.

1. **그룹 속성 문** 섹션에서 역할의 그룹 속성을 추가합니다.
   + 이름: `groups`
   + 필터: `OpenSearch_xxx`

   이 속성은 권한 부여를 위해 그룹을 OpenSearch 세분화된 액세스 제어 역할에 매핑하기 위한 역할 **키**로 사용됩니다.

### 작업 2: OpenSearch 도메인에서 SAML 구성
<a name="configure-opensearch-domain-fgac"></a>

**OpenSearch 도메인에서 SAML을 구성하려면**

1.  AWS 관리 콘솔에서 OpenSearch UI 사용자에 대해 세분화된 액세스 제어를 활성화하려는 OpenSearch Service 도메인을 식별합니다.

1. 특정 도메인의 세부 정보 페이지로 이동합니다.

1. **보안 구성** 탭을 선택하고 **편집**을 클릭합니다.

1. **IAM 페더레이션을 통한 SAML**을 확장합니다.

1. Okta에서 정의한 `subjectKey`와 `roleKey`를 입력합니다.

1. **변경 내용 저장**을 선택합니다.

 AWS CLI를 사용하여 세분화된 액세스 제어를 구성할 수도 있습니다.

```
aws opensearch create-domain \
--domain-name testDomain \
--engine-version OpenSearch_1.3 \
--cluster-config InstanceType=r5.xlarge.search,InstanceCount=1,DedicatedMasterEnabled=false,ZoneAwarenessEnabled=false,WarmEnabled=false \
--access-policies '{"Version": "2012-10-17",		 	 	 "Statement":[{"Effect":"Allow","Principal":{"AWS":"*"},"Action":"es:*","Resource":"arn:aws:es:us-east-1:12345678901:domain/neosaml10/*"}]}' \
--domain-endpoint-options '{"EnforceHTTPS":true,"TLSSecurityPolicy":"Policy-Min-TLS-1-2-2019-07"}' \
--node-to-node-encryption-options '{"Enabled":true}' \
--encryption-at-rest-options '{"Enabled":true}' \
--advanced-security-options '{"Enabled":true,"InternalUserDatabaseEnabled":true,"MasterUserOptions":{"MasterUserName":"********","MasterUserPassword":"********"}, "IAMFederationOptions":{"Enabled": true,"SubjectKey":"TestSubjectKey","RolesKey":"TestRolesKey"}}' \
--ebs-options "EBSEnabled=true,VolumeType=gp2,VolumeSize=300" \
--no-verify-ssl \
--endpoint-url https://es.us-east-1.amazonaws.com \
--region us-east-1
```

기존 도메인을 업데이트하려면:

```
aws opensearch update-domain-config \
--domain-name testDomain \
--advanced-security-options '{"Enabled":true,"InternalUserDatabaseEnabled":true,"MasterUserOptions":{"MasterUserName":"********","MasterUserPassword":"********"}, "IAMFederationOptions":{"Enabled": true,"SubjectKey":"TestSubjectKey","RolesKey":"TestRolesKey"}}' \
--ebs-options "EBSEnabled=true,VolumeType=gp2,VolumeSize=300" \
--no-verify-ssl \
--endpoint-url https://es.us-east-1.amazonaws.com \
--region us-east-1
```

### 작업 3: OpenSearch Serverless 컬렉션에서 SAML 구성
<a name="saml-configure-collections"></a>

**OpenSearch Serverless에서 SAML 기반 세분화된 액세스 제어를 구성하려면**

1. 를 열고 Amazon OpenSearch Service로 AWS Management Console 이동합니다.

1. 탐색 창의 **서버리스**에서 **보안**을 선택한 다음 **인증**을 선택합니다.

1. **IAM 페더레이션** 섹션에서 **편집**을 선택합니다.

   이 구성을 사용하여 SAML 속성 기반 세분화된 액세스 제어를 제어할 수 있습니다. IAM 페더레이션은 기본적으로 비활성화되어 있습니다.

1. **IAM 페더레이션 활성화**를 선택합니다.

1. Okta에서 정의한 `subjectKey` 및 `roleKey` 값을 입력합니다.

   자세한 내용은 [세분화된 액세스 제어를 위한 SAML 속성](#saml-fgac-key-attributes) 단원을 참조하십시오.

1. **저장**을 선택합니다.

1. 탐색 창의 **서버리스**에서 **데이터 액세스 정책**을 선택합니다.

1. 기존 정책을 업데이트하거나 새 정책을 생성합니다.

1. 규칙을 확장하고 **위탁자 추가**를 선택한 다음 **IAM 페더레이션 사용자 및 그룹**을 선택합니다.

1. 필요한 위탁자를 추가하고 **저장**을 선택합니다.

1. **권한 부여**를 선택합니다.

1. 이 규칙에서 다음을 수행합니다.
   + 선택한 위탁자에 대해 정의할 권한을 선택합니다.
   + 권한을 적용할 컬렉션을 지정합니다.
   + 인덱스 수준 권한을 정의합니다(선택 사항).
**참고**  
여러 규칙을 생성하여 여러 위탁자 그룹에 서로 다른 권한을 할당할 수도 있습니다.

1. 완료하였으면 **저장**을 선택합니다.

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

또는 CLI를 사용하여 아래와 같이 컬렉션에 대한 보안 구성을 생성할 수 있습니다.

```
aws opensearchserverless create-security-config --region "region"  --type iamfederation --name "configuration_name" --description "description" --iam-federation-options '{"groupAttribute":"GroupKey","userAttribute":"UserKey"}'
```