

# Athena에 대한 페더레이션 액세스를 위해 Lake Formation과 JDBC 또는 ODBC 드라이버 사용
<a name="security-athena-lake-formation-jdbc"></a>

Athena JDBC 및 ODBC 드라이버는 Okta 및 Microsoft Active Directory Federation Services(AD FS) 자격 증명 공급자를 사용하여 Athena에 SAML 2.0 연합을 지원합니다. Amazon Athena와 AWS Lake Formation이(가) 통합되면서 기업 자격 증명으로 Athena에 대한 SAML 기반 인증이 가능해졌습니다. Lake Formation과 AWS Identity and Access Management(IAM)을(를) 사용하면 SAML 사용자가 사용할 수 있는 데이터에 대해 세분화된 열 수준 액세스 제어를 유지할 수 있습니다. Athena JDBC 및 ODBC 드라이버가 있으면 도구 또는 프로그래밍 방식 액세스에 연합 액세스를 이용할 수 있습니다.

Athena 사용하여 Lake Formation에서 제어하는 데이터 원본에 액세스하려면 자격 증명 공급자(IdP)와 AWS Identity and Access Management(IAM) 역할을 구성하여 SAML 2.0 연합을 활성화해야 합니다. 자세한 단계는 [자습서: Lake Formation 및 JDBC를 사용하여 Athena에 대한 Okta 사용자의 페더레이션 액세스 구성](security-athena-lake-formation-jdbc-okta-tutorial.md) 단원을 참조하세요.

## 사전 조건
<a name="security-athena-lake-formation-jdbc-prerequisites"></a>

연합 액세스를 위해 Amazon Athena 및 Lake Formation을 사용하려면 다음 요구 사항을 충족해야 합니다.
+ Okta 또는 Microsoft AD FS(Active Directory Federation Services) 등의 기존 SAML 기반 자격 증명 공급자를 이용하여 회사 자격 증명을 관리합니다.
+ AWS Glue Data Catalog를 메타데이터 스토어로 사용합니다.
+ AWS Glue Data Catalog의 데이터베이스, 테이블 및 열에 액세스할 수 있는 권한을 Lake Formation에서 정의하고 관리합니다. 자세한 내용은 [AWS Lake Formation 개발자 안내서](https://docs.aws.amazon.com/lake-formation/latest/dg/)를 참조하세요.
+ [Athena JDBC 드라이버](https://docs.aws.amazon.com/athena/latest/ug/connect-with-jdbc.html) 버전 2.0.14 이상 또는 [Athena ODBC 드라이버](connect-with-odbc.md) 버전 1.1.3 이상을 사용합니다.

## 고려 사항 및 제한 사항
<a name="security-athena-lake-formation-jdbc-considerations-and-limitations"></a>

Athena JDBC 또는 ODBC 드라이버와 Lake Formation을 사용하여 Athena 대한 연합 액세스를 구성할 때는 다음 사항에 유의해야 합니다.
+ 현재 Athena JDBC 및 ODBC 드라이버는 Okta, Microsoft Active Directory Federation Services(AD FS) 및 Azure AD ID 제공업체를 지원합니다. Athena JDBC 드라이버에는 다른 자격 증명 공급자를 사용할 수 있게 확장 가능한 일반 SAML 클래스가 있지만 Athena에 사용할 다른 자격 증명 공급자(IdP)를 활성화하는 사용자 지정 익스텐션에 대한 지원이 제한될 수 있습니다.
+ JDBC 및 ODBC 드라이버를 사용한 연동 액세스는 IAM Identity Center의 신뢰할 수 있는 ID 전파 기능과 호환되지 않습니다.
+ 현재는 Athena 콘솔을 사용하여 Athena에서의 IdP 및 SAML 사용 지원을 구성할 수 없습니다. 이 지원을 구성하려면 서드 파티 자격 증명 공급자, Lake Formation 및 IAM 관리 콘솔, JDBC 또는 ODBC 드라이버 클라이언트를 사용합니다.
+ 개발자는 Lake Formation 및 Athena에 사용할 자격 증명 공급자 및 SAML을 구성하기 전에 [SAML 2.0 사양](https://www.oasis-open.org/standards#samlv2.0)을 이해하고 자신의 자격 증명 공급자에서 어떻게 작동하는지 파악해야 합니다.
+ SAML 공급자와 Athena JDBC 및 ODBC 드라이버는 서드 파티에서 제공하므로 그 사용과 관련된 문제에 대해 AWS를 통한 지원은 제한될 수 있습니다.

**Topics**
+ [사전 조건](#security-athena-lake-formation-jdbc-prerequisites)
+ [고려 사항 및 제한 사항](#security-athena-lake-formation-jdbc-considerations-and-limitations)
+ [자습서: Lake Formation 및 JDBC를 사용하여 Athena에 대한 Okta 사용자의 페더레이션 액세스 구성](security-athena-lake-formation-jdbc-okta-tutorial.md)

# 자습서: Lake Formation 및 JDBC를 사용하여 Athena에 대한 Okta 사용자의 페더레이션 액세스 구성
<a name="security-athena-lake-formation-jdbc-okta-tutorial"></a>

이 자습서에서는 Athena의 SAML 기반 연합 사용을 활성화하기 위해 Okta, AWS Lake Formation, AWS Identity and Access Management 권한 및 Athena JDBC 드라이버를 구성하는 방법을 보여줍니다 Lake Formation은 SAML 기반 사용자에게 Athena에서 사용 가능한 데이터에 대해 세분화된 액세스 제어를 제공합니다. 이 구성을 설정하기 위해 자습서에서는 Okta 개발자 콘솔, AWS IAM 및 Lake Formation 콘솔, SQL Workbench/J tool을 사용합니다.
<a name="security-athena-lake-formation-jdbc-okta-tutorial-prerequisites"></a>
**사전 조건**  
이 자습서는 다음을 이미 완료했다고 가정합니다.
+ Amazon Web Services 계정을 생성했습니다. 계정을 만들려면 [Amazon Web Services 홈페이지](https://aws.amazon.com/)를 방문하세요.
+ Amazon S3에서 Athena에 대한 [쿼리 결과 위치를 설정](query-results-specify-location.md)했습니다.
+ Lake Formation에 [Amazon S3 데이터 버킷 위치를 등록](https://docs.aws.amazon.com/lake-formation/latest/dg/register-data-lake.html)했습니다.
+ Amazon S3의 데이터를 가리키는 [AWS Glue 데이터 카탈로그](https://docs.aws.amazon.com/glue/latest/dg/what-is-glue.html)의 [데이터베이스](https://docs.aws.amazon.com/glue/latest/dg/define-database.html) 및 [테이블](https://docs.aws.amazon.com/glue/latest/dg/tables-described.html)을 정의했습니다.
  + 테이블을 아직 정의하지 않았다면 [AWS Glue 크롤러를 실행](https://docs.aws.amazon.com/glue/latest/dg/add-crawler.html)하거나 Athena를 사용해 액세스하려는 데이터에 대해 [하나의 데이터베이스와 하나 이상의 테이블을 정의](work-with-data.md)합니다.
  + 이 자습서는 [뉴욕시 택시 이동 데이터 집합](https://registry.opendata.aws/nyc-tlc-trip-records-pds/)에 기반한 테이블을 사용합니다. 이 테이블은 [Registry of Open Data on AWS](https://registry.opendata.aws/)에 제공되어 있습니다. 이 자습서에서는 데이터베이스 이름 `tripdb`와 테이블 이름 `nyctaxi`를 사용합니다.

**Topics**
+ [1단계: Okta 계정 생성](#security-athena-lake-formation-jdbc-okta-tutorial-step-1-create-an-okta-account)
+ [2단계: Okta에 사용자 및 그룹 추가](#security-athena-lake-formation-jdbc-okta-tutorial-step-2-set-up-an-okta-application-for-saml-authentication)
+ [3단계: SAML 인증을 위한 Okta 애플리케이션 설정](#security-athena-lake-formation-jdbc-okta-tutorial-step-3-set-up-an-okta-application-for-saml-authentication)
+ [4단계: AWS SAML 자격 증명 공급자 및 Lake Formation 액세스 IAM 역할 생성](#security-athena-lake-formation-jdbc-okta-tutorial-step-4-create-an-aws-saml-identity-provider-and-lake-formation-access-IAM-role)
+ [5단계: Okta 애플리케이션에 IAM 역할 및 SAML 자격 증명 공급자 추가](#security-athena-lake-formation-jdbc-okta-tutorial-step-5-update-the-okta-application-with-the-aws-role-and-saml-identity-provider)
+ [6단계: AWS Lake Formation을(를) 통해 사용자 및 그룹 권한 부여](#security-athena-lake-formation-jdbc-okta-tutorial-step-6-grant-permissions-through-aws-lake-formation)
+ [7단계: Athena JDBC 클라이언트를 통해 액세스 권한 확인](#security-athena-lake-formation-jdbc-okta-tutorial-step-7-verify-access-through-athena-jdbc-client)
+ [결론](#security-athena-lake-formation-jdbc-okta-tutorial-conclusion)
+ [관련 리소스](#security-athena-lake-formation-jdbc-okta-tutorial-related-resources)

## 1단계: Okta 계정 생성
<a name="security-athena-lake-formation-jdbc-okta-tutorial-step-1-create-an-okta-account"></a>

이 자습서는 Okta를 SAML 기반 자격 증명 공급자로 사용합니다. 아직 Okta 계정이 없다면 무료로 계정을 생성할 수 있습니다. SAML 인증을 위한 Okta 애플리케이션을 만들려면 Okta 계정이 필요합니다.

**Okta 계정을 생성하려면**

1. Okta를 사용하려면 [Okta 개발자 가입 페이지](https://developer.okta.com/signup/)를 탐색해 무료 Okta 평가판 계정을 만듭니다. 개발자 에디션 서비스는 Okta가 [developer.okta.com/pricing](https://developer.okta.com/pricing)에 지정한 한도까지 무료입니다.

1. 활성화 이메일을 받으면 계정을 활성화하세요.

   Okta 도메인 이름이 할당됩니다. 참조용으로 도메인 이름을 저장합니다. 나중에 Athena에 연결하는 JDBC 문자열에 이 도메인 이름(*<okta-idp-domain>*)을 사용합니다.

## 2단계: Okta에 사용자 및 그룹 추가
<a name="security-athena-lake-formation-jdbc-okta-tutorial-step-2-set-up-an-okta-application-for-saml-authentication"></a>

이 단계에서는 Okta 콘솔을 사용하여 다음 작업을 수행합니다.
+ 2개의 Okta 사용자를 만듭니다.
+ 2개의 Okta 그룹을 만듭니다.
+ 각 Okta 그룹에 1개의 Okta 사용자를 추가합니다.

**Okta에 사용자를 추가하려면**

1. Okta 계정을 활성화한 후 할당된 Okta 도메인에 관리 사용자로 로그인합니다.

1. 왼쪽 탐색 창에서 **디렉터리(Directory)**와 **사람(People)**을 차례로 선택합니다.

1. **사람 추가(Add Person)**를 선택해 JDBC 드라이버를 통해 Athena에 액세스할 새 사용자를 추가합니다.  
![\[사람 추가(Add Person)를 선택합니다.\]](http://docs.aws.amazon.com/ko_kr/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-3.png)

1. **사람 추가(Add Person)** 대화 상자에 필수 정보를 입력합니다.
   + **이름(First name)**과 **성(Last name)**에 값을 입력합니다. 이 자습서에서는 *athena-okta-user*를 사용합니다.
   + **사용자 이름(Username)**과 **기본 이메일(Primary email)**을 입력합니다. 이 자습서에서는 *athena-okta-user@anycompany.com*을 사용합니다.
   + **암호(Password)**에서 **관리자별 설정(Set by admin)**을 선택한 다음 암호를 제공합니다. 이 자습서에서는 **사용자가 첫 로그인할 때 암호를 변경해야 함(User must change password on first login)** 옵션을 선택 취소했습니다. 각자의 보안 요구 사항은 다를 수 있습니다.  
![\[Okta 애플리케이션에 사용자 추가\]](http://docs.aws.amazon.com/ko_kr/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-4.png)

1. **다른 사용자 저장 및 추가(Save and Add Another)**를 선택합니다.

1. 다른 사용자에 대한 정보를 입력합니다. 이 예제에서는 비즈니스 분석가 사용자 *athena-ba-user@anycompany.com*를 추가합니다.  
![\[Okta 애플리케이션에 사용자 추가\]](http://docs.aws.amazon.com/ko_kr/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-4a.png)

1. **저장(Save)**을 선택합니다.

다음 절차에서는 “비즈니스 분석가” 그룹과 “개발자” 그룹을 추가하여 Athena JDBC 드라이버를 통해 두 Okta 그룹에 대한 액세스를 제공합니다.

**Okta 그룹을 추가하려면**

1. Okta 탐색 창에서 **디렉터리(Directory)**와 **그룹(Groups)**을 차례로 선택합니다.

1. **그룹(Groups)** 페이지에서 **그룹 추가(Add Group)**를 선택합니다.  
![\[Add Group(그룹 추가)을 선택합니다.\]](http://docs.aws.amazon.com/ko_kr/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-4c.png)

1. **그룹 추가(Add Group)** 대화 상자에 필수 정보를 입력합니다.
   + **이름(Name)**에 *lf-business-analyst*를 입력합니다.
   + **그룹 설명(Group Description)**에 *비즈니스 분석가*를 입력합니다.  
![\[Okta 그룹 추가\]](http://docs.aws.amazon.com/ko_kr/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-4d.png)

1. **Add Group(그룹 추가)**을 선택합니다.

1. **그룹(Groups)** 페이지에서 **그룹 추가(Add Group)**를 다시 선택합니다. 이번에는 개발자 그룹에 대한 정보를 입력합니다.

1. 필요한 정보를 입력합니다.
   + **이름(Name)**에 *lf-developer*를 입력합니다.
   + **그룹 설명(Group Description)**에 *개발자*를 입력합니다.

1. **Add Group(그룹 추가)**을 선택합니다.

이제 두 사용자와 두 그룹이 있으므로 각 그룹에 사용자를 추가할 준비가 되었습니다.

**그룹에 사용자를 추가하려면**

1. **그룹(Groups)** 페이지에서 방금 생성한 **lf-developer** 그룹을 선택합니다. 개발자로 생성한 Okta 사용자 중 하나를 이 그룹에 추가합니다.  
![\[lf-developer를 선택합니다.\]](http://docs.aws.amazon.com/ko_kr/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-4f.png)

1. **사람 관리(Manage People)**를 선택합니다.  
![\[사람 관리(Manage People)를 선택합니다.\]](http://docs.aws.amazon.com/ko_kr/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-4g.png)

1. **구성원 아님(Not Members)** 목록에서 **athena-okta-user**를 선택합니다.  
![\[구성원 목록에 추가할 사용자를 선택합니다.\]](http://docs.aws.amazon.com/ko_kr/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-4h.png)

   사용자에 대한 항목이 왼쪽에 있는 **구성원 아님(Not Members)** 목록에서 오른쪽의 **구성원(Members)** 목록으로 이동합니다.  
![\[Okta 사용자가 Okta 그룹에 추가되었습니다.\]](http://docs.aws.amazon.com/ko_kr/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-4i.png)

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

1. **그룹으로 돌아가기(Back to Group)**를 선택하거나 **디렉터리(Directory)**를 선택한 다음 **그룹(Groups)**을 선택합니다.

1. **lf-business-analyst** 그룹을 선택합니다.

1. **사람 관리(Manage People)**를 선택합니다.

1. **athena-ba-user**를 **lf-business-analyst** 그룹의 **구성원** 목록에 추가한 다음 **저장(Save)**을 선택합니다.

1. **그룹으로 돌아가기(Back to Group)**를 선택하거나 **디렉터리(Directory)**, **그룹(Groups)**을 선택합니다.

   이제 **그룹(Groups)** 페이지에서 각 그룹에 한 명의 Okta 사용자가 있는 것을 볼 수 있습니다.  
![\[Okta 콘솔의 각 Okta 그룹에 한 명의 사용자가 추가되었습니다.\]](http://docs.aws.amazon.com/ko_kr/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-4j.png)

## 3단계: SAML 인증을 위한 Okta 애플리케이션 설정
<a name="security-athena-lake-formation-jdbc-okta-tutorial-step-3-set-up-an-okta-application-for-saml-authentication"></a>

이 단계에서는 Okta 개발자 콘솔을 사용하여 다음 작업을 수행합니다.
+ AWS에 사용할 SAML 애플리케이션을 추가합니다.
+ Okta 사용자에게 애플리케이션을 할당합니다.
+ Okta 그룹에게 애플리케이션을 할당합니다.
+ 나중에 AWS에 사용할 수 있도록 최종적인 자격 증명 공급자 메타데이터를 다운로드합니다.

**SAML 인증을 위한 애플리케이션을 추가하려면**

1. Okta 탐색 창에서 **애플리케이션(Applications)**, **애플리케이션(Applications)**을 선택하여 Athena에 대한 SAML 인증용 Okta 애플리케이션을 구성할 수 있습니다.

1. **앱 카탈로그 찾아보기(Browse App Catalog)**를 클릭합니다.

1. 검색 상자에 **Redshift**을(를) 입력합니다.

1. **Amazon Web Services Redshift**를 선택합니다. 이 자습서의 Okta 애플리케이션은 Amazon Redshift를 위한 기존의 SAML 통합을 사용합니다.  
![\[Amazon Web Services Redshift를 선택합니다.\]](http://docs.aws.amazon.com/ko_kr/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-7.png)

1. **Amazon Web Services Redshift** 페이지에서 **추가(Add)**를 선택해 Amazon Redshift용 SAML 기반 애플리케이션을 생성합니다.  
![\[추가(Add)를 선택해 SAML 기반 애플리케이션을 생성합니다.\]](http://docs.aws.amazon.com/ko_kr/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-8.png)

1. **애플리케이션 레이블(Application label)**에 `Athena-LakeFormation-Okta`를 입력하고 **완료(Done)**를 선택합니다.  
![\[Okta 애플리케이션의 이름을 입력합니다.\]](http://docs.aws.amazon.com/ko_kr/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-9.png)

이제 Okta 애플리케이션을 생성되었고, 생성한 사용자 및 그룹에 이 애플리케이션을 할당할 수 있습니다.

**애플리케이션을 사용자 및 그룹에 할당하려면**

1. **애플리케이션(Applications)** 페이지에서 **Athena-LakeFormation-Okta** 애플리케이션을 선택합니다.

1. **할당(Assignments)** 탭에서 **할당(Assign)**, **사람에게 할당(Assign to People)**을 차례로 선택합니다.  
![\[할당(Assign), 사람에게 할당(Assign to People)을 선택합니다.\]](http://docs.aws.amazon.com/ko_kr/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-10.png)

1. **Athena-LakeFormation-Okta를 사람에게 할당(Assign Athena-LakeFormation-Okta to People)** 대화 상자에서 이전에 생성했던 **athena-okta-user** 사용자를 찾습니다.

1. **할당(Assign)**을 선택해 사용자를 애플리케이션에 할당합니다.  
![\[할당을 선택합니다.\]](http://docs.aws.amazon.com/ko_kr/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-11.png)

1. **저장하고 돌아가기(Save and Go Back)**를 선택합니다.

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

1. **Athena-LakeFormation-Okta** 애플리케이션에 대한 **할당(Assignments)** 탭에서 **할당(Assign)**, **그룹에게 할당(Assign to Groups)**을 차례로 선택합니다.

1. **lf-business-analyst**에서 **할당(Assign)**을 선택해 **Athena-LakeFormation-Okta** 애플리케이션을 **lf-business-analyst** 그룹에 할당한 다음 **완료(Done)**를 선택합니다.  
![\[Okta 사용자 그룹에 Okta 애플리케이션 할당\]](http://docs.aws.amazon.com/ko_kr/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-12b.png)

   해당 그룹이 애플리케이션의 그룹 목록에 나타납니다.  
![\[Okta 애플리케이션이 Okta 그룹에 할당됩니다.\]](http://docs.aws.amazon.com/ko_kr/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-12c.png)

이제 AWS에 사용할 자격 증명 공급자 애플리케이션 메타데이터를 다운로드할 준비가 되었습니다..

**애플리케이션 메타데이터를 다운로드하려면**

1. Okta 애플리케이션 **로그인(Sign On)** 탭을 선택한 다음 **자격 증명 공급자 메타데이터(Identity Provider metadata)**를 마우스 오른쪽 버튼으로 클릭합니다.  
![\[자격 증명 공급자 메타데이터(Identity Provider metadata)를 마우스 오른쪽 버튼으로 클릭합니다.\]](http://docs.aws.amazon.com/ko_kr/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-13.png)

1. **다른 이름으로 링크 저장(Save Link As)**을 선택해 XML 형식의 자격 증명 공급자 메타데이터를 파일에 저장합니다. 알아볼 수 있는 이름을 지정합니다(예:`Athena-LakeFormation-idp-metadata.xml`).  
![\[자격 증명 공급자 메타데이터 저장\]](http://docs.aws.amazon.com/ko_kr/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-14.png)

## 4단계: AWS SAML 자격 증명 공급자 및 Lake Formation 액세스 IAM 역할 생성
<a name="security-athena-lake-formation-jdbc-okta-tutorial-step-4-create-an-aws-saml-identity-provider-and-lake-formation-access-IAM-role"></a>

이 단계에서는 AWS Identity and Access Management(IAM) 콘솔을 사용하여 다음 작업을 수행합니다.
+ AWS에 대한 자격 증명 공급자를 생성합니다.
+ Lake Formation 액세스를 위한 IAM 역할을 생성합니다.
+ AmazonAthenaFullAccess 관리형 정책을 역할에 추가합니다.
+ Lake Formation 및 AWS Glue에 대한 정책을 역할에 축가합니다.
+ Athena 쿼리 결과에 대한 정책을 역할에 추가합니다.

**AWS SAML 자격 증명 공급자를 생성하려면**

1. **Amazon Web Services 계정** **콘솔**에 **Amazon Web Services 계정 관리자**로 로그인하고 **IAM** 콘솔([https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/))을 탐색합니다.

1. 탐색 창에서 **자격 증명 공급자(Identity providers)**를 선택한 다음 **공급자 추가(Add provider)**를 클릭합니다.

1. **공급자 구성(Configure provider)** 화면에 다음 정보를 입력합니다.
   + **공급자 유형(Provider type)**에 **SAML**을 선택합니다.
   + **공급자 이름(Provider name)**에 `AthenaLakeFormationOkta`를 입력합니다.
   + **메타데이터 문서(Metadata document)**에서 **파일 선택(Choose file)** 옵션을 사용하여 다운로드한 자격 증명 공급자(IdP) 메타데이터 XML 파일을 업로드합니다.

1. **공급자 추가(Add Provider)**를 선택합니다.

다음으로 AWS Lake Formation 액세스를 위한 IAM 역할을 생성합니다. 역할에 두 개의 인라인 정책을 추가합니다. 한 정책은 Lake Formation 및 AWS Glue API에 액세스할 수 있는 권한을 제공합니다. 다른 정책은 Athena와 Amazon S3의 Athena 쿼리 결과 위치에 대한 액세스 권한을 제공합니다.

**AWS Lake Formation 액세스를 위한 IAM 역할을 생성하려면**

1. IAM 콘솔의 탐색 창에서 **역할(Roles)**을 선택하고 **역할 생성(Create role)**을 선택합니다.

1. **역할 생성(Create role)** 페이지에서 다음 단계를 수행합니다.  
![\[SAML 2.0을 사용하기 위한 IAM 역할을 구성합니다.\]](http://docs.aws.amazon.com/ko_kr/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-20.png)

   1. **신뢰할 수 있는 엔터티 유형 선택(Select type of trusted entity)**에서 **SAML 2.0 연합(SAML 2.0 Federation)**을 선택합니다.

   1. **SAML 공급자(SAML provider)**에서 **AthenaLakeFormationOkta**를 선택합니다.

   1. **SAML 공급자**에서 **프로그래밍 방식 및 AWS Management Console 액세스 허용** 옵션을 선택합니다.

   1. **다음: 권한**을 선택합니다.

1. **권한 정책 연결(Attach Permissions policies)** 페이지에서 **필터 정책(Filter policies)**에 **Athena**를 입력합니다.

1. **AmazonAthenaFullAccess** 관리형 정책을 선택하고 **다음: 태그(Next: Tags)**를 선택합니다.  
![\[AmazonAthenaFullAccess 관리형 정책을 IAM 역할에 연결\]](http://docs.aws.amazon.com/ko_kr/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-21.png)

1. **Add tags(태그 추가)** 페이지에서 **Next: Review(다음: 검토)**를 선택합니다.

1. **검토(Review)** 페이지에서 **역할 이름(Role name)**에 역할의 이름(예: *Athena-LakeFormation-OktaRole*)을 입력한 다음 **역할 생성(Create role)**을 선택합니다.  
![\[IAM 역할의 이름을 입력합니다.\]](http://docs.aws.amazon.com/ko_kr/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-22.png)

그런 다음 Lake Formation에 대한 액세스를 허용하는 인라인 정책, AWS Glue API, Amazon S3의 Athena 쿼리 결과를 추가합니다.

IAM 정책을 사용할 때마다 IAM 모범 사례를 따라야 합니다. 자세한 내용은 *IAM 사용 설명서*의 [IAM 보안 모범 사례](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)를 참조하세요.

**Lake Formation 및 AWS Glue에 대한 역할에 인라인 정책을 추가하려면**

1. IAM 콘솔의 역할 목록에서 새로 생성된 `Athena-LakeFormation-OktaRole`을 선택합니다.

1. 역할에 대한 **요약(Summary)** 페이지의 **권한(Permissions)** 탭에서 **인라인 정책 추가(Add inline policy)**를 선택합니다.

1. **정책 생성** 페이지에서 **JSON**을 선택합니다.

1. Lake Formation 및 AWS Glue API에 대한 액세스 권한을 제공하는 다음과 같은 인라인 정책을 추가합니다.

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": {
           "Effect": "Allow",
           "Action": [
               "lakeformation:GetDataAccess",
               "glue:GetTable",
               "glue:GetTables",
               "glue:GetDatabase",
               "glue:GetDatabases",
               "glue:CreateDatabase",
               "glue:GetUserDefinedFunction",
               "glue:GetUserDefinedFunctions"
           ],
           "Resource": "*"
       }
   }
   ```

------

1. **정책 검토**를 선택합니다.

1. **이름(Name)**에 정책의 이름을 입력합니다(예: **LakeFormationGlueInlinePolicy**).

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

**Athena 쿼리 결과 위치에 대한 역할에 인라인 정책을 추가하려면**

1. `Athena-LakeFormation-OktaRole` 역할에 대한 **요약(Summary)** 페이지의 **권한(Permissions)** 탭에서 **인라인 정책 추가(Add inline policy)**를 선택합니다.

1. **정책 생성** 페이지에서 **JSON**을 선택합니다.

1. Athena 쿼리 결과 위치에 대한 역할 액세스를 허용하는 다음과 같은 인라인 정책을 추가합니다. 예제의 *<athena-query-results-bucket>* 자리 표시자를 해당 Amazon S3 버킷의 이름으로 바꿉니다.

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "AthenaQueryResultsPermissionsForS3",
               "Effect": "Allow",
               "Action": [
                   "s3:ListBucket",
                   "s3:PutObject",
                   "s3:GetObject"
               ],
               "Resource": [
                   "arn:aws:s3:::<athena-query-results-bucket>",
                   "arn:aws:s3:::<athena-query-results-bucket>/*"
               ]
           }
       ]
   }
   ```

------

1. **정책 검토**를 선택합니다.

1. **이름(Name)**에 정책의 이름을 입력합니다(예: **AthenaQueryResultsInlinePolicy**).

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

그런 다음 Lake Formation 액세스 역할의 ARN과 생성한 SAML 공급자의 ARN을 복사합니다. 이 정보는 자습서의 다음 단원에서 Okta SAML 애플리케이션을 구성할 때 필요합니다.

**역할 ARN 및 SAML 자격 증명 공급자 ARN을 복사하려면**

1. IAM 콘솔의 **요약(Summary)** 페이지에서 `Athena-LakeFormation-OktaRole` 역할에 대해 **역할 ARN(Role ARN)** 옆에 있는 **클립보드로 복사(Copy to clipboard)**를 선택합니다. ARN의 형식은 다음과 같습니다.

   ```
   arn:aws:iam::<account-id>:role/Athena-LakeFormation-OktaRole
   ```

1. 나중에 참조할 수 있도록 전체 ARN을 안전하게 저장합니다.

1. IAM 콘솔 탐색 창에서 **자격 증명 공급자(Identity providers)**를 선택합니다.

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

1. **요약(Summary)** 페이지에서 **공급자 ARN(Provider ARN)** 옆의 **클립보드로 복사(Copy to clipboard)** 아이콘을 선택합니다. ARN은 다음과 같은 양식이어야 합니다.

   ```
   arn:aws:iam::<account-id>:saml-provider/AthenaLakeFormationOkta
   ```

1. 나중에 참조할 수 있도록 전체 ARN을 안전하게 저장합니다.

## 5단계: Okta 애플리케이션에 IAM 역할 및 SAML 자격 증명 공급자 추가
<a name="security-athena-lake-formation-jdbc-okta-tutorial-step-5-update-the-okta-application-with-the-aws-role-and-saml-identity-provider"></a>

이 단계에서는 Okta 개발자 콘솔로 돌아가서 다음 작업을 수행합니다.
+ Okta 애플리케이션에 사용자 및 그룹 Lake Formation URL 속성을 추가합니다.
+ 자격 증명 공급자의 ARN과 IAM 역할의 ARN을 Okta 애플리케이션에 추가합니다.
+ Okta 애플리케이션 ID를 복사합니다. Okta 애플리케이션 ID는 Athena에 연결하는 JDBC 프로파일에 필요합니다.

**Okta 애플리케이션에 사용자 및 그룹 Lake Formation URL 속성을 추가하려면**

1. Okta 개발자 콘솔에 로그인합니다.

1. **애플리케이션(Applications)** 탭을 선택한 다음 `Athena-LakeFormation-Okta` 애플리케이션을 선택합니다.

1. 애플리케이션에 대한 **로그인(Sign On)** 탭을 선택한 다음 **편집(Edit)**을 선택합니다.  
![\[Okta 애플리케이션을 편집합니다.\]](http://docs.aws.amazon.com/ko_kr/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-24.png)

1. **속성(선택 사항)(Attributes (optional))**을 클릭하여 확장합니다.  
![\[Okta 애플리케이션에 사용자 Lake Formation URL 속성을 추가합니다.\]](http://docs.aws.amazon.com/ko_kr/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-25.png)

1. **속성 문(선택 사항)(Attribute Statements (optional))**에 다음 속성을 추가합니다.
   + **이름**에 **https://lakeformation.amazon.com/SAML/Attributes/Username**를 입력합니다.
   + [**값(Value)**]에 **user.login**을 입력합니다.

1. **그룹 속성 문(선택 사항)(Group Attribute Statements (optional))**에 다음 속성을 추가합니다.
   + **이름**에 **https://lakeformation.amazon.com/SAML/Attributes/Groups**를 입력합니다.
   + **이름 형식(Name format)**에 **Basic**을 입력합니다.
   + **필터(Filter)**에서 **정규식 일치(Matches regex)**를 선택한 다음 필터 상자에 **.\$1**을 입력합니다.  
![\[Okta 애플리케이션에 그룹 Lake Formation URL 속성을 추가합니다.\]](http://docs.aws.amazon.com/ko_kr/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-25a.png)

1. **고급 로그인 설정(Advanced Sign-On Settings)** 섹션까지 아래로 스크롤하고, 여기서 자격 증명 공급자 및 IAM 역할 ARN을 Okta 애플리케이션에 추가합니다.

**자격 증명 공급자 및 IAM 역할의 ARN을 Okta 애플리케이션에 추가하려면**

1. **Idp ARN 및 역할 ARN(Idp ARN and Role ARN)**에 AWS 자격 증명 공급자 ARN과 역할 ARN을 *<saml-arn>*,*<role-arn>* 형식의 쉼표로 구분된 값으로 입력합니다. 결합된 문자열은 다음과 같아야 합니다.

   ```
   arn:aws:iam::<account-id>:saml-provider/AthenaLakeFormationOkta,arn:aws:iam::<account-id>:role/Athena-LakeFormation-OktaRole
   ```  
![\[Okta 애플리케이션에서 자격 증명 공급자 ARN 및 IAM 역할 ARN을 입력합니다.\]](http://docs.aws.amazon.com/ko_kr/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-26.png)

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

다음으로 Okta 애플리케이션 ID를 복사합니다. 나중에 Athena에 연결하는 JDBC 문자열에 이 정보가 필요합니다.

**Okta 애플리케이션 ID를 찾고 복사하려면**

1. Okta 애플리케이션의 **일반(General)** 탭을 선택합니다.  
![\[Okta 애플리케이션의 일반(General) 탭을 선택합니다.\]](http://docs.aws.amazon.com/ko_kr/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-27.png)

1. 아래로 스크롤하여 **앱 포함 링크(App Embed Link)** 섹션으로 이동합니다.

1. **포함 링크(Embed Link)**에서 URL의 Okta 애플리케이션 ID 부분을 복사하고 안전하게 저장합니다. Okta 애플리케이션 ID는 URL에서 `amazon_aws_redshift/` 뒤부터 다음 슬래시 앞까지의 부분입니다. 예를 들어, URL에 `amazon_aws_redshift/aaa/bbb`가 포함된 경우 애플리케이션 ID는 `aaa`입니다.  
![\[Okta 애플리케이션의 ID를 복사합니다.\]](http://docs.aws.amazon.com/ko_kr/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-28.png)

**참고**  
포함 링크(Embed link)를 사용하여 Athena 콘솔에 직접 로그인하여 데이터베이스를 볼 수 없습니다. SAML 사용자 및 그룹에 대한 Lake Formation 권한은 JDBC 또는 ODBC 드라이버를 사용하여 Athena 쿼리를 제출할 때만 인식됩니다. JDBC 드라이버를 사용하여 Athena에 연결하는 SQL Workbench/J 도구를 사용하여 데이터베이스를 볼 수 있습니다. SQL Workbench/J 도구는 [7단계: Athena JDBC 클라이언트를 통해 액세스 권한 확인](#security-athena-lake-formation-jdbc-okta-tutorial-step-7-verify-access-through-athena-jdbc-client)에서 다룹니다.

## 6단계: AWS Lake Formation을(를) 통해 사용자 및 그룹 권한 부여
<a name="security-athena-lake-formation-jdbc-okta-tutorial-step-6-grant-permissions-through-aws-lake-formation"></a>

이 단계에서는 Lake Fomation 콘솔을 사용하여 SAML 사용자 및 그룹에게 테이블에 대한 권한을 부여합니다. 다음 작업을 수행할 수 있습니다.
+ Okta SAML 사용자의 ARN 및 테이블에 대한 연결된 사용자 권한을 지정합니다.
+ Okta SAML 사용자의 ARN 및 테이블에 대한 연결된 사용자 권한을 지정합니다.
+ 부여한 권한을 확인합니다.

**Lake Formation에서 Okta 사용자에 대해 권한을 부여하려면**

1. 데이터 레이크 관리자로 AWS Management Console에 로그인합니다.

1. Lake Formation 콘솔([https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/))을 엽니다.

1. 탐색 창에서 **테이블(Tables)**을 선택한 다음 권한을 부여할 테이블을 선택합니다. 이 자습서에서는 `tripdb` 데이터베이스의 `nyctaxi` 테이블을 사용합니다.  
![\[권한을 부여할 테이블을 선택합니다.\]](http://docs.aws.amazon.com/ko_kr/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-29.png)

1. **작업(Actions)**에서 **권한 부여(Grant)**를 선택합니다.  
![\[권한 부여(Grant)를 선택합니다.\]](http://docs.aws.amazon.com/ko_kr/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-30.png)

1. **권한 부여(Grant permissions)** 대화 상자에 다음 정보를 입력합니다.

   1. **SAML 및 Amazon Quick 사용자 및 그룹**에 다음 형식으로 Okta SAML 사용자 ARN을 입력합니다.

      ```
      arn:aws:iam::<account-id>:saml-provider/AthenaLakeFormationOkta:user/<athena-okta-user>@<anycompany.com>       
      ```

   1. **열(Columns)**에서 **필터 유형을 선택**하고, **열 포함(Include columns)** 또는 **열 제외(Exclude columns)** 옵션을 선택합니다.

   1. 필터 아래의 **하나 이상의 열 선택(Choose one or more columns)** 드롭다운을 사용하여 사용자에 대해 포함하거나 제외할 열을 지정합니다.

   1. **테이블 권한(Table permissions)**에서 **선택(Select)**을 선택합니다. 이 자습서에서는 `SELECT` 권한만 부여하며, 각자의 요구 사항은 다를 수 있습니다.  
![\[Okta 사용자에게 테이블 및 열 수준 권한을 부여합니다.\]](http://docs.aws.amazon.com/ko_kr/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-31.png)

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

이제 Okta 그룹에 대해 비슷한 단계를 수행합니다.

**Lake Formation에서 Okta 사용자에 대해 권한을 부여하려면**

1. Lake Formation 콘솔의 **테이블(Tables)** 페이지에서 **nyctaxi** 테이블이 계속 선택되어 있는지 확인합니다. 

1. **작업(Actions)**에서 **권한 부여(Grant)**를 선택합니다.

1. **권한 부여(Grant permissions)** 대화 상자에 다음 정보를 입력합니다.

   1. **SAML 및 Amazon Quick 사용자 및 그룹**에 다음 형식으로 Okta SAML 그룹 ARN을 입력합니다.

      ```
      arn:aws:iam::<account-id>:saml-provider/AthenaLakeFormationOkta:group/lf-business-analyst
      ```

   1. **열(Columns)**에서 **필터 유형을 선택**하고, **열 포함(Include columns)**을 선택합니다.

   1. **하나 이상의 열 선택(Choose one or more columns)**에서 테이블의 첫 3개 열을 선택합니다.

   1. **테이블 권한(Table permissions)**에서 부여할 특정 액세스 권한을 선택합니다. 이 자습서에서는 `SELECT` 권한만 부여하며, 각자의 요구 사항은 다를 수 있습니다.  
![\[Okta 그룹에 테이블 권한 부여\]](http://docs.aws.amazon.com/ko_kr/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-31b.png)

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

1. 부여한 권한을 확인하려면 **작업(Actions)**, **권한 보기(View permissions)**를 선택합니다.  
![\[부여한 권한을 확인하려면 [권한 보기(View permissions)]를 선택합니다.\]](http://docs.aws.amazon.com/ko_kr/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-32.png)

   `nyctaxi` 테이블에 대한 **데이터 권한** 페이지에 **athena-okta-user** 및 **lf-business-analyst** 그룹에 대한 권한이 표시됩니다.  
![\[Okta 사용자 및 그룹에 부여된 권한 보기\]](http://docs.aws.amazon.com/ko_kr/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-33.png)

## 7단계: Athena JDBC 클라이언트를 통해 액세스 권한 확인
<a name="security-athena-lake-formation-jdbc-okta-tutorial-step-7-verify-access-through-athena-jdbc-client"></a>

이제 Okta SAML 사용자로서 Athena 테스트 연결을 수행하기 위해 JDBC 클라이언트를 사용할 준비가 되었습니다.

이 단원에서는 다음 작업을 수행합니다.
+ 테스트 클라이언트 준비 - Athena JDBC 드라이버를 다운로드하고 SQL 워크벤치를 설치한 다음 드라이버를 워크벤치에 추가합니다. 이 자습서에서는 SQL 워크벤치를 사용하여 Okta 인증을 통해 Athena 액세스하고 Lake Formation 권한을 확인합니다.
+ SQL Workbench에서:
  + Athena Okta 사용자에 대한 연결을 만듭니다.
  + Athena Okta 사용자로 테스트 쿼리를 실행합니다.
  + 비즈니스 분석가 사용자에 대한 연결을 만들고 테스트합니다.
+ Okta 콘솔에서 비즈니스 분석가 사용자를 개발자 그룹에 추가합니다.
+ Lake Formation 콘솔에서 개발자 그룹에 대한 테이블 권한을 구성합니다.
+ SQL 워크벤치에서 비즈니스 분석가 사용자로 테스트 쿼리를 실행하고 권한 변경이 결과에 어떤 영향을 미치는지 확인합니다.

**테스트 클라이언트를 준비하려면**

1. Lake Formation 호환 Athena JDBC 드라이버(버전 2.0.14 이상)를 다운로드하고 [JDBC로 Amazon Athena에 연결](connect-with-jdbc.md)에서 추출합니다.

1. 수정된 Apache 2.0 라이선스에 따라 제공되는 무료 [SQL Workbench/J](https://www.sql-workbench.eu/index.html) SQL 쿼리 도구를 다운로드하고 설치합니다.

1. SQL Workbench에서 **파일(File)**을 선택한 후 **드라이버 관리(Manage Drivers)**를 선택합니다.  
![\[Manage Drivers를 선택합니다.\]](http://docs.aws.amazon.com/ko_kr/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-verify-access-1.png)

1. **드라이버 관리(Manage Drivers)** 대화 상자에서 다음 단계를 수행합니다.

   1. 새 드라이버 아이콘을 선택합니다.

   1. **이름**에 **Athena**를 입력합니다.

   1. **라이브러리(Library)**에서 방금 다운로드한 Simba Athena JDBC `.jar` 파일을 찾아서 선택합니다.

   1. **확인**을 선택합니다.  
![\[Athena JDBC 드라이버를 SQL Workbench에 추가합니다.\]](http://docs.aws.amazon.com/ko_kr/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-verify-access-2.png)

이제 Athena Okta 사용자에 대한 연결을 생성하고 테스트할 준비가 되었습니다.

**Okta 사용자에 대한 연결을 만들려면**

1. **파일(File)**, **연결 창(Connect window)**을 선택합니다.  
![\[연결 창(Connect window)을 선택합니다.\]](http://docs.aws.amazon.com/ko_kr/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-verify-access-3.png)

1. **연결 프로파일(Connection profile)** 대화 상자에서 다음 정보를 입력하여 연결을 생성합니다.
   + 이름 상자에 **Athena\$1Okta\$1User\$1Connection**을 입력합니다.
   + **드라이버(Driver)**에서 Simba Athena JDBC 드라이버를 선택합니다.
   + **VPC**에 대해 다음 중 하나를 수행합니다.
     + 연결 URL을 사용하려면 단일 행의 연결 문자열을 입력합니다. 다음 예제에서는 가독성을 위해 줄 바꿈이 추가되었습니다.

       ```
       jdbc:awsathena://AwsRegion=region-id;
       S3OutputLocation=s3://amzn-s3-demo-bucket/athena_results;
       AwsCredentialsProviderClass=com.simba.athena.iamsupport.plugin.OktaCredentialsProvider;
       user=athena-okta-user@anycompany.com;
       password=password;
       idp_host=okta-idp-domain;
       App_ID=okta-app-id;
       SSL_Insecure=true;
       LakeFormationEnabled=true;
       ```
     + AWS 프로파일 기반 URL을 사용하려면 다음 단계를 수행합니다.

       1. 다음 예제처럼 AWS 자격 증명 파일이 있는 [AWS 프로파일](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html)을 구성합니다.

          ```
          [athena_lf_dev]
          plugin_name=com.simba.athena.iamsupport.plugin.OktaCredentialsProvider
          idp_host=okta-idp-domain
          app_id=okta-app-id
          uid=athena-okta-user@anycompany.com
          pwd=password
          ```

       1. 다음 예제와 같이 **URL**에 단일 행의 연결 문자열을 입력합니다. 예제에는 가독성을 위해 줄 바꿈이 추가되었습니다.

          ```
          jdbc:awsathena://AwsRegion=region-id;
          S3OutputLocation=s3://amzn-s3-demo-bucket/athena_results;
          profile=athena_lf_dev;
          SSL_Insecure=true;
          LakeFormationEnabled=true;
          ```

     이 예제는 Athena 연결하는 데 필요한 URL의 기본 표현입니다. URL에서 지원되는 파라미터의 전체 목록은 [JDBC 설명서](connect-with-jdbc.md)를 참조하세요.

   다음 이미지는 연결 URL을 사용하는 SQL 워크벤치 연결 프로파일을 보여 줍니다.  
![\[SQL 워크벤치의 연결 프로파일.\]](http://docs.aws.amazon.com/ko_kr/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-verify-access-4.png)

이제 Okta 사용자에 대한 연결을 설정했으므로 일부 데이터를 검색하여 테스트할 수 있습니다.

**Okta 사용자에 대한 연결을 테스트하려면**

1. **테스트(Test)**를 선택한 다음 연결이 성공하는지 확인합니다.

1. SQL 워크벤치의 **문(Statement)** 창에서 다음 SQL `DESCRIBE` 명령을 실행합니다. 모든 열이 표시되는지 확인합니다.

   ```
   DESCRIBE "tripdb"."nyctaxi"
   ```  
![\[모든 열이 표시됩니다.\]](http://docs.aws.amazon.com/ko_kr/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-verify-access-5.png)

1. SQL 워크벤치의 **문(Statement)** 창에서 다음 SQL `SELECT` 명령을 실행합니다. 모든 열이 표시되는지 확인합니다.

   ```
   SELECT * FROM tripdb.nyctaxi LIMIT 5
   ```  
![\[모든 열이 표시되는지 확인합니다.\]](http://docs.aws.amazon.com/ko_kr/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-verify-access-6.png)

다음으로 **lf-business-analyst** 그룹의 구성원인 **athena-ba-user**가 앞서 Lake Formation에서 지정한 테이블의 첫 3개 열에 대해서만 액세스 권한을 갖는지 확인합니다.

****athena-ba-user**의 액세스 권한을 확인하려면**

1. SQL 워크벤치의 **연결 프로파일(Connection profile)** 대화 상자에서 다른 연결 프로파일을 만듭니다.
   + 연결 프로파일 이름에 ** Athena\$1Okta\$1Group\$1Connection**을 입력합니다.
   + **드라이버(Driver)**에서 Simba Athena JDBC 드라이버를 선택합니다.
   + **VPC**에 대해 다음 중 하나를 수행합니다.
     + 연결 URL을 사용하려면 단일 행의 연결 문자열을 입력합니다. 다음 예제에서는 가독성을 위해 줄 바꿈이 추가되었습니다.

       ```
       jdbc:awsathena://AwsRegion=region-id;
       S3OutputLocation=s3://amzn-s3-demo-bucket/athena_results;
       AwsCredentialsProviderClass=com.simba.athena.iamsupport.plugin.OktaCredentialsProvider;
       user=athena-ba-user@anycompany.com;
       password=password;
       idp_host=okta-idp-domain;
       App_ID=okta-application-id;
       SSL_Insecure=true;
       LakeFormationEnabled=true;
       ```
     + AWS 프로파일 기반 URL을 사용하려면 다음 단계를 수행합니다.

       1. 다음 예제처럼 자격 증명 파일이 있는 AWS 프로파일을 구성합니다.

          ```
          [athena_lf_ba]
          plugin_name=com.simba.athena.iamsupport.plugin.OktaCredentialsProvider
          idp_host=okta-idp-domain
          app_id=okta-application-id
          uid=athena-ba-user@anycompany.com
          pwd=password
          ```

       1. 다음과 같이 **URL**에 단일 행의 연결 문자열을 입력합니다. 예제에는 가독성을 위해 줄 바꿈이 추가되었습니다.

          ```
          jdbc:awsathena://AwsRegion=region-id;
          S3OutputLocation=s3://amzn-s3-demo-bucket/athena_results;
          profile=athena_lf_ba;
          SSL_Insecure=true;
          LakeFormationEnabled=true;
          ```

1. **테스트(Test)**를 선택해 연결이 성공적인지 확인합니다.

1. **SQL 문(SQL Statement)** 창에서 전에 수행했던 것과 동일한 `DESCRIBE` 및 `SELECT` SQL 명령을 실행하고 결과를 조사합니다.

   **athena-ba-user**는 **lf-business-analyst** 그룹의 구성원이기 때문에 Lake Formation 콘솔에서 지정한 첫 3개의 열만 반환됩니다.  
![\[첫 3개의 열만 반환됩니다.\]](http://docs.aws.amazon.com/ko_kr/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-verify-access-7.png)  
![\[첫 3개 열의 데이터.\]](http://docs.aws.amazon.com/ko_kr/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-verify-access-8.png)

다음으로 Okta 콘솔로 돌아가 `athena-ba-user`를 `lf-developer` Okta 그룹에 추가합니다.

**lf-developer 그룹에 athena-ba-user를 추가하려면**

1. 할당된 Okta 도메인의 관리 사용자로 Okta 콘솔에 로그인합니다.

1. **디렉터리(Directory)**를 선택한 후 **그룹(Groups)**을 선택합니다.

1. 그룹(Groups) 페이지에서 **lf-developer** 그룹을 선택합니다.  
![\[lf-developer 그룹을 선택합니다.\]](http://docs.aws.amazon.com/ko_kr/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-verify-access-9.png)

1. **사람 관리(Manage People)**를 선택합니다.

1. **구성원 아님(Not Members)** 목록에서 **athena-ba-user**를 선택해 **lf-developer group**에 추가합니다.

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

이제 Lake Formation 콘솔로 돌아가 **lf-developer** 그룹에 대한 테이블 권한을 구성합니다.

**lf-developer-group에 대한 테이블 권한을 구성하려면**

1. Lake Formation 콘솔에 데이터 레이크 관리자로 로그인합니다.

1. 탐색 창에서 **테이블**을 선택합니다.

1. **nyctaxi** 테이블을 선택합니다.

1. **작업(Actions)**, **권한 부여(Grant)**를 선택합니다.

1. **권한 부여(Grant Permissions)** 대화 상자에 다음 정보를 입력합니다.
   + **SAML 및 Amazon Quick의 사용자 및 그룹**에 다음 형식으로 Okta SAML lf-developer 그룹 ARN을 입력합니다.
   + **열(Columns)**에서 **필터 유형을 선택**하고, **열 포함(Include columns)**을 선택합니다.
   + **trip\$1type** 열을 선택합니다.
   + **테이블 권한(Table permissions)**에 **SELECT**를 선택합니다.

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

이제 SQL 워크벤치를 사용하여 **lf-developer** 그룹에 대한 권한 변경을 확인할 수 있습니다. **athena-ba-user**는 이제 **lf-developer** 그룹의 구성원이므로 사용 가능한 데이터에 변경이 반영되어야 합니다.

**athena-ba-user에 대한 권한 변경을 확인하려면**

1. SQL 워크벤치 프로그램을 닫은 다음 다시 엽니다.

1. **athena-ba-user**의 프로파일에 연결합니다.

1. **문(Statement)** 창에서 이전에 실행한 것과 동일한 SQL 문을 실행합니다.

   이번에는 **trip\$1type** 열이 표시됩니다.  
![\[네 번째 열을 쿼리에 사용할 수 있습니다.\]](http://docs.aws.amazon.com/ko_kr/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-verify-access-10.png)

   **athena-ba-user**가 이제 **lf-developer** 및 **lf-business-analyst** 그룹 모두의 구성원이므로 이 그룹들에 대한 Lake Formation 권한 조합이 반환되는 열을 결정합니다.  
![\[데이터 결과의 네 번째 열.\]](http://docs.aws.amazon.com/ko_kr/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-verify-access-11.png)

## 결론
<a name="security-athena-lake-formation-jdbc-okta-tutorial-conclusion"></a>

이 자습서에서는 Okta를 SAML 공급자로 사용해 Athena와 AWS Lake Formation의 통합을 구성했습니다. 데이터 레이크 AWS Glue 데이터 카탈로그에서 SAML 사용자가 사용 가능한 리소스를 제어하는 데에는 Lake Formation 및 IAM이 사용되었습니다. 

## 관련 리소스
<a name="security-athena-lake-formation-jdbc-okta-tutorial-related-resources"></a>

관련 내용은 다음 리소스를 참조하세요.
+ [JDBC로 Amazon Athena에 연결](connect-with-jdbc.md)
+ [Athena API에 대한 페더레이션 액세스 활성화](access-federation-saml.md)
+ [AWS Lake Formation 개발자 안내서](https://docs.aws.amazon.com/lake-formation/latest/dg/)
+ *AWS Lake Formation 개발자 안내서*의 [데이터 카탈로그 권한 부여 및 취소](https://docs.aws.amazon.com/lake-formation/latest/dg/granting-catalog-permissions.html).
+ *IAM 사용 설명서*의 [자격 증명 공급자 및 연동](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers.html).
+ *IAM 사용 설명서*의 [IAM SAML 자격 증명 공급자 생성](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_saml.html).
+ *AWS 보안 블로그*의 [Enabling Federation to AWS Using Windows Active Directory, ADFS, and SAML 2.0](https://aws.amazon.com/blogs/security/enabling-federation-to-aws-using-windows-active-directory-adfs-and-saml-2-0/).