Amazon Redshift Serverless での Identity and Access Management - Amazon Redshift

Amazon Redshift Serverless での Identity and Access Management

Amazon Redshift へのアクセスには、AWS が要求の認証に使用する認証情報が必要です。これらの認証情報には、Amazon Redshift Serverless などの AWS リソースへのアクセス許可が必要です。

次のセクションでは、AWS Identity and Access Management(IAM) と Amazon Redshift を使用してリソースにアクセスできるユーザーを制御することで、リソースを保護する方法について詳しく説明します。詳細については、「Amazon Redshift での Identity and Access Management」を参照してください。

Amazon Redshift Serverless へのアクセス許可の付与

Amazon Redshift Serverless が、他の AWS サービスにアクセスする際には、そのためのアクセス許可が必要です。

ユーザーに代わって Amazon Redshift Serverless が他の AWS サービスにアクセスするための許可

一部の Amazon Redshift 機能では、ユーザーに代わって Amazon Redshift が他の AWS のサービスにアクセスする必要があります。Amazon Redshift Serverless インスタンスを、ユーザーに代わって動作させるためには、それに対してセキュリティ認証情報を指定します。セキュリティ認証情報を指定する望ましい方法は、AWS Identity and Access Management(IAM) ロールを指定することです。あるいは、Amazon Redshift コンソールから IAM ロールを作成し、デフォルトとして設定することもできます。詳細については、「Amazon Redshift 用にデフォルトの IAM ロールを作成する」を参照してください。

他の AWS サービスにアクセスするためには、適切なアクセス許可を持つ IAM ロールを作成します。また、この作成したロールを、Amazon Redshift Serverless と関連付ける必要もあります。さらに、Amazon Redshift コマンドの実行時にロールの Amazon リソースネーム (ARN) を指定するか、defaultキーワードを指定します。

IAM ロールの信頼関係を https://console.aws.amazon.com/iam/ で変更する場合は、redshift-serverless.amazonaws.comredshift.amazonaws.com がプリンシパルサービス名として含まれていることを確認します。ユーザーに代わって他の AWS サービスにアクセスするための IAM ロールの管理については、「ユーザーに代わって Amazon Redshift が他の AWS サービスにアクセスすることを許可する」を参照してください。

Amazon Redshift 用にデフォルトの IAM ロールを作成する

Amazon Redshift コンソールから IAM ロールを作成する場合、Amazon Redshift は AWS アカウント 内でロールをプログラム的に作成します。さらに Amazon Redshift では、作成したロールに対し、既存の AWS 管理ポリシーを自動的にアタッチします。このアプローチにより、ロール作成のために IAM コンソールに切り替える必要はなくなり、作業を Amazon Redshift コンソール内で完了できます。

クラスター用としてコンソールから作成する IAM ロールには、AmazonRedshiftAllCommandsFullAccess マネージドのポリシーが自動的にアタッチされます。この IAM ロールにより Amazon Redshift は、IAM アカウントにある AWS リソースにおいて、データのコピー、解放、クエリ、および分析を行えるようになります。これに関連するコマンドとしては、COPY、UNLOAD、CREATE EXTERNAL FUNCTION、CREATE EXTERNAL TABLE、CREATE EXTERNAL SCHEMA、CREATE MODEL、CREATE LIBRARY などがあります。Amazon Redshift でのデフォルト使用のために IAM ロールを作成する方法については、「Amazon Redshift 用にデフォルトの IAM ロールを作成する」を参照してください。

Amazon Redshift のデフォルトとして IAM ロールを作成するには、AWS Management Console を開いて [Amazon Redshift コンソール] を選択します。次に、メニューで [Redshift Serverless] を選択します。Serverless ダッシュボードから、新しいワークグループを作成できます。作成手順では、IAM ロールの選択、または新しい IAM ロールの設定を行います。

既に Amazon Redshift Serverless ワークグループがあり、それに対して IAM ロールを設定する場合は、AWS Management Console を開きます。[Amazon Redshift コンソール] を選択して、次に [Redshift Serverless] を選択します。Amazon Redshift Serverless コンソールで、[名前空間の設定] を選択します。[セキュリティと暗号化] でアクセス許可を編集できます。

名前空間への IAM ロールの割り当て

各 IAM ロールは各ロールが AWS で実行できるアクションを決定するアクセス許可ポリシーを持つ AWS ID です。ロールは、それを必要とするすべてのユーザーが引き受け可能です。また、各名前空間は、テーブルやスキーマなどのオブジェクトとユーザーのコレクションです。Amazon Redshift Serverless を使用する場合、複数の IAM ロールを名前空間に関連付けることができます。これにより、データベースオブジェクトのコレクションに対してアクセス許可を適切に構成することが容易になり、ロールは内部データと外部データの両方に対してアクションを実行できます。例えば、Amazon Redshift データベースで COPY コマンドを実行し、Amazon S3 からデータを取得して Redshift テーブルに入力するようにできます。

このセクションで前に説明したとおり、コンソールを使用して、複数のロールを名前空間に関連付けることができます。API コマンド CreateNamespace、または CLI コマンド create-namespace を使用することもできます。API または CLI コマンドを使用すると、1 つ以上のロールで IAMRoles を入力することにより、名前空間に IAM ロールを割り当てることができます。具体的には、コレクションに特定のロールの ARN を追加します。

名前空間に関連付けられた IAM ロールの管理

AWS Management Console で、AWS Identity and Access Management のロールに対するアクセス権限ポリシーを管理できます。[Namespace configuration] (名前空間の設定) の中の設定を使って、名前空間の IAM ロールを管理できます。Amazon Redshift Serverless での名前空間とその使用の詳細については、「Overview of Amazon Redshift Serverless workgroups and namespaces (Amazon Redshift Serverless ワークグループと名前空間の概要)」を参照してください。

Amazon Redshift 用の IAM 認証情報の使用開始

Amazon Redshift コンソールに初めてサインインし、Amazon Redshift Serverless を初めて試す場合は、必要なポリシーがアタッチされた IAM ロールを持つユーザーとしてサインインすることをお勧めします。Amazon Redshift Serverless インスタンスの作成を開始すると、サインイン時に使用した IAM ロール名が Amazon Redshift に記録されます。Amazon Redshift コンソールと Amazon Redshift Serverless コンソールには、同じ認証情報を使用してサインインできます。

Amazon Redshift Serverless インスタンスの作成中に、データベースを作成できます。一時認証情報オプションを使用しながらデータベースに接続するには、クエリエディタ v2 を使用します。

データベース用として保持される新しい管理者ユーザー名とパスワードを追加するには、[Customize admin user credentials] (管理者ユーザー認証情報のカスタマイズ) をクリックし、新しい管理者ユーザ名とそのパスワードを入力します。

Amazon Redshift Serverless の使用を開始し、ワークグループと名前空間をコンソールで初めて作成する場合は、アクセス許可ポリシーがアタッチされた IAM ロールを使用します。このロールでは、管理者のアクセス許可 ( arn:aws:iam::aws:policy/AdministratorAccess) または Amazon Redshift への完全なアクセス許可 (arn:aws:iam::aws:policy/AmazonRedshiftFullAccess) を IAM ポリシーにアタッチする必要があります。

Amazon Redshift Serverless コンソールの使用を開始する際、Amazon Redshift Serverless が IAM 認証情報を使用する方法の概要について、次のシナリオで説明します。

  • [Use default setting] (デフォルト設定の使用) を選択した場合 - Amazon Redshift Serverlessが、現在の IAM ID をデータベースのスーパーユーザーに変換します。この同じ IAM アイデンティティを使用して、Amazon Redshift Serverless コンソールから、Amazon Redshift Serverless 内のデータベースに対しスーパーユーザーアクションを実行できます。

  • [Admin user name] (管理者ユーザー名) とパスワード を指定せずに、[Customize settings] (設定のカスタマイズ) をクリックすると、Amazon Redshift Serverless は、現在の IAM 認証情報をデフォルトの管理者ユーザー認証情報として使用します。

  • [Customize settings] (設定のカスタマイズ) を選択し [Admin user name] (管理者ユーザー名) とパスワードを指定した場合 - Amazon Redshift Serverless は、現在の IAM ID をデータベースのスーパーユーザーに変換します。また、Amazon Redshift Serverless は、別の長期ログインユーザー名とパスワードのペアをスーパーユーザーとして作成します。ここで作成されたユーザーネームとパスワードのペア、または現在の IAM アイデンティティを使用して、スーパーユーザーとしてデータベースにログインできます。

データベースロールのアクセス許可を使用した Amazon Redshift Serverless データベースオブジェクトへのアクセスの管理

この手順では、Amazon Redshift データベースロールを通じてテーブルをクエリするアクセス許可を付与する方法を示します。ロールを割り当てるには、IAM でユーザーにタグをアタッチします。ユーザーがサインインすると、ロールが Amazon Redshift に渡されます。これは、「Amazon Redshift Serverless のフェデレーションユーザーに付与するデータベースロールの定義」の概念の例に基づく説明です。これらのステップを実行する利点は、ユーザーをデータベースロールに関連付けることで、データベースオブジェクトごとにアクセス許可を設定する必要がなくなることです。これにより、ユーザーがテーブルに対して実行するクエリ、変更、データの追加や、その他のアクションを管理しやすくなります。

この手順では、ユーザーが Amazon Redshift Serverless データベースをセットアップ済みであり、データベースにアクセス許可を付与できることを前提としています。また、AWS コンソールでの IAM ユーザーの作成、IAM ロールの作成、ポリシー許可の割り当てに対するアクセス許可を持っていることを前提としています。

  1. IAM コンソールを使用して IAM ロールを作成します。後で、このユーザーを使用してデータベースに接続します。

  2. クエリエディタ v2 または別の SQL クライアントを使用して、Redshift データベースロールを作成します。データベースロールの作成の詳細については、「CREATE ROLE」を参照してください。

    CREATE ROLE urban_planning;

    SVV_ROLES システムビューにクエリを実行し、ロールが作成済みであることを確認します。このクエリでは、システムロールも返されます。

    SELECT * from SVV_ROLES;
  3. 作成したデータベースロールに、テーブルから選択するためのアクセス許可を付与します  (作成した IAM ユーザーは、このデータベースロールにより、最終的にサインインしてテーブルからレコードを選択します)。次のコード例のロール名とテーブル名はサンプルです。ここでは、cities という名前のテーブルから選択するためのアクセス許可を付与します。

    GRANT SELECT on TABLE cities to ROLE urban_planning;
  4. AWS Identity and Access Management コンソールを使用して IAM ロールを作成します。このロールは、クエリエディタ v2 を使用するためのアクセス許可を付与します。新しい IAM ロールを作成し、信頼できるエンティティタイプとして、AWS アカウントを選択します。次に [このアカウント] を選択します。以下のポリシーのアクセス許可をロールに付与します。

    • AmazonRedshiftReadOnlyAccess

    • tag:GetResources

    • tag:GetTagKeys

    • sqlworkbench:ListDatabases と sqlworkbench:UpdateConnection を含む、sqlworkbench のすべてのアクション。

  5. IAM コンソールで、以前に作成した IAM ユーザーにキー RedshiftDbRoles を使用してタグを追加します。タグの値は、最初のステップで作成したデータベースロールと一致する必要があります。それは urban_planning サンプルにあります。

これらのステップを完了したら、IAM コンソールで作成したユーザーに IAM ロールを割り当てます。ユーザーがクエリエディタ v2 を使用してデータベースにサインインすると、タグ内のデータベースロール名が Amazon Redshift に渡され、ユーザーに関連付けられます。このデータベースロールにより、ユーザーは適切なテーブルをクエリできます。例えば、このサンプルのユーザーは urban_planning データベースロールを通じて cities テーブルをクエリできます。