

# チュートリアル: Lake Formation と JDBC を使用した Okta ユーザーの Athena へのフェデレーションアクセスを設定する
<a name="security-athena-lake-formation-jdbc-okta-tutorial"></a>

このチュートリアルでは、Okta、AWS Lake Formation、AWS Identity and Access Management アクセス許可、および Athena JDBC ドライバーを設定して、Athena の SAML ベースのフェデレーション使用を有効にする方法を説明します。Lake Formation は、Athena で利用できるデータに対するきめ細かなアクセスコントロールを SAML ベースのユーザーに提供します。この設定を行うため、チュートリアルでは Okta デベロッパーコンソール、AWS IAM コンソール、Lake Formation コンソール、および SQL Workbench/J ツールを使用します。
<a name="security-athena-lake-formation-jdbc-okta-tutorial-prerequisites"></a>
**前提条件**  
このチュートリアルでは、次が実行済みであることを前提としています。
+ Amazon Web Services アカウントが作成されている。アカウントを作成するには、[Amazon Web Services のホームページ](https://aws.amazon.com/)にアクセスしてください。
+ Simple Storage Service (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 のデータにポイントする[データベース](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/what-is-glue.html)で定義されている。
  + テーブルをまだ定義していない場合は、アクセスするデータについて [AWS Glue クローラを実行](https://docs.aws.amazon.com/glue/latest/dg/add-crawler.html)するか、[Athena を使用して、データベースと 1 つ以上のテーブルを定義](work-with-data.md)します。
  + このチュートリアルでは、[Registry of open data on AWS](https://registry.opendata.aws/) で利用できる [NYC Taxi trips dataset](https://registry.opendata.aws/nyc-tlc-trip-records-pds/) に基づくテーブルを使用します。このチュートリアルでは、データベース名 `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 ID プロバイダーと 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: IAM ロールと SAML ID プロバイダーを Okta アプリケーションに追加する](#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 ベースの ID プロバイダーとして使用します。Okta アカウントがまだない場合は、無料のアカウントを作成できます。Okta アカウントは、SAML 認証用の Okta アプリケーションを作成するために必要です。

**Okta アカウントを作成する**

1. Okta を使用するには、[Okta Developer サインアップページ](https://developer.okta.com/signup/)に移動して、無料の Okta トライアルアカウントを作成します。デベロッパー版のサービスは、Okta が [developer.okta.com/pricing](https://developer.okta.com/pricing) で指定する制限まで無料です。

1. アクティベーション E メールを受け取ったら、アカウントをアクティブにします。

   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 グループに Okta ユーザーを 1 人追加する。

**Okta にユーザーを追加する**

1. Okta アカウントをアクティブにしたら、割り当てられた Okta ドメインに管理ユーザーとしてログインします。

1. 左側のナビゲーションペインで、[**ディレクトリ**] 、[**ピープル**] の順に選択します。

1. **[Add Person]** (人を追加する) を選択して、JDBC ドライバー経由で Athena にアクセスする新しいユーザーを追加します。  
![\[[Add Person] (人を追加する) を選択します。\]](http://docs.aws.amazon.com/ja_jp/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]** (プライマリ E メール) を入力します。このチュートリアルでは *athena-okta-user@anycompany.com* を使用します。
   + **[Password]** (パスワード) には **[Set by admin]** (管理者が設定) を選択し、パスワードを入力します。このチュートリアルでは **[User must change password on first login]** (ユーザーは最初のログイン時にパスワードを変更する必要があります) オプションのチェックをオフにしますが、ユーザーによってはセキュリティ要件が異なる場合があります。  
![\[Okta アプリケーションにユーザーを追加します。\]](http://docs.aws.amazon.com/ja_jp/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/ja_jp/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-4a.png)

1. **[Save]** (保存) を選択します。

次の手順では、「Business Analysts」グループと「Developer」グループを追加することによって、Athena JDBC ドライバー経由で 2 つの Okta グループのアクセス許可を提供します。

**Okta グループを追加する**

1. Okta ナビゲーションペインで、[**ディレクトリ**] 、[**グループ**] の順に選択します。

1. **[Groups]** (グループ) ページで **[Add Group]** (グループの追加) をクリックします。  
![\[[Add Group] (グループの追加) をクリックします。\]](http://docs.aws.amazon.com/ja_jp/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-4c.png)

1. **[Add Group]** (グループの追加) ダイアログボックスで、必要な情報を入力します。
   + **[Name]** (名前) には *lf-business-analyst* を入力します。
   + **[Group Description]** (グループの説明) には *Business Analysts* を入力します。  
![\[Okta グループを追加します。\]](http://docs.aws.amazon.com/ja_jp/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-4d.png)

1. **[Add Group]** (グループの追加) をクリックします。

1. **[Groups]** (グループ) ページで、もう一度 **[Add Group]** (グループの追加) を選択します。今回は、Developer グループの情報を入力します。

1. 必要な情報を入力します。
   + **[Name]** (名前) には *lf-developer* を入力します。
   + **[Group Description]** (グループの説明) には *[Developers]* を入力します。

1. **[Add Group]** (グループの追加) をクリックします。

2 人のユーザーと 2 つのグループを作成したところで、各グループにユーザーを追加する準備が整いました。

**ユーザーをグループに追加する**

1. **[Groups]** (グループ) ページで、先ほど作成した **lf-developer** グループを選択します。このグループに、デベロッパーとして作成した Okta ユーザーの 1 人を追加します。  
![\[lf-developer を選択します。\]](http://docs.aws.amazon.com/ja_jp/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-4f.png)

1. [**[Manage People]** (ピープルの管理) をクリックします。  
![\[[[Manage People] (ピープルの管理) をクリックします。\]](http://docs.aws.amazon.com/ja_jp/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-4g.png)

1. **[Not Members]** (非メンバー) リストで **athena-okta-user** を選択します。  
![\[メンバーリストに追加するユーザーを選択します。\]](http://docs.aws.amazon.com/ja_jp/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-4h.png)

   このユーザーのエントリが、左側の **[Not Members]** (非メンバー) リストから右側の **[Members]** (メンバー) リストに移動します。  
![\[Okta グループに追加された Okta ユーザー。\]](http://docs.aws.amazon.com/ja_jp/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-4i.png)

1. **[Save]** (保存) を選択します。

1. **[グループに戻る]** をクリック、または **[ディレクトリ]** 、**[グループ]** の順に選択します。

1. **lf-business-analyst** グループを選択します。

1. [**[Manage People]** (ピープルの管理) をクリックします。

1. **lf-business-analyst** グループの **[Members]** (メンバー) リストに **athena-ba-user** を追加して、**[Save]** (保存) をクリックします。

1. **[グループに戻る]** をクリック、または **[ディレクトリ]**、**[グループ]** の順に選択します。

   これで、各グループに 1 人の Okta ユーザーがいることが **[Groups]** (グループ) ページに表示されるようになりました。  
![\[Okta コンソールで各 Okta グループに 1 人のユーザーが追加されました。\]](http://docs.aws.amazon.com/ja_jp/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 Developer コンソールを使用して、以下のタスクを実行します。
+ AWS で使用するための SAML アプリケーションを追加する。
+ アプリケーションを Okta ユーザーに割り当てる。
+ アプリケーションを Okta グループに割り当てる。
+ 後ほど AWS で使用するために、結果として得た ID プロバイダーメタデータをダウンロードする。

**SAML 認証用のアプリケーションを追加する**

1. Okta ナビゲーションペインで、[**アプリケーション**] 、[**アプリケーション**] の順に選択して、Athena に SAML 認証用の Okta アプリケーションを設定できるようにします。

1. **[アプリケーションカタログを参照]** をクリックします。

1. 検索ボックスに「**Redshift**」と入力します。

1. **[Amazon Web Services Redshift]** を選択します。このチュートリアルの Okta アプリケーションは、Amazon Redshift の既存の SAML 統合を使用します。  
![\[[Amazon Web Services Redshift] を選択します。\]](http://docs.aws.amazon.com/ja_jp/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/ja_jp/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/ja_jp/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-9.png)

これで Okta アプリケーションが作成されたので、それを作成したユーザーとグループに割り当てることができます。

**アプリケーションをユーザーとグループに割り当てる**

1. [**アプリケーション**] ページで、**Athena-LakeFormation-Okta** アプリケーションを選択します。

1. [**割り当て**] タブで、[**割り当てる**] 、[**ピープルに割り当てる**] を順に選択します。  
![\[[Assign] (割り当てる) を選択し、[Assign to People] (ピープルに割り当てる) を選択します。\]](http://docs.aws.amazon.com/ja_jp/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-10.png)

1. **[Assign Athena-LakeFormation-Okta to People]** (Athena-LakeFormation-Okta をピープルに割り当てる) ダイアログボックスで、先ほど作成した **athena-okta-user** ユーザーを見つけます。

1. **[Assign]** (割り当てる) を選択してユーザーをアプリケーションに割り当てます。  
![\[[Assign] (割り当てる) をクリックします。\]](http://docs.aws.amazon.com/ja_jp/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-11.png)

1. **[Save and Go Back]** (保存して戻る) を選択します。

1. **[Done]** (完了) をクリックします。

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/ja_jp/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-12b.png)

   アプリケーションのグループのリストにこのグループが表示されます。  
![\[Okta アプリケーションが Okta グループに割り当てられています。\]](http://docs.aws.amazon.com/ja_jp/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-12c.png)

これで、AWS での使用のために ID プロバイダーアプリケーションのメタデータをダウンロードする準備ができました。

**アプリケーションのメタデータをダウンロードする**

1. Okta アプリケーションの **[Sign On]** (サインオン) タブを選択してから、**[Identity Provider metadata]** (ID プロバイダーのメタデータ) を右クリックします。  
![\[[Identity Provider metadata] (ID プロバイダーのメタデータ) を右クリックします。\]](http://docs.aws.amazon.com/ja_jp/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-13.png)

1. **[Save Link As]** (名前を付けてリンクを保存する) を選択して、XML 形式になっている ID プロバイダーのメタデータをファイルに保存します。これには、分かりやすい名前を付けてください (`Athena-LakeFormation-idp-metadata.xml` など)。  
![\[ID プロバイダーのメタデータを保存します。\]](http://docs.aws.amazon.com/ja_jp/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-14.png)

## ステップ 4: AWS SAML ID プロバイダーと 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 用の ID プロバイダーを作成する。
+ Lake Formation アクセス用の IAM ロールを作成する。
+ AmazonAthenaFullAccess マネージドポリシーをロールに追加する。
+ Lake Formation および AWS Glue 用のポリシーをロールに追加する。
+ Athena のクエリ結果用のポリシーをロールに追加する。

**AWS SAML ID プロバイダーを作成する**

1. **Amazon Web Services アカウント****コンソール**に **Amazon Web Services アカウント管理者**としてサインインし、**IAM** コンソール ([https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)) に移動します。

1. ナビゲーションペインで、[**ID プロバイダー**] を選択し、[**プロバイダーを追加**] をクリックします。

1. [**プロバイダーの設定**] 画面で、次の情報を入力します。
   + [**プロバイダーのタイプ**] では [**SAML**] を選択します。
   + **[プロバイダー名]** では `AthenaLakeFormationOkta` を入力します。
   + [**メタデータドキュメント**] では、[**ファイルを選択**] オプションを使用して、ダウンロードした ID プロバイダー (IdP) メタデータ XML ファイルをアップロードします。

1. **[プロバイダーを追加]** をクリックします。

次に、AWS Lake Formation アクセス用の IAM ロールを作成します。このロールには、2 つのインラインポリシーを追加します。1 つのポリシーで Lake Formation と AWS Glue API へのアクセス許可を提供できます。もう 1 つのポリシーは、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/ja_jp/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-20.png)

   1. **[Select type of trusted entity]** (信頼されたエンティティのタイプを選択) で、**[SAML 2.0 Federation]** (SAML 2.0 フェデレーション) を選択します。

   1. [**SAML provider**] (SAML プロバイダー) には **AthenaLakeFormationOkta** を選択します。

   1. [**SAML プロバイダー**] で、[**プログラムによるアクセスと AWS マネジメントコンソール によるアクセスを許可**] オプションを選択します。

   1. **[Next: Permissions]** (次のステップ: 許可) をクリックします。

1. **[Attach Permissions policies]** (許可ポリシーのアタッチ) ページにあるポリシーの **[Filter]** (フィルター) に **Athena** を入力します。

1. **[AmazonAthenaFullAccess]** マネージドポリシーを選択してから、**[Next: Tags]** (次のステップ: タグ) を選択します。  
![\[[AmazonAthenaFullAccess] マネージドポリシーを IAM ロールにアタッチします。\]](http://docs.aws.amazon.com/ja_jp/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-21.png)

1. [**タグの追加**] ページで、[**次へ: レビュー**] を選択します。

1. **[Review]** (確認) ページで、**[Role name]** (ロール名) にロールの名前 (*Athena-LakeFormation-OktaRole* など) を入力してから **[Create role]** (ロールの作成) を選択します。  
![\[IAM ロールの名前を入力します。\]](http://docs.aws.amazon.com/ja_jp/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-22.png)

次に、Lake Formation、AWS Glue API、および Simple Storage Service (Amazon S3) 内の Athena のクエリ結果へのアクセスを許可するインラインポリシーを追加します。

IAM ポリシーを使用するときは、常に IAM のベストプラクティスに従うようにしてください。詳細については、「[IAM ユーザーガイド](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)」の「IAM でのセキュリティベストプラクティス」を参照してください。

**Lake Formation および AWS Glue に対するロールにインラインポリシーを追加する**

1. IAM コンソールのロールのリストから、新しく作成した `Athena-LakeFormation-OktaRole` を選択します。

1. ロールの **[Summary]** (概要) ページにある **[Permissions]** (許可) タブで、**[Add inline policy]** (インラインポリシーの追加) を選択します。

1. [**Create policy**] (ポリシーの作成) ページで [**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. **[Review policy]** (ポリシーの確認) をクリックします。

1. **[Name]** (名前) にポリシーの名前を入力します (**LakeFormationGlueInlinePolicy** など)。

1. [**Create policy**] (ポリシーの作成) を選択します。

**Athena のクエリ結果の場所に対するロールにインラインポリシーを追加する**

1. `Athena-LakeFormation-OktaRole` ロールの **[Summary]** (概要) ページにある **[Permissions]** (許可) タブで、**[Add inline policy]** (インラインポリシーの追加) を選択します。

1. [**Create policy**] (ポリシーの作成) ページで [**JSON**] を選択します。

1. Athena のクエリ結果の場所へのロールアクセスを許可する以下のようなインラインポリシーを追加します。例にある *<athena-query-results-bucket>* プレースホルダーを Simple Storage Service (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 ID プロバイダー ARN をコピーする**

1. IAM コンソールで、`Athena-LakeFormation-OktaRole` ロールの **[Summary]** (概要) ページにある **[Role ARN]** (ロール ARN) の横の **[Copy to clipboard]** (クリップボードにコピー) アイコンを選択します。ARN の形式は以下のようになっています。

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

1. 後で参照できるように、完全な ARN を安全に保存しておきます。

1. IAM コンソールのナビゲーションペインで、**[Identity providers]** (ID プロバイダー) を選択します。

1. **AthenaLakeFormationOkta** プロバイダーを選択します。

1. **[Summary]** (概要) ページで、**[Provider ARN]** (プロバイダー ARN) の横にある **[Copy to clipboard]** (クリップボードにコピー) アイコンを選択します。ARN は次のようになります。

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

1. 後で参照できるように、完全な ARN を安全に保存しておきます。

## ステップ 5: IAM ロールと SAML ID プロバイダーを Okta アプリケーションに追加する
<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 Developer コンソールに戻り、以下のタスクを実行します。
+ ユーザーとグループの Lake Formation URL 属性を Okta アプリケーションに追加する。
+ ID プロバイダーの ARN と IAM ロールの ARN を Okta アプリケーションに追加する。
+ Okta アプリケーション ID をコピーする。Okta アプリケーション ID は、Athena に接続する JDBC プロファイルに必要です。

**ユーザーとグループの Lake Formation URL 属性を Okta アプリケーションに追加する**

1. Okta Developer コンソールにサインインします。

1. **[Applications]** (アプリケーション) タブを選択し、`Athena-LakeFormation-Okta` アプリケーションを選択します。

1. アプリケーションの **[Sign On]** (サインオン) タブを選択し、**[Edit]** (編集) を選択します。  
![\[Okta アプリケーションを編集します。\]](http://docs.aws.amazon.com/ja_jp/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-24.png)

1. **[属性 (オプション)]** を選択して展開します。  
![\[ユーザーの Lake Formation URL 属性を Okta アプリケーションに追加します。\]](http://docs.aws.amazon.com/ja_jp/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-25.png)

1. **[属性ステートメント (オプション)]** では、次の属性を追加します。
   + [**Name**] (名前) には **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]** (regex に一致) を選択し、フィルターボックスに **.\$1** を入力します。  
![\[グループの Lake Formation URL 属性を Okta アプリケーションに追加します。\]](http://docs.aws.amazon.com/ja_jp/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-25a.png)

1. **[Advanced Sign-On Settings]** (高度なサインオン設定) までスクロールダウンします。ここで、Okta アプリケーションに ID プロバイダーと IAM ロールの ARN を追加します。

**ID プロバイダーと IAM ロールの ARN を Okta アプリケーションに追加する**

1. **[Idp ARN とロール ARN]** に、*<saml-arn>*、*<role-arn>* 形式の CSV として AWS ID プロバイダー ARN とロール ARN を入力します。組み合わされた文字列は以下のようになります。

   ```
   arn:aws:iam::<account-id>:saml-provider/AthenaLakeFormationOkta,arn:aws:iam::<account-id>:role/Athena-LakeFormation-OktaRole
   ```  
![\[Okta アプリケーションに ID プロバイダー ARN と IAM ロール ARN を入力します。\]](http://docs.aws.amazon.com/ja_jp/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-26.png)

1. **[Save]** (保存) を選択します。

次に、Okta アプリケーション ID をコピーします。これは、後ほど Athena に接続する JDBC 文字列で必要になります。

**Okta アプリケーション ID を見つけてコピーする**

1. Okta アプリケーションの **[General]** (全般) タブを選択します。  
![\[Okta アプリケーションの [General] (全般) タブを選択します。\]](http://docs.aws.amazon.com/ja_jp/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/ja_jp/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-28.png)

**注記**  
埋め込みリンクを使用して 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 Formation コンソールを使用して、テーブルに対する許可を SAML ユーザーとグループに付与します。以下のタスクを実行します。
+ Okta SAML ユーザーの ARN と、テーブルへの関連するユーザー許可を指定する。
+ Okta SAML グループの ARN と、テーブルへの関連するユーザー許可を指定する。
+ 付与した許可を検証する。

**Lake Formation で Okta ユーザーに許可を付与する**

1. データレイク管理者として AWS マネジメントコンソール にログインします。

1. Lake Formation コンソール ([https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)) を開きます。

1. ナビゲーションペインで **[Tables]** (テーブル) を選択してから、許可を付与するテーブルを選択します。このチュートリアルでは、`tripdb` データベースの `nyctaxi` テーブルを使用します。  
![\[許可を付与するテーブルを選択します。\]](http://docs.aws.amazon.com/ja_jp/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-29.png)

1. **[Actions]** (アクション) から **[Grant]** (付与) を選択します。  
![\[[Grant] (付与) を選択します。\]](http://docs.aws.amazon.com/ja_jp/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-30.png)

1. **[Grant Permissions]** (許可の付与) ダイアログで、次の情報を入力します。

   1. **[SAML and Amazon Quick users and groups]** (SAML および Amazon Quick のユーザーとグループ) で、Okta SAML ユーザー ARN を次の形式で入力します。

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

   1. **[Columns]** (列) の **[Choose filter type]** (フィルタータイプの選択) では、オプションで **[Include columns]** (列を含める) または **[Exclude columns]** (列を除外する) を選択します。

   1. フィルターの下にある **[Choose one or more columns]** (1 つ、または複数の列を選択する) ドロップダウンを使用して、ユーザーに含める列またはユーザーから除外する列を指定します。

   1. **[Table permissions]** (テーブル許可) には **[SELECT]** を選択します。このチュートリアルでは `SELECT` 許可のみを付与しますが、ユーザーによっては要件が異なる場合があります。  
![\[Okta ユーザーにテーブルおよび列レベルの許可を付与します。\]](http://docs.aws.amazon.com/ja_jp/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-31.png)

1. **[付与]** を選択します。

ここで、Okta グループにも同様のステップを実行します。

**Lake Formation で Okta グループに許可を付与する**

1. Lake Formation コンソールの **[Tables]** (テーブル) ページで、**[nyctaxi]** テーブルが選択されていることを確認します。

1. **[Actions]** (アクション) から **[Grant]** (付与) を選択します。

1. **[Grant Permissions]** (許可の付与) ダイアログで、次の情報を入力します。

   1. **[SAML and Amazon Quick users and groups]** (SAML および Amazon Quick のユーザーとグループ) で、Okta SAML グループ ARN を次の形式で入力します。

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

   1. **[Columns]** (列) の **[Choose filter type]** (フィルタータイプの選択) には、**[Include columns]** (列を含める) を選択します。

   1. **[Choose one or more columns]** (1 つ、または複数の列を選択する) には、テーブルの最初の 3 列を選択します。

   1. **[Table permissions]** (テーブル許可) には、付与する特定のアクセス許可を選択します。このチュートリアルでは `SELECT` 許可のみを付与しますが、ユーザーによっては要件が異なる場合があります。  
![\[Okta グループにテーブル許可を付与します。\]](http://docs.aws.amazon.com/ja_jp/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-31b.png)

1. **[付与]** を選択します。

1. 付与した許可を検証するには、**[Actions]** (アクション)、**[View permissions]** (許可の表示) の順に選択します。  
![\[[View permissions] (許可の表示) を選択して、付与された許可を検証します。\]](http://docs.aws.amazon.com/ja_jp/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-32.png)

   `nyctaxi` テーブルの **[Data permissions]** (データのアクセス許可) ページに、**athena-okta-user** と **lf-business-analyst** グループのアクセス許可が表示されます。  
![\[Okta ユーザーとグループに付与された許可を表示します。\]](http://docs.aws.amazon.com/ja_jp/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>

これで、JDBC クライアントを使用して、Okta SAML ユーザーとして Athena へのテスト接続を実行する準備が整いました。

このセクションでは、以下のタスクを実行します。
+ テストクライアントの準備 – Athena JDBC ドライバーをダウンロードし、SQL Workbench をインストールして、ドライバーを Workbench に追加する。このチュートリアルでは、Okta 認証経由で Athena にアクセスし、Lake Formation 許可を検証するために SQL Workbench を使用します。
+ MySQL Workbench で以下を実行する。
  + Athena Okta ユーザーの接続の作成。
  + Athena Okta ユーザーとしてのテストクエリの実行。
  + ビジネスアナリストユーザーの接続の作成とテスト。
+ Okta コンソールで、ビジネスアナリストユーザーをデベロッパーグループに追加する。
+ Lake Formation コンソールで、デベロッパーグループのテーブル許可を設定する。
+ SQL Workbench で、ビジネスアナリストユーザーとしてテストクエリを実行し、許可の変更が結果にどのように影響するかを検証する。

**テストクライアントを準備する**

1. [JDBC で Amazon Athena に接続する](connect-with-jdbc.md) から、Lake Formation 対応の Athena JDBC ドライバー (2.0.14 以降のバージョン) をダウンロードして抽出します。

1. Modified Apache 2.0 License に基づいて利用できる無料の [SQL Workbench/J](https://www.sql-workbench.eu/index.html) SQL クエリツールをダウンロードしてインストールします。

1. SQL Workbench/J で [**File**] (ファイル)、[**Manage Drivers**] (ドライバーの管理) と選択します。  
![\[[Manage Drivers] (ドライバーの管理) を選択します。\]](http://docs.aws.amazon.com/ja_jp/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-verify-access-1.png)

1. [**Manage Drivers**] (ドライバーの管理) ダイアログボックスで、以下のステップを実行します。

   1. 新しいドライバーのアイコンを選択します。

   1. **[Name]** (名前) には **Athena** を入力します。

   1. **[Library]** (ライブラリ) には、先ほどダウンロードした Simba Athena JDBC `.jar` ファイルを参照して選択します。

   1. **[OK]** をクリックします。  
![\[SQL Workbench に Athena JDBC ドライバーを追加します。\]](http://docs.aws.amazon.com/ja_jp/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/ja_jp/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 ドライバーを選択します。
   + **[URL]** で、次のいずれかを実行します。
     + 接続 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 Workbench 接続プロファイルを示しています。  
![\[SQL Workbench の接続プロファイル。\]](http://docs.aws.amazon.com/ja_jp/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-verify-access-4.png)

Okta ユーザーの接続を確立したところで、データを取得することによって接続をテストすることができます。

**Okta ユーザーの接続をテストする**

1. **[Test]** (テスト) をクリックして、接続が成功することを検証します。

1. SQL Workbench の [**Statement**] (ステートメント) ウィンドウから、以下の SQL `DESCRIBE` コマンドを実行します。すべての列が表示されていることを確認します。

   ```
   DESCRIBE "tripdb"."nyctaxi"
   ```  
![\[すべての列が表示されます。\]](http://docs.aws.amazon.com/ja_jp/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-verify-access-5.png)

1. SQL Workbench の [**Statement**] (ステートメント) ウィンドウから、以下の SQL `SELECT` コマンドを実行します。すべての列が表示されていることを確認します。

   ```
   SELECT * FROM tripdb.nyctaxi LIMIT 5
   ```  
![\[すべての列が表示されていることを確認します。\]](http://docs.aws.amazon.com/ja_jp/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-verify-access-6.png)

次に、**athena-ba-user** が **lf-business-analyst** グループのメンバーとして、先ほど Lake Formation で指定したテーブル内の最初の 3 列にしかアクセスできないことを検証します。

****athena-ba-user** のアクセス許可を検証する**

1. SQL Workbench の [**Connection profile**] (接続プロファイル) ダイアログボックスで、別の接続プロファイルを作成します。
   + 接続プロファイル名には ** Athena\$1Okta\$1Group\$1Connection** を入力します。
   + **[Driver]** (ドライバー) には Simba Athena JDBC ドライバーを選択します。
   + **[URL]** で、次のいずれかを実行します。
     + 接続 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 Statement**] (SQL ステートメント) ウィンドウから、以前に実行したものと同じ `DESCRIBE` と `SELECT` SQL コマンドを実行して、結果を調べます。

   **athena-ba-user** は **lf-business-analyst** グループのメンバーであることから、Lake Formation コンソールで指定した最初の 3 列のみが返されます。  
![\[最初の 3 列のみが返されます。\]](http://docs.aws.amazon.com/ja_jp/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-verify-access-7.png)  
![\[最初の 3 列からのデータ。\]](http://docs.aws.amazon.com/ja_jp/athena/latest/ug/images/security-athena-lake-formation-jdbc-okta-tutorial-verify-access-8.png)

次に、Okta コンソールに戻って、`athena-ba-user` を `lf-developer` Okta グループに追加します。

**athena-ba-user を lf-developer グループに追加する**

1. 割り当てられた Okta ドメインの管理ユーザーとして Okta コンソールにサインインします。

1. **[Directory]** (ディレクトリ)、**[Groups]** (グループ) の順にクリックします。

1. グループページで **lf-developer** グループを選択します。  
![\[lf-developer グループを選択します。\]](http://docs.aws.amazon.com/ja_jp/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** グループに追加します。

1. **[Save]** (保存) を選択します。

ここで Lake Formation コンソールに戻り、**lf-developer** グループのテーブル許可を設定します。

**lf-developer グループのテーブル許可を設定する**

1. Lake Formation コンソールにデータレイク管理者としてログインします。

1. ナビゲーションペインで、**[Table]** (テーブル) を選択します。

1. **nyctaxi** テーブルを選択します。

1. **[Actions]** (アクション)、**[Grant]** (付与) と選択します。

1. [**Grant Permissions**] (許可の付与) ダイアログで、次の情報を入力します。
   + [**SAML and Amazon Quick users and groups**] (SAML および Amazon Quick のユーザーとグループ) に、次の形式で Okta SAML lf-developer グループ ARN を入力します。
   + [**Columns**] (列) の [**Choose filter type**] (フィルタータイプの選択) には、[**Include columns**] (フィルタータイプを含める) を選択します。
   + **trip\$1type** 列を選択します。
   + **[Table permissions]** (テーブル許可) には **[SELECT]** を選択します。

1. [**Grant**] (付与) を選択します。

これで、SQL Workbench を使用して **lf-developer** グループの許可への変更を検証できます。この変更は、**lf-developer** グループのメンバーになった **athena-ba-user** が利用できるデータに反映されています。

**athena-ba-user の許可への変更を検証する**

1. SQL Workbench プログラムを閉じてから、もう一度開きます。

1. **athena-ba-user** のプロファイルに接続します。

1. [**Statement**] (ステートメント) ウィンドウから、以前実行したものと同じ SQL ステートメントを発行します。

   今回は、**trip\$1type** 列が表示されています。  
![\[クエリに 4 番目の列を使用できます。\]](http://docs.aws.amazon.com/ja_jp/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 許可の組み合わせによって、返される列が決定されます。  
![\[データ結果の 4 番目の列です。\]](http://docs.aws.amazon.com/ja_jp/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 との統合を設定しました。Lake Formation と IAM を使用して、SAML ユーザーが利用できるデータレイク AWS Glue データカタログ内のリソースを制御しました。

## 関連リソース
<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 ユーザーガイド*」の「[ID プロバイダーとフェデレーション](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers.html)」。
+ 「*IAM ユーザーガイド*」の「[Creating IAM SAML identity providers](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_saml.html)」(IAM SAML ID プロバイダーの作成)。
+ *AWS セキュリティブログ*の「[Windows アクティブディレクトリ、ADFS、および SAML 2.0 を使用した AWS へのフェデレーションの有効化](https://aws.amazon.com/blogs/security/enabling-federation-to-aws-using-windows-active-directory-adfs-and-saml-2-0/)」。