Amazon Web Services ブログ

Okta を ID プロバイダーとして Amazon Redshift へのアクセスとフェデレーションする

データベースのユーザーとアクセスを管理することは、気が遠くなるほど大変でエラーが発生しやすい作業です。これまで、データベース管理者は、ユーザーがどのグループに属しているのか、およびユーザー/グループがどのオブジェクトの使用を許可されているのかを判断する必要がありました。これらのリストはデータベース内で管理されており、社内ディレクトリから簡単に外れる可能性があります。

フェデレーションを使用すると、企業のアイデンティティプロバイダー (IdP) 内のユーザーおよびグループを管理し、それらをログイン時に Amazon Redshift に渡すことができます。前回の記事、「IAM と Amazon Redshift を使用して、データベースユーザー認証を簡単にフェデレーションする」で、Active Directory Federation Service (AD FS) を ID プロバイダーとして使用するフェデレーションワークフローの内部について説明しました。

この記事では、ID プロバイダーとして Okta に焦点を当てます。Okta.com のトライアルアカウントを設定し、組織のディレクトリ内にユーザーとグループを構築し、Amazon Redshift へのシングルサインオン (SSO) を有効にする方法を段階的に説明します。データウェアハウス内でグループレベルのアクセス制御も維持しながら、これらすべてを実行できます。

この記事の手順は、次のセクションで構成されています。

  • ID プロバイダー (Okta) の設定 – Okta をセットアップします。これには、ユーザーを論理グループにまとめる作業が含まれます。
  • AWS の設定 – ID プロバイダーと AWS 間の信頼関係を確立するロールと、Okta が Amazon Redshift へのアクセスに使用するロールを設定します。
  • ID プロバイダー (Okta) の詳細設定 – 作成したロールを入力して Okta の設定を完成させます。また、どのグループを Amazon Redshift に渡すことが許可されているかについて Okta に通知します。
  • Amazon Redshift サーバー/クライアントのセットアップ – Amazon Redshift データベース内に Okta グループと一致するようにグループを設定します。また、これらのグループに特定のスキーマとテーブルへのアクセスを許可します。最後に、エンタープライズ認証情報を使用して Amazon Redshift にサインインするようにクライアントツールを設定します。

アイデンティティプロバイダー (Okta) の設定

この最初のステップでは、Okta をセットアップし、ユーザーを追加して、それらを論理グループに編成します。その後、[Amazon Web Services Redshift] を Okta アプリケーションに追加します。

ステップ 1: Okta アカウントを作成する

Okta アカウントにまだアクセスできない場合は、次の URL から 30 日間の無料トライアルを開始できます。https://www.okta.com/free-trial/

ステップ 2: Okta ディレクトリを設定する

次の URL を使って Okta.com にサインインします。<prefix>はアカウントに固有のもので、アカウントの設定時に作成されました。

https://<prefix>-admin.okta.com/admin/dashboard

[Directory] ページに移動して、組織に一致する人とグループを Okta に追加します。Amazon Redshift はグループ名が小文字であることを想定しているため、必ず小文字のグループ名を使用してください。

次の例では、3 人のユーザーと 2 つのグループを追加しました。その中のユーザーの 1 人 (Jorge) は、[sales] グループと [marketing] グループの両方に属しています。

まず、右上隅にある [Admin] を選択します。

ユーザーを追加するには、[Add Person] を選択します。次の例は、作成されたユーザーを示しています。

Okta にグループを追加するには、[Add Group] を選択します。次の例は 3 つのグループを示しています。

ステップ 3: [Amazon Web Services Redshift] を Okta アプリケーションに追加する

[Application] ページに移動します。[Add Application] を選択し、[Amazon Web Services Redshift] アプリケーションを検索します。デフォルト設定を続けます。

ステップ 4: Okta アプリケーションのメタデータをダウンロードする

次のように表示される [Amazon Web Services Redshift] アプリケーションの設定ページに移動したことを確認してください。

[Sign On] を選択してから [ID Provider metadata] のリンクを選択して、xml 形式のメタデータファイル (metadata.xml など) をダウンロードします。

AWS の設定

次に、ID プロバイダーと AWS の間に信頼関係を確立するロールを設定します。Okta が Amazon Redshift へのアクセスに使用するロールも作成します。

ステップ 5: SAML IAM ID プロバイダーを作成する

AWS マネジメントコンソールに切り替えて、AWS 認証情報を使用してサインインします。その後、AWS Identity and Access Management (IAM) コンソールを開きます。

IAM コンソールで、[ID プロバイダー] を選択し、次に示すように [プロバイダーの作成] を選択します。

IdP の名前を入力し、前の手順でダウンロードしたメタデータファイルをアップロードします。

ステップ 6: IAM SAML 2.0 フェデレーションロールを作成する

IAM コンソールで [ロール] に移動し、新しい SAML 2.0 フェデレーションロールを作成します。  前のステップで作成した IdP を参照して、[プログラムによるアクセスと AWS マネジメントコンソールへのアクセスを許可する]を選択します。

ステップ 7: 他のアクセス許可を追加して Amazon Redshift をクエリする

[次へ : 権限の割当] を選択します。次に [ポリシーの作成] を選択します。

regionaccount、および cluster パラメータを置き換えて、以下のカスタムポリシーを作成します。これらの権限により、ロールは Amazon Redshift を使用してデータをクエリし、ユーザーを作成し、ユーザーがグループに参加できるようになります。

{
    "Version": "2012-10-17",
    "Statement": [{
        "Effect": "Allow",
           "Action": [
                "redshift:CreateClusterUser",
                "redshift:JoinGroup",
                "redshift:GetClusterCredentials",
                "redshift:ListSchemas",
                "redshift:ListTables",
                "redshift:ListDatabases",
                "redshift:ExecuteQuery",
                "redshift:FetchResults",
                "redshift:CancelQuery",
                "redshift:DescribeClusters",
                "redshift:DescribeQuery",
                "redshift:DescribeTable"],
           "Resource": "arn:aws:redshift:<region>:<account>:cluster:<cluster>"}]
}

注意すべき重要な点がいくつかあります。

  • グループメンバーシップは、ユーザーセッションの間だけ持続します。
  • グループを手動で作成して DB 権限を付与する必要があるため、CreateGroup 権限はありません。

次の図は、ロールの要約ページを示しています。

ID プロバイダー (Okta) の詳細設定

このセクションでは、作成したロールを追加して Okta の設定を完成させます。また、Okta にどのグループを Amazon Redshift に渡すことが許可されているかを伝えます。

ステップ 8: 詳細サインオン設定を行う

Okta.com に戻ります。Amazon Web Services Redshift アプリケーションの設定ページに移動します。[Sign-On] セクションで、[Advanced Sign-On Settings] までスクロールします。

以前に作成した IdP とロール ARNS を入力します。これらはグローバルに一意であり、Okta が必ず AWS アカウントに誘導されるようにします。[Allowed DB Groups] は、DBGroup SAML アサーションで Amazon Redshift へ送信する許可があるグループのリストです。

アスタリスク (*) ワイルドカードを使用しないでください。これにより [Everyone] グループが渡され、Amazon Redshift はグループ名が小文字であることを期待しているので不平を言います。  ${user.username}DBUser SAML アサーションで送信されることに注意してください。

ステップ 9: ユーザーを承認する

各自のグループまたは個々のユーザーアカウントを選択して、ユーザーにアマゾン ウェブ サービス Redshift アプリケーションの使用を承認します。この例では、ユーザーをグループ別に承認しました。

Amazon Redshift サーバー/クライアントセットアップ

次に、Amazon Redshift データベースに Okta グループと一致するグループを設定します。また、これらのグループに特定のスキーマとテーブルへのアクセスを許可します。最後に、エンタープライズ認証情報を使用して Amazon Redshift にサインインするようにクライアントツールを設定します。

ステップ 10: グループを設定する

管理者アカウントで Amazon Redshift クラスターにログインします。IdP グループ名と一致するグループを作成し、テーブルとスキーマに適切な権限を付与します。

CREATE GROUP sales;
CREATE GROUP marketing;
ALTER DEFAULT PRIVILEGES IN SCHEMA sales 
GRANT ALL on TABLES to GROUP sales; 
ALTER DEFAULT PRIVILEGES IN SCHEMA marketing 
GRANT ALL on TABLES to GROUP marketing;

ステップ 11: JDBC SQL クライアントを設定する

Amazon Redshift JDBC ドライバーがインストールされていると仮定して、IdP 認証情報を使用してクラスターへの新しい接続を設定します。次の例では、SQLWorkbenchJ を使用しています。URL には、必ず「iam」を入力して、ドライバに IAM を使用して認証するように指示してください。ユーザー名およびパスワードには、Okta で設定した値を入力してください。

以下のように拡張プロパティを入力します。app_id および idp_host については、ウェブブラウザでアプリケーションの次の URL を参照してください。

https://<prefix>-admin.okta.com/admin/app/amazon_aws_redshift/instance/<app_id>

ステップ 12: ODBC SQL クライアントを設定する

Amazon Redshift ODBC ドライバーがインストールされていると仮定して、IdP 認証情報を使用してクラスターへの新しい接続を設定します。次の例では、~/Library/ODBC/odbc.ini ファイルを変更しました。  <app_id><prefix> の値を決定するには、前の指示を参照してください。

[ODBC Data Sources]
Redshift DSN=Installed

[Redshift DSN]
Driver=/opt/amazon/redshift/lib/libamazonredshiftodbc.dylib
Host=<endpoint>
Port=<port>
Database=<database>
locale=en-US
app_id=<app_id>
plugin_name=okta
idp_host=<prefix>.okta.com
iam=1

ステップ 13: ユーザーアクセスをテストする

作成したユーザーでサインオンできるようになっているはずです。この例では、jane@example.com は [sales] スキーマのテーブルにのみアクセスできます。ユーザー john@example.com は、[marketing] スキーマのテーブルにのみアクセスできます。そして jorge@example.com は両方のスキーマのテーブルにアクセスできます。jane@example.com ユーザーを使用して、各スキーマからデータをクエリしようとすると、次の結果が得られます。

select storeid From sales.stores


storeid	
-------
1234
2345
3456
[…]


select * From marketing.campaign


An error occurred when executing the SQL command:
select * From marketing.campaign

[Amazon](500310) Invalid operation: permission denied for schema marketing;
1 statement failed.

Execution time: 0.16s

まとめ

この記事では、Amazon Redshift クラスターへのシングルサインオンを有効にするために、Okta を ID プロバイダー (IdP) として設定して使用するためのステップバイステップガイドを提供しました。また、IdP 内のグループメンバーシップをどのように渡して、IdP 内から Amazon Redshift リソースへのユーザーアクセスを管理できるかを示しました。

ご質問またはご提案については、以下でコメントを残してください。

 


著者について

Rajiv Gupta は、アマゾン ウェブ サービスのデータウェアハウス専門のソリューションアーキテクトです