Amazon Web Services ブログ

Amazon Redshift のユーザー管理を AWS IAM Identity Center に移行して認証を最新化する

本記事は 2025 年 8 月 27 日 に公開された「Modernize Amazon Redshift authentication by migrating user management to AWS IAM Identity Center」を翻訳したものです。

Amazon Redshift は、構造化データと半構造化データの両方を高度な SQL クエリで分析できるクラウドベースのデータウェアハウスです。フルマネージドサービスとして、高いパフォーマンスとスケーラビリティを提供しながら、データウェアハウスに保存されたデータへの安全なアクセスを可能にします。世界中の組織が Amazon Redshift を使用して大規模なデータセットを処理し、分析機能を強化し、ステークホルダーに価値あるビジネスインテリジェンスを提供しています。

AWS IAM Identity Center は、Amazon Q Developer を含む AWS ツールへのワークフォースアクセスを制御するための推奨プラットフォームです。既存の ID プロバイダー (IdP) への単一接続を可能にし、AWS アプリケーション全体でユーザーの統一ビューを作成し、信頼された ID の伝播を適用してシームレスで一貫したエクスペリエンスを実現します。

Amazon Redshift のデータには、ローカルユーザーまたは外部ユーザーを使用してアクセスできます。Amazon Redshift のローカルユーザーは、Redshift クラスター内で直接作成および管理されるデータベースユーザーアカウントです。Amazon Redshift は IAM Identity Center と統合されており、信頼された ID の伝播をサポートしているため、Microsoft Entra ID (Azure AD)、Okta、Ping、OneLogin などのサードパーティ IdP を使用するか、IAM Identity Center を ID ソースとして使用できます。Amazon Redshift との IAM Identity Center 統合は、一元化された認証と SSO 機能をサポートし、マルチアカウント環境全体でのアクセス管理を簡素化します。組織の規模が拡大するにつれて、クロスサービス統合と一元化されたアクセス管理のために外部ユーザーを使用することが推奨されます。

本記事では、RedshiftIDCMigration ユーティリティを使用して、ローカル Redshift ユーザー管理を IAM Identity Center のユーザーとグループにスムーズに移行する方法を紹介します。

ソリューションの概要

次の図はソリューションアーキテクチャです。

RedshiftIDCMigration ユーティリティは、以下のアクティビティを実行することで、ローカル Redshift ユーザー、グループ、ロールの IAM Identity Center インスタンスへの移行を加速します。

  • 指定された Redshift インスタンス内のすべてのローカルユーザーに対して、IAM Identity Center にユーザーを作成します。
  • 指定された Redshift インスタンス内のすべてのグループまたはロールに対して、IAM Identity Center にグループを作成します。
  • Redshift インスタンス内の既存の割り当てに従って、IAM Identity Center でユーザーをグループに割り当てます。
  • IAM Identity Center で作成されたグループに対応する IAM Identity Center ロールを Redshift インスタンスに作成します。
  • ローカルグループとロールに付与されている現在の権限に基づいて、Redshift インスタンス内の IAM Identity Center ロールに権限を付与します。

前提条件

ユーティリティを実行する前に、以下の準備が必要です。

  1. アカウントで IAM Identity Center を有効化します。
  2. ブログ記事「Integrate Identity Provider (IdP) with Amazon Redshift Query Editor V2 and SQL Client using AWS IAM Identity Center for seamless Single Sign-On」の手順に従います (具体的には、ステップ 1〜8 に従い、ステップ 4 と 6 はスキップします)。
  3. IAM Identity Center アプリケーションの割り当てを設定します。
    1. IAM Identity Center コンソールで、Application AssignmentsApplications を選択します。
    2. アプリケーションを選択し、Actions ドロップダウンメニューから Edit details を選択します。
    3. User and group assignments で、Do not require assignments を選択します。この設定により、特定のデータアクセス権限を設定せずに Amazon Redshift 接続をテストできます。
  4. Amazon Elastic Compute Cloud (Amazon EC2) または AWS CloudShell から管理者アクセス権を持つ IAM Identity Center 認証を設定します。

ユーティリティは EC2 インスタンスまたは CloudShell から実行されます。EC2 インスタンスを使用する場合、IAM ロールがインスタンスにアタッチされます。実行時に使用する IAM ロールに以下の権限があることを確認してください (ない場合は、これらの権限を持つ新しいポリシーを作成し、IAM ロールにアタッチしてください)。

  • Amazon Redshift 権限 (サーバーレスの場合):
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "redshift-serverless:GetCredentials",
                "redshift-serverless:GetNamespace",
                "redshift-serverless:GetWorkgroup"
            ],
            "Resource": [
                "arn:aws:redshift-serverless:${region}:${account-id}:namespace/${namespace-id}",
                "arn:aws:redshift-serverless:${region}:${account-id}:workgroup/${workgroup-id}"
            ]
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "redshift-serverless:ListNamespaces",
                "redshift-serverless:ListWorkgroups"
            ],
            "Resource": "*"
        },
        {
            "Sid": "VisualEditor2",
            "Effect": "Allow",
            "Action": [
                "redshift:CreateClusterUser",
                "redshift:JoinGroup",
                "redshift:GetClusterCredentials",
                "redshift:ExecuteQuery",
                "redshift:FetchResults",
                "redshift:DescribeClusters",
                "redshift:DescribeTable"
            ],
            "Resource": [
                "arn:aws:redshift:${region}:${account-id}:cluster:redshift-serverless-${workgroup-name}",
                "arn:aws:redshift:${region}:${account-id}:dbgroup:redshift-serverless-${workgroup-name}/${dbgroup}",
                "arn:aws:redshift:${region}:${account-id}:dbname:redshift-serverless-${workgroup-name}/${dbname}",
                "arn:aws:redshift:${region}:${account-id}:dbuser:redshift-serverless-${workgroup-name}/${dbuser}"
            ]
        }
    ]
}
  • Amazon Redshift 権限 (プロビジョニング済みの場合):
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "redshift:GetClusterCredentials",
            "Resource": [
                "arn:aws:redshift: ${region}:${account-id}:dbname:${cluster_name}/${dbname}",
                "arn:aws:redshift: ${region}: ${account-id}:dbuser:${cluster-name}/${dbuser}"
            ]
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "redshift:DescribeClusters",
                "redshift:ExecuteQuery",
                "redshift:FetchResults",
                "redshift:DescribeTable"
            ],
            "Resource": "*"
        }
    ]
}
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:GetEncryptionConfiguration",
                "s3:ListBucket",
                "s3:DeleteObject"
            ],
            "Resource": [
                "arn:aws:s3:::${s3_bucket_name}/*",
                "arn:aws:s3:::${s3_bucket_name}"
            ]
        }
    ]
}
  • Identity store 権限:
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "identitystore:*",
            "Resource": [
                "arn:aws:identitystore:::group/*",
                "arn:aws:identitystore:::user/*",
                "arn:aws:identitystore::${account_id}:identitystore/${identity_store_id}",
                "arn:aws:identitystore:::membership/*"
            ]
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": "identitystore:*",
            "Resource": [
                "arn:aws:identitystore:::membership/*",
                "arn:aws:identitystore:::user/*",
                "arn:aws:identitystore:::group/*"
            ]
        }
    ]
}

アーティファクト

GitHub リポジトリから以下のユーティリティアーティファクトをダウンロードします。

  • idc_redshift_unload_indatabase_groups_roles_users.py – ユーザー、グループ、ロール、およびそれらの関連付けをアンロードする Python スクリプト。
  • redshift_unload.ini – 上記のスクリプトで使用される設定ファイル。Redshift データウェアハウスの詳細とファイルをアンロードする Amazon S3 の場所を読み取ります。
  • idc_add_users_groups_roles_psets.py – IAM Identity Center でユーザーとグループを作成し、IAM Identity Center でユーザーをグループに関連付ける Python スクリプト。
  • idc_config.ini – 上記のスクリプトで使用される設定ファイル。IAM Identity Center の詳細を読み取ります。
  • vw_local_ugr_to_idc_urgr_priv.sql – Amazon Redshift で 2 つのタスクを実行する SQL ステートメントを生成するスクリプト:
    • IAM Identity Center グループ名と完全に一致するロールを作成し、指定されたプレフィックスを追加します。
    • 新しく作成された Redshift ロールに適切な権限を付与します。

テストシナリオ

テストケースは、実践的な経験を提供し、ユーティリティの機能に慣れることを目的としています。シナリオは、階層的なネストされたロールシステムを中心に構成されており、オブジェクトレベルの権限がテクニカルロールに割り当てられることから始まります。テクニカルロールはビジネスロールに割り当てられます。最後に、ビジネスロールが個々のユーザーに付与されます。テスト環境を強化するために、シナリオにはユーザーグループも組み込まれています。次の図は階層を示しています。

データセットの作成

create schema コマンドを使用して、Redshift データベースに 2 つの別々のスキーマ (tickittpcds) を設定します。次に、tickittpcds サンプルデータセットを使用して、各スキーマにいくつかのテーブルを作成してデータを投入します。

必要に応じて、copy コマンドに適切な IAM ロールの Amazon リソースネーム (ARN) を指定してください。

ユーザーの作成

以下のコードでユーザーを作成します。

-- ETL users
create user etl_user_1 password 'EtlUser1!';
create user etl_user_2 password 'EtlUser2!';
create user etl_user_3 password 'EtlUser3!';

-- Reporting users
create user reporting_user_1 password 'ReportingUser1!';
create user reporting_user_2 password 'ReportingUser2!';
create user reporting_user_3 password 'ReportingUser3!';

-- Adhoc users
create user adhoc_user_1 password 'AdhocUser1!';
create user adhoc_user_2 password 'AdhocUser2!';

-- Analyst users
create user analyst_user_1 password 'AnalystUser1!';

ビジネスロールの作成

以下のコードでビジネスロールを作成します。

-- ETL business roles
create role role_bn_etl_tickit;
create role role_bn_etl_tpcds;

-- Reporting business roles
create role role_bn_reporting_tickit;
create role role_bn_reporting_tpcds;

-- Analyst business roles
create role role_bn_analyst_tickit;

テクニカルロールの作成

以下のコードでテクニカルロールを作成します。

-- Technical roles for tickit schema
create role role_tn_sel_tickit;
create role role_tn_dml_tickit;
create role role_tn_cte_tickit;

-- Technical roles for tpcds schema
create role role_tn_sel_tpcds;
create role role_tn_dml_tpcds;
create role role_tn_cte_tpcds;

グループの作成

以下のコードでグループを作成します。

-- Adhoc users group
create group group_adhoc;

テクニカルロールへの権限付与

テクニカルロールに権限を付与するには、以下を使用します。

-- role_tn_sel_tickit
grant usage on schema tickit to role role_tn_sel_tickit;
grant select on all tables in schema tickit to role role_tn_sel_tickit;

-- role_tn_dml_tickit
grant usage on schema tickit to role role_tn_dml_tickit;
grant insert, update, delete on all tables in schema tickit to role role_tn_dml_tickit;

-- role_tn_cte_tickit
grant usage, create on schema tickit to role role_tn_cte_tickit;
grant drop on all tables in schema tickit to role role_tn_cte_tickit;

-- role_tn_sel_tpcds
grant usage on schema tpcds to role role_tn_sel_tpcds;
grant select on all tables in schema tpcds to role role_tn_sel_tpcds;

-- role_tn_dml_tpcds
grant usage on schema tpcds to role role_tn_dml_tpcds;
grant insert, update, delete on all tables in schema tpcds to role role_tn_dml_tpcds;

-- role_tn_cte_tpcds
grant usage, create on schema tpcds to role role_tn_cte_tpcds;
grant drop on all tables in schema tpcds to role role_tn_cte_tpcds;

ビジネスロールへのテクニカルロールの付与

テクニカルロールをビジネスロールに付与するには、以下を使用します。

-- Business role role_bn_etl_tickit
grant role role_tn_sel_tickit to role role_bn_etl_tickit;
grant role role_tn_dml_tickit to role role_bn_etl_tickit;
grant role role_tn_cte_tickit to role role_bn_etl_tickit;

-- Business role role_bn_etl_tpcds
grant role role_tn_sel_tpcds to role role_bn_etl_tpcds;
grant role role_tn_dml_tpcds to role role_bn_etl_tpcds;
grant role role_tn_cte_tpcds to role role_bn_etl_tpcds;

-- Business role role_bn_reporting_tickit
grant role role_tn_sel_tickit to role role_bn_reporting_tickit;

-- Business role role_bn_reporting_tpcds
grant role role_tn_sel_tpcds to role role_bn_reporting_tpcds;

-- Business role role_bn_analyst_tickit
grant role role_tn_sel_tickit to role role_bn_analyst_tickit;

ユーザーへのビジネスロールの付与

ビジネスロールをユーザーに付与するには、以下を使用します。

-- etl_user_1
grant role role_bn_etl_tickit to etl_user_1;

-- etl_user_2
grant role role_bn_etl_tpcds to etl_user_2;

-- etl_user_3
grant role role_bn_etl_tickit to etl_user_3;
grant role role_bn_etl_tpcds to etl_user_3;

-- reporting_user_1
grant role role_bn_reporting_tickit to reporting_user_1;

-- reporting_user_2
grant role role_bn_reporting_tpcds to reporting_user_2;

-- reporting_user_3
grant role role_bn_reporting_tickit to reporting_user_3;
grant role role_bn_reporting_tpcds to reporting_user_3;

-- analyst_user_1
grant role role_bn_analyst_tickit to analyst_user_1;

グループへの権限付与

グループに権限を付与するには、以下を使用します。

-- Group group_adhoc
grant usage on schema tickit to group group_adhoc;
grant select on all tables in schema tickit to group group_adhoc;

grant usage on schema tpcds to group group_adhoc;
grant select on all tables in schema tpcds to group group_adhoc;

グループへのユーザー追加

グループにユーザーを追加するには、以下を使用します。

alter group group_adhoc add user adhoc_user_1;
alter group group_adhoc add user adhoc_user_2;

ソリューションのデプロイ

ソリューションをデプロイするには、以下の手順を完了します。

  1. redshift_unload.ini で Redshift クラスターまたはサーバーレスエンドポイントの詳細と Amazon S3 の場所を更新します。
    • cluster_type = provisioned または serverless
    • cluster_id = ${cluster_identifier} (cluster_typeprovisioned の場合に必要)
    • db_user = ${database_user}
    • db_name = ${database_name}
    • host = ${host_url} (cluster_typeprovisioned の場合に必要)
    • port = ${port_number}
    • workgroup_name = ${workgroup_name} (cluster_typeserverless の場合に必要)
    • region = ${region}
    • s3_bucket = ${S3_bucket_name}
    • roles = roles.csv
    • users = users.csv
    • role_memberships = role_memberships.csv
  2. idc_config.ini で IAM Identity Center の詳細を更新します。
    • region = ${region}
    • account_id = ${account_id}
    • identity_store_id = ${identity_store_id} (IAM Identity Center コンソールの Settings ページで確認可能)
    • instance_arn = ${iam_identity_center_instance_arn} (IAM Identity Center コンソールの Settings ページで確認可能)
    • permission_set_arn = ${permission_set_arn}
    • assign_permission_set = True または False (permission_set_arn が定義されている場合は True)
    • s3_bucket = ${S3_bucket_name}
    • users_file = users.csv
    • roles_file = roles.csv
    • role_memberships_file = role_memberships.csv
  3. CloudShell または Amazon Redshift に接続できる EC2 インスタンスにディレクトリを作成します。
  4. 2 つの .ini ファイルをコピーし、Python スクリプトをそのディレクトリにダウンロードします。
  5. CloudShell または EC2 インスタンスから以下のコマンドを実行します。
    python idc_redshift_unload_indatabase_groups_roles_users.py
  6. CloudShell または EC2 インスタンスから以下のコマンドを実行します。
    python idc_add_users_groups_roles_psets.py
  7. Amazon Redshift クエリエディタ v2 または任意の SQL クライアントを使用して、スーパーユーザー認証情報で Redshift クラスターに接続します。
  8. vw_local_ugr_to_idc_urgr_priv.sql ファイルの SQL をコピーし、クエリエディタで実行して vw_local_ugr_to_idc_urgr_priv ビューを作成します。
  1. 以下の SQL コマンドを実行して、ロールと権限を作成する SQL ステートメントを生成します。
    select existing_grants,idc_based_grants from vw_local_ugr_to_idc_urgr_priv;

    例えば、以下の既存の権限付与を考えてみましょう。

    CREATE GROUP "group_adhoc";
    CREATE ROLE "role_bn_etl_tickit";
    GRANT USAGE ON SCHEMA tpcds TO role "role_tn_sel_tpcds" ;

    これらの権限付与は以下のコードに変換されます。

    CREATE role "AWSIDC:group_adhoc";
    CREATE role "AWSIDC:role_bn_etl_tickit";
    GRANT USAGE ON SCHEMA tpcds TO role "AWSIDC:role_tn_sel_tpcds";
  2. idc_based_grants 列のステートメントを確認します。

    包括的な権限リストではない可能性があるため、慎重に確認してください。
  3. すべてが正しければ、SQL クライアントからステートメントを実行します。

プロセスが完了すると、以下の設定が完了しているはずです。

  • IAM Identity Center に Amazon Redshift から新しく作成されたユーザーが含まれている
  • Redshift のローカルグループとロールが IAM Identity Center のグループとして作成されている
  • IAM Identity Center で作成されたグループに対応する新しいロールが Amazon Redshift に確立されている
  • 新しく作成された Redshift ロールに適切な権限が割り当てられている

クエリエディタを使用して IAM Identity Center で Amazon Redshift に接続する際に問題が発生した場合は、「Troubleshooting connections from Amazon Redshift query editor v2」を参照してください。

考慮事項

このソリューションを使用する際は、以下の点を考慮してください。

  • 執筆時点では、AWS Lake Formation での権限作成は対象外です。
  • IAM Identity Center と IdP の統合設定は、このユーティリティの対象外です。ただし、vw_local_ugr_to_idc_urgr_priv.sql ビューを使用して、IAM Identity Center を通じて渡される IdP ユーザーとグループにロールを作成し、権限を付与できます。
  • ローカルユーザー ID に直接権限を付与している場合 (グループやロールを使用していない場合)、IAM Identity Center 統合のためにロールベースの権限アプローチに変更する必要があります。ロールを作成し、ユーザーに直接権限を付与する代わりにロールを使用して権限を付与してください。

クリーンアップ

テストシナリオを完了した場合は、環境をクリーンアップします。

  1. ユーティリティによって作成された、IAM Identity Center で確立されたグループに対応する新しい Redshift ロールを削除します。
  2. IAM Identity Center 内でユーティリティによって作成されたユーザーとグループを削除します。
  3. テストシナリオで指定されたユーザー、グループ、ロールを削除します。
  4. tickittpcds スキーマを削除します。

ロールを削除する際に FORCE パラメータを使用すると、関連する割り当てを削除できます。

まとめ

本記事では、Redshift のローカルユーザー管理を IAM Identity Center に移行する方法を紹介しました。移行により、一元化されたユーザーとグループ管理によるアクセス管理の簡素化、AWS サービス全体での合理化されたユーザーエクスペリエンス、管理負荷の削減など、組織にとって重要な利点があります。移行プロセスは段階的に実装できるため、本番環境に完全に移行する前に各ステップをテストして検証できます。

組織が AWS インフラストラクチャを拡大し続けるにつれて、IAM Identity Center を活用することは、安全で効率的なアクセス管理を維持するためにますます価値が高まります。すべてのデータと AI のための統合エクスペリエンスを提供する Amazon SageMaker Unified Studio もその一例です。

著者について

Ziad Wali

Ziad Wali

Ziad は、AWS の Analytics Specialist Solutions Architect です。データベースとデータウェアハウスの分野で 10 年以上の経験があり、信頼性が高く、スケーラブルで効率的なソリューションの構築を楽しんでいます。仕事以外では、スポーツや自然の中で過ごすことを楽しんでいます。

Satesh Sonti

Satesh Sonti

Satesh は、アトランタを拠点とする Sr. Analytics Specialist Solutions Architect で、エンタープライズデータプラットフォーム、データウェアハウス、分析ソリューションの構築を専門としています。世界中の銀行や保険のクライアント向けにデータアセットの構築と複雑なデータプラットフォームプログラムのリードに 19 年以上の経験があります。

Maneesh Sharma

Maneesh Sharma

Maneesh は、AWS の Senior Database Engineer で、大規模なデータウェアハウスと分析ソリューションの設計と実装に 10 年以上の経験があります。さまざまな Amazon Redshift パートナーやお客様と協力して、より良いインテグレーションを推進しています。

Sumanth Punyamurthula

Sumanth Punyamurthula

Sumanth は、AWS の Senior Data and Analytics Architect で、旅行、ホスピタリティ、金融、ヘルスケア業界にわたる分析、データウェアハウス、データレイク、データガバナンス、セキュリティ、クラウドインフラストラクチャを含む大規模な分析イニシアチブのリードに 20 年以上の経験があります。


この記事は Kiro が翻訳を担当し、Solutions Architect の 榎本 貴之 がレビューしました。