一時的な IAM 認証情報の作成
このセクションでは、IAM ベースの一時的データベースユーザー認証情報を生成し、新しい認証情報を使用してデータベースにログオンするようシステムを設定する方法を示しています。
プロセスのおおまかな流れは次のとおりです。
-
ステップ 1: IAM シングルサインオンアクセス用の IAM ロールを作成する
(任意) IAM 認証と、サードパーティー認証プロバイダ (IdP) を統合して、Amazon Redshift データベースへのアクセスをユーザーに認証できます。
-
ステップ 2: IdP の SAML アサーションを設定する
(任意)IdP を使って IAM 認証を使用するには、組織のユーザーまたはグループを IAM ロールにマッピングするクレームルールを IdP アプリケーションで定義する必要があります。オプションで、属性要素を含めて
GetClusterCredentials
パラメータを設定できます。 -
ステップ 3: GetClusterCredentials を呼び出すアクセス許可を持つ IAM ロールを作成する
SQL クライアントアプリケーションは、
GetClusterCredentials
オペレーションを呼び出すときにユーザーを引き受けます。ID プロバイダアクセス用の IAM ロールを作成したら、そのロールに必要なアクセス権限を追加できます。 -
ステップ 4: データベースユーザーとデータベースグループを作成する
(任意)デフォルトでは、ユーザー名が存在しない場合、
GetClusterCredentials
は認証情報を新しいユーザーを作成します。ログオン時にユーザーが参加するユーザーグループを指定することもできます。デフォルトでは、データベースユーザーは PUBLIC グループに参加します。 -
ステップ 5: IAM 認証情報を使用するように JDBC または ODBC 接続を設定する
Amazon Redshift データベースに接続するには、Amazon Redshift JDBC または ODBC ドライバーを使用するよう SQL クライアントを設定します。
ステップ 1: IAM シングルサインオンアクセス用の IAM ロールを作成する
シングルサインオンアクセスに ID プロバイダを利用しない場合は、このステップを省略できます。
既に AWSの外部でユーザー ID を管理している場合、IAM 認証とサードパーティーの SAML-2.0 ID プロバイダー (IdP) を統合して、Amazon Redshift データベースへのユーザーのアクセスを認証できます。
詳細については、IAM ユーザーガイドの ID プロバイダーとフェデレーション を参照してください。
Amazon Redshift IdP 認証を使用する前に、AWS SAML ID プロバイダーを作成します。IAM コンソールで IdP を作成し、IdP およびその設定について AWS に通知できます。これにより、AWS アカウントと IdP 間の信頼が確立されます。ロールを作成する手順については、IAM ユーザーガイドから SAML 2.0 フェデレーション用のロール作成 (コンソール) を参照してください。
ステップ 2: IdP の SAML アサーションを設定する
IAM ロールを作成したら、組織のユーザーまたはグループを IAM ロールにマッピングするクレームルールを IdP アプリケーションで定義する必要があります。詳細については、IAM ユーザーガイドの 認証応答の SAML アサーションを設定する を参照してください。
オプションの GetClusterCredentials
パラメータ DbUser
、AutoCreate
、DbGroups
を使用する場合は、2 つのオプションがあります。JDBC 接続または ODBC 接続でパラメータの値を設定することも、SAML 属性要素を IdP に追加して値を設定することもできます。DbUser
、AutoCreate
、DbGroups
パラメータの詳細については、ステップ 5: IAM 認証情報を使用するように JDBC または ODBC 接続を設定するを参照してください。
注記
「${redshift:DbUser}
」で説明されているように、IAM ポリシー変数 GetClusterCredentials のリソースポリシー を使用する場合、DbUser
の値は API オペレーションのリクエストコンテキストから取得した値で置き換えられます。Amazon Redshift ドライバーは、SAML 属性として提供される値ではなく、接続 URL から提供される DbUser
変数の値を使用します。
この接続の安全性を維持するには、IAM ポリシーの条件を使用して、DbUser
値を RoleSessionName
で検証することが推奨されます。IAM ポリシーを使用して条件を設定する方法の例は、GetClusterCredentials を使用するポリシーの例で参照できます。
DbUser
、AutoCreate
、DbGroups
パラメータを設定するように IdP を設定するには、次の Attribute
要素を含めます。
-
Attribute
属性を持つName
要素は「https://redshift.amazon.com/SAML/Attributes/DbUser」に設定します。AttributeValue
要素は、Amazon Redshift データベースに接続するユーザー名に設定します。AttributeValue
要素の値は小文字のみで、先頭は文字にし、英数字、アンダースコア (_)、プラス記号 (+)、ドット (.)、アットマーク (@)、ハイフン (_) のみを含み、128 文字未満である必要があります。通常、ユーザー名はユーザー ID (例: bobsmith) またはメールアドレス (例: bobsmith@example.com) になります。値にスペースを含めることはできません (ユーザーの表示名を Bob Smith にするなど)。<Attribute Name="https://redshift.amazon.com/SAML/Attributes/DbUser"> <AttributeValue>user-name</AttributeValue> </Attribute>
-
Name 属性を持つ Attribute 要素は「https://redshift.amazon.com/SAML/Attributes/AutoCreate」に設定します。
存在していない場合に、新しいデータベースユーザーを作成するには、AttributeValue 要素を true に設定します。データベースユーザーが Amazon Redshift データベースに存在している必要があることを指定するには、AttributeValue を false に設定します。
<Attribute Name="https://redshift.amazon.com/SAML/Attributes/AutoCreate"> <AttributeValue>true</AttributeValue> </Attribute>
-
Attribute
属性を持つName
要素は「https://redshift.amazon.com/SAML/Attributes/DbGroups」に設定します。この要素には、1 つ以上の
AttributeValue
要素が含まれています。Amazon Redshift データベースに接続するとき、セッションの期間中にDbUser
が参加するデータベースグループ名に各AttributeValue
要素を設定します。<Attribute Name="https://redshift.amazon.com/SAML/Attributes/DbGroups"> <AttributeValue>group1</AttributeValue> <AttributeValue>group2</AttributeValue> <AttributeValue>group3</AttributeValue> </Attribute>
ステップ 3: GetClusterCredentials を呼び出すアクセス許可を持つ IAM ロールを作成する
SQL クライアントには、自動的に GetClusterCredentials
オペレーションを呼び出すための許可が必要です。その許可を付与するには、ユーザーまたはロールを作成し、必要なアクセス許可を付与するポリシーをアタッチします。
GetClusterCredentials を呼び出すアクセス許可を持つ IAM ロールを作成するには
-
IAM サービスを使用して、ユーザーまたはロールを作成します。既存のユーザーまたはロールを使用することもできます。たとえば、アイデンティティプロバイダアクセス用の IAM ロールを作成したら、そのロールに必要な IAM ポリシーをアタッチできます。
-
redshift:GetClusterCredentials
オペレーションを呼び出すアクセス許可を持つアクセス許可ポリシーをアタッチします。指定するオプションパラメータにより、追加のアクションやリソースをポリシーで許可または制限することもできます。-
SQL クライアントによるクラスター ID、AWS リージョン、およびポートの取得を許可するには、
redshift:DescribeClusters
オペレーションを呼び出すアクセス許可を Redshift クラスターリソースに含めます。 -
AutoCreate
オプションを使用する場合、redshift:CreateClusterUser
を呼び出すアクセス許可をdbuser
リソースに含めます。次の Amazon リソースネーム (ARN) は、Amazon Redshiftdbuser
を指定します。
、region
、およびaccount-id
を、お使いの AWS リージョン、アカウント、およびクラスターの値に置き換えます。cluster-name
に、クラスターデータベースへのログインに使用するユーザー名を指定します。dbuser-name
arn:aws:redshift:
region
:account-id
:dbuser:cluster-name
/dbuser-name
-
(任意)次の形式で Amazon Redshift
dbname
リソースを指定する ARN を追加します。
、region
、およびaccount-id
を、お使いの AWS リージョン、アカウント、およびクラスターの値に置き換えます。cluster-name
に、ユーザーがログインするデータベースの名前を指定します。database-name
arn:aws:redshift:
region
:account-id
:dbname:cluster-name
/database-name
-
DbGroups
オプションを使用する場合、次の形式で、redshift:JoinGroup
オペレーションを呼び出すアクセス許可を Amazon Redshiftdbgroup
リソースに含めます。
、region
、およびaccount-id
を、お使いの AWS リージョン、アカウント、およびクラスターの値に置き換えます。cluster-name
には、ユーザーがログイン時に参加するユーザーグループの名前を指定します。dbgroup-name
arn:aws:redshift:
region
:account-id
:dbgroup:cluster-name
/dbgroup-name
-
詳細な説明と例については、GetClusterCredentials のリソースポリシーを参照してください。
次の例では、IAM ロールで GetClusterCredentials
オペレーションの呼び出しを許可するポリシーを示します。Amazon Redshift dbuser
リソースを指定すると、examplecluster
というクラスターで、データベースユーザー名 temp_creds_user
にロールのアクセスが付与されます。
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "redshift:GetClusterCredentials", "Resource": "arn:aws:redshift:us-west-2:123456789012:dbuser:examplecluster/temp_creds_user" } }
ワイルドカード (*) を使用して、クラスター名、ユーザー名、およびデータベースグループ名のすべてまたは一部を置き換えることができます。次の例では、指定したアカウントのすべてのクラスターで、temp_
で始まるすべてのユーザー名が許可されます。
重要
次の例のステートメントでは、指定された文字から始まるすべてのリソースがポリシーで許可されるように、リソースの値の一部として、ワイルドカード文字 (*) を指定します。IAM ポリシーでワイルドカード文字を使用すると、過度に許可される場合があります。ベストプラクティスとして、ビジネスアプリケーションを最も制限する現実的なポリシーを使用することをお勧めします。
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "redshift:GetClusterCredentials", "Resource": "arn:aws:redshift:us-west-2:123456789012:dbuser:*/temp_*" } }
次の例では、IAM ロールが GetClusterCredentials
オペレーションを呼び出すことを許可するポリシーを示します。オプションで新しいユーザーを自動的に作成し、ログイン時にユーザーが参加するグループを指定することができます。"Resource":
"*"
句により、クラスター、データベースユーザー、またはユーザーグループを含めて、任意のリソースへのロールアクセスが許可されます。
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": [ "redshift:GetClusterCredentials", "redshift:CreateClusterUser", "redshift:JoinGroup" ], "Resource": "*" } }
詳細については、Amazon Redshift ARN 構文を参照してください。
ステップ 4: データベースユーザーとデータベースグループを作成する
(任意)クラスターデータベースにログインするために使用するデータベースユーザーを作成できます。既存のユーザー用の一時的ユーザー認証情報を作成する場合、ユーザーのパスワードを無効にして、一時パスワードでログオンするようユーザーに強制できます。または、GetClusterCredentials
Autocreate 自動作成オプションを使用して、自動的に新しいデータベースユーザーを作成できます。
アクセス許可により、IAM データベースユーザーがログイン時に参加するデータベースユーザーグループを作成できます。GetClusterCredentials
オペレーションを呼び出す場合、新しいユーザーがログイン時に参加するユーザーグループ名のリストを指定できます。これらのグループメンバーシップは、特定のリクエストで生成された認証情報を使用して作成されたセッションに対してのみ有効です。
データベースユーザーとデータベースグループを作成するには
-
Amazon Redshift データベースにログインし、CREATE USER を使用してデータベースユーザーを作成するか、ALTER USERを使用して既存のユーザーを変更します。
-
(任意)ユーザーがパスワードを使用することを防ぐために PASSWORD DISABLE オプションを指定します。ユーザーのパスワードが無効になると、ユーザーは一時的な認証情報を使用してのみログオンできます。パスワードが無効になっていない場合、ユーザーはパスワードまたは一時的な認証情報を使用してログオンできます。スーパーユーザーのパスワードを無効にすることはできません。
AWS Management Console の外部で AWS を操作するには、プログラマチックアクセス権が必要です。プログラマチックアクセス権を付与する方法は、AWS にアクセスしているユーザーのタイプによって異なります。
ユーザーにプログラマチックアクセス権を付与するには、以下のいずれかのオプションを選択します。
プログラマチックアクセス権を必要とするユーザー 目的 方法 ワークフォースアイデンティティ
(IAM Identity Center で管理されているユーザー)
一時的な認証情報を使用して、AWS CLI、AWS SDK、または AWS API へのプログラマチックリクエストに署名します。 使用するインターフェイス用の手引きに従ってください。
-
AWS CLI については、AWS Command Line Interface ユーザーガイドの「AWS IAM Identity Center を使用するための AWS CLI の設定」を参照してください。
-
AWS SDK、ツール、および AWS API については、AWS SDK とツールリファレンスガイドの「IAM Identity Center 認証」を参照してください。
IAM 一時的な認証情報を使用して、AWS CLI、AWS SDK、または AWS API へのプログラムによるリクエストに署名します。 「IAM ユーザーガイド」の「AWS リソースでの一時的な認証情報の使用」の指示に従ってください。 IAM (非推奨)
長期的な認証情報を使用して、AWS CLI、AWS SDK、AWS API へのプログラムによるリクエストに署名します。使用するインターフェイス用の手順に従ってください。
-
AWS CLI については、AWS Command Line Interface ユーザーガイドの「IAM ユーザー認証情報を使用した認証」を参照してください。
-
AWS SDK とツールについては、AWS SDK とツールリファレンスガイドの「長期認証情報を使用して認証する」を参照してください。
-
AWS API については、IAM ユーザーガイドの「IAM ユーザーのアクセスキーの管理」を参照してください。
次の例では、パスワードを無効にしてユーザーを作成します。
create user temp_creds_user password disable;
次の例では、既存のユーザーのパスワードを無効にします。
alter user temp_creds_user password disable;
-
-
CREATE GROUPを使用してデータベースユーザーグループを作成します。
-
GRANT コマンドを使用して、グループのアクセス権限を定義します。
ステップ 5: IAM 認証情報を使用するように JDBC または ODBC 接続を設定する
Amazon Redshift JDBC または ODBC ドライバーを使用して SQL クライアントを設定できます。このドライバーは、データベースユーザーの認証情報を作成し、SQL クライアントと Amazon Redshift データベース間の接続を確立するプロセスを管理します。
認証に アイデンティティプロバイダーを使用する場合は、認証情報プロバイダープラグインの名前を指定します。Amazon Redshift JDBC および ODBC ドライバーには、次の SAML ベースの認証情報プロバイダーのプラグインが含まれます。
-
Active Directory フェデレーションサービス (AD FS)
-
PingOne
-
Okta
-
Azure Client ID
アイデンティティプロバイダーとして Microsoft Azure AD をセットアップする手順については、JDBC または ODBC シングルサインオン認証の設定を参照してください。
IAM 認証情報を使用するように JDBC 接続を設定するには
-
「Amazon Redshift での JDBC ドライバーのバージョン 2.1 による接続の構成」ページから最新の Amazon Redshift JDBC ドライバーをダウンロードします。
-
次のいずれかの形式で IAM 認証情報オプションを使用して JDBC URL を作成します。IAM 認証を使用するには、次の例に示すように、
jdbc:redshift:
に続いて Amazon Redshift JDBC URL にiam:
を追加します。jdbc:redshift:iam://
cluster-name
、region
、およびaccount-id
を追加します。JDBC ドライバーでは IAM アカウント情報とクラスター名を使用することで、クラスター IDおよび AWS リージョンを取得できます。そのためには、ユーザーまたはロールには、指定したクラスターでredshift:DescribeClusters
オペレーションを呼び出すアクセス許可が必要です。ユーザーまたはロールにredshift:DescribeClusters
オペレーションを呼び出すアクセス許可がない場合は、次の例に示すように、クラスター ID、AWS リージョン、およびポートを含めます。ポート番号はオプションです。jdbc:redshift:iam://examplecluster.abc123xyz789.us-west-2.redshift.amazonaws.com:5439/dev
-
JDBC オプションを追加して IAM 認証情報を提供します。さまざまな組み合わせの JDBC オプションを使用して、IAM 認証情報を提供できます。詳細については、「データベースユーザー認証情報を作成するための JDBC および ODBC のオプション」を参照してください。
次の URL は、ユーザーの AccessKeyID および SecretAccessKey を指定します。
jdbc:redshift:iam://examplecluster:us-west-2/dev?AccessKeyID=AKIAIOSFODNN7EXAMPLE&SecretAccessKey=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
次の例では、IAM 認証情報を含む名前付きプロファイルを指定します。
jdbc:redshift:iam://examplecluster:us-west-2/dev?Profile=user2
-
JDBC ドライバーを使用して
GetClusterCredentials
API オペレーションを呼び出す JDBC オプションを追加します。GetClusterCredentials
API オペレーションをプログラムで呼び出す場合、これらのオプションは含めないでください。次の例では JDBC
GetClusterCredentials
オプションを含めています。jdbc:redshift:iam://examplecluster:us-west-2/dev?plugin_name=com.amazon.redshift.plugin.AzureCredentialsProvider&UID=user&PWD=password&idp_tenant=my_tenant&client_secret=my_secret&client_id=my_id
IAM 認証情報を使用するように ODBC 接続を設定するには
次の手順では、IAM 認証を設定するステップのみを示します。データベースユーザー名とパスワードを使用して標準認証を使用するステップについては、Amazon Redshift での ODBC ドライバーのバージョン 2.x による接続の設定を参照してください。
-
オペレーティングシステム用の最新の Amazon Redshift OBDC ドライバーをインストールおよび設定します。詳細については、Amazon Redshift での ODBC ドライバーのバージョン 2.x による接続の設定 ページを参照してください。
重要
Amazon Redshift ODBC ドライバーはバージョン 1.3.6.1000 以降である必要があります。
-
接続設定に関するオペレーティングシステムのステップに従います。
-
Microsoft Windows オペレーティングシステムでは、Amazon Redshift ODBC ドライバーの DSN 設定ウィンドウにアクセスします。
-
接続設定で以下の情報を入力します。
-
データソース名
-
サーバー (オプション)
-
ポート (オプション)
-
データベース
ユーザーまたはロールに
redshift:DescribeClusters
オペレーションを呼び出すアクセス許可がある場合は、データソース名とデータベースのみが必要です。Amazon Redshift は ClusterId と リージョン を使用して、DescribeCluster
オペレーションを呼び出すことでサーバーとポートを取得します。ユーザーまたはロールに
redshift:DescribeClusters
オペレーションを呼び出すアクセス許可がない場合は、サーバーとポートを指定します。 -
-
Authentication (認証)で、Auth Type (認証タイプ)の値を選択します。
認証タイプごとに、次のように値を入力します。
- AWS プロファイル
-
次の情報を入力します。
-
[ClusterID]
-
リージョン
-
プロファイル名
ODBC 接続オプションの値を含む AWS 設定ファイルのプロファイル名を入力します。詳細については、「設定プロファイルを使用する」を参照してください。
(任意)
GetClusterCredentials
API オペレーションの呼び出すために ODBC ドライバーが使用するオプションの詳細を指定します。-
[DbUser]
-
User AutoCreate
-
[DbGroups]
詳細については、「データベースユーザー認証情報を作成するための JDBC および ODBC のオプション」を参照してください。
-
- IAM 認証情報
-
次の情報を入力します。
-
[ClusterID]
-
リージョン
-
AccessKeyID と SecretAccessKey
IAM データベース認証用に設定された IAM ロールまたはユーザーのアクセスキー ID とシークレットアクセスキー。
-
[SessionToken]
SessionToken は、一時的認証情報を持つ IAM ロールに必要です。詳細については Temporary Security Credentialsを参照してください。
GetClusterCredentials
API オペレーションを呼び出すために ODBC ドライバーが使用するオプションの詳細を指定します。-
DbUser (必須)
-
User AutoCreate (オプション)
-
DbGroups (オプション)
詳細については、「データベースユーザー認証情報を作成するための JDBC および ODBC のオプション」を参照してください。
-
- アイデンティティプロバイダ : AD FS
-
AD FS を使用した Windows 統合認証の場合、ユーザー および パスワード は空白にしておきます。
IdP の詳細を指定します。
-
IdP Host
企業アイデンティティプロバイダホストの名前。この名前には、スラッシュ (/) を含めないでください。
-
IdP Port (任意)
アイデンティティプロバイダが使用するポート。デフォルトは 443です。
-
優先ロール
SAML アサーションの
AttributeValue
属性の複数の値を持つRole
要素からの IAM ロールの Amazon リソースネーム (ARN)。IdP 管理者と連携して、目的のロールに適した値を見つけます。詳細については、「ステップ 2: IdP の SAML アサーションを設定する」を参照してください。
(任意)
GetClusterCredentials
API オペレーションの呼び出すために ODBC ドライバーが使用するオプションの詳細を指定します。-
[DbUser]
-
User AutoCreate
-
[DbGroups]
詳細については、「データベースユーザー認証情報を作成するための JDBC および ODBC のオプション」を参照してください。
-
- ID プロバイダー : PingFederate
-
ユーザー と パスワードに、IdP のユーザー名とパスワードを入力します。
IdP の詳細を指定します。
-
IdP Host
企業アイデンティティプロバイダホストの名前。この名前には、スラッシュ (/) を含めないでください。
-
IdP Port (任意)
アイデンティティプロバイダが使用するポート。デフォルトは 443です。
-
優先ロール
SAML アサーションの
AttributeValue
属性の複数の値を持つRole
要素からの IAM ロールの Amazon リソースネーム (ARN)。IdP 管理者と連携して、目的のロールに適した値を見つけます。詳細については、「ステップ 2: IdP の SAML アサーションを設定する」を参照してください。
(任意)
GetClusterCredentials
API オペレーションの呼び出すために ODBC ドライバーが使用するオプションの詳細を指定します。-
[DbUser]
-
User AutoCreate
-
[DbGroups]
詳細については、「データベースユーザー認証情報を作成するための JDBC および ODBC のオプション」を参照してください。
-
- アイデンティティプロバイダー : Okta
-
ユーザー と パスワードに、IdP のユーザー名とパスワードを入力します。
IdP の詳細を指定します。
-
IdP Host
企業アイデンティティプロバイダホストの名前。この名前には、スラッシュ (/) を含めないでください。
-
IdP Port
この値は Okta では使用されません。
-
優先ロール
SAML アサーションの
AttributeValue
属性のRole
要素からの IAM ロールの Amazon リソースネーム (ARN)。IdP 管理者と連携して、目的のロールに適した値を見つけます。詳細については、「ステップ 2: IdP の SAML アサーションを設定する」を参照してください。 -
Okta App ID
Okta アプリケーションの ID。アプリ ID の値は、Okta アプリケーションの埋め込みリンクの「amazon_aws」に続きます。IdP 管理者と連携して、この値を取得します。
(任意)
GetClusterCredentials
API オペレーションの呼び出すために ODBC ドライバーが使用するオプションの詳細を指定します。-
[DbUser]
-
User AutoCreate
-
[DbGroups]
詳細については、「データベースユーザー認証情報を作成するための JDBC および ODBC のオプション」を参照してください。
-
- アイデンティティプロバイダー : Azure AD
-
ユーザー と パスワードに、IdP のユーザー名とパスワードを入力します。
クラスター ID と リージョンにクラスター ID と Amazon Redshift クラスターの AWS リージョンを入力します。
データベースに、Amazon Redshift クラスター用に作成したデータベースを入力します。
IdP の詳細を指定します。
-
IdP Tenant
Azure AD に使用されるテナント。
-
Azure Client Secret
Azure の Amazon Redshift エンタープライズアプリのクライアントシークレット。
-
Azure Client ID
Azure の Amazon Redshift エンタープライズアプリケーションのクライアント ID (アプリケーション ID)。
(任意)
GetClusterCredentials
API オペレーションの呼び出すために ODBC ドライバーが使用するオプションの詳細を指定します。-
[DbUser]
-
User AutoCreate
-
[DbGroups]
詳細については、「データベースユーザー認証情報を作成するための JDBC および ODBC のオプション」を参照してください。
-
-