😵‍💫

【AWS】Amazon Redshift と IAM Identity Center の連携を試してみたかった

2024/08/07に公開

以下の機能 Amazon Redshift と IAM Identity Center(IdC) の連携を試してみます。

https://aws.amazon.com/jp/about-aws/whats-new/2023/11/aws-analytics-users-data-access-iam-identity-center/

ドキュメントはこちら。

https://docs.aws.amazon.com/ja_jp/redshift/latest/mgmt/redshift-iam-access-control-idp-connect.html#redshift-iam-access-control-idp-connect-console

Redshift の画面から「Create application」

Redshift と IdC は同じリージョンであることが必要

使用する IAM ロールを選択します。この IAM ロールは、Redshift に使用されるその他のロールとは別に作成する必要があります。これ以外の目的には使用しないことをお勧めします。特定のポリシーに必要となるアクセス許可は次のとおりです。

  • sso:DescribeApplication – カタログに ID プロバイダー (IdP) エントリを作成するために必要です。
  • sso:DescribeInstance – IdP フェデレーションロールまたはユーザーを手動で作成する場合に使用します。

以下信頼ポリシーで上記ポリシーを保有する IAM Role を作成

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": [
                    "redshift-serverless.amazonaws.com",
                    "redshift.amazonaws.com"
                ]
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

ユーザーもしくはグループを追加する。

An administrator can enable IAM Identity Center for Amazon Redshift or Amazon Redshift Serverless on the console. If you have clusters or workgroups that were created already, and you want to manage access to them with IAM Identity Center, there are SQL commands available to enable set up the connection. It can't be configured on the console.
SQL コマンド。

既存の Redshift Serverless については IAM IdC 統合の設定をマネジメントコンソールからは変更できないので、SQL 発行する必要がある。
以下ブログを参考に SQL 発行。

https://aws.amazon.com/jp/blogs/big-data/integrate-identity-provider-idp-with-amazon-redshift-query-editor-v2-and-sql-client-using-aws-iam-identity-center-for-seamless-single-sign-on/

CREATE IDENTITY PROVIDER "RedshiftQueryEditor" TYPE AWSIDC
NAMESPACE 'AWSIDC'
APPLICATION_ARN 'arn:aws:sso::xxxx:application/ssoins-xxx/apl-xxx'
IAM_ROLE 'arn:aws:iam::xxxx:role/IAMRoleForRedshiftSSO
';

ERROR: exception name : UnauthorizedException, error type : 135, message: The requested role arn:aws:iam::xxxx:role/IAMRoleForRedshiftSSO is not associated to cluster, should retry : 0 Detail: ----------------------------------------------- error: exception name : UnauthorizedException, error type : 135, message: The requested role arn:aws:iam::xxxx:role/IAMRoleForRedshiftSSO is not associated to cluster, should retry : 0 code: 30000 context: query: -1[child_sequence:1] location: xen_aws_credentials_mgr.cpp:630 process: padbmaster [pid=1073750292] ----------------------------------------------- [ErrorId: 1-66b30165-0c225cc652f557cb37276c15]

クラスタに紐付けてないよとエラーが出たので、Redshift Serverless の名前空間 → 「セキュリティと暗号化」から IAM ロールを関連付けたら成功。

IdC 側でグループを作成し、そのグループ用の Database ロールを作成する。

create role "AWSIDC:RedshiftQueryEditor";
grant select on all tables in schema public to role "AWSIDC:RedshiftQueryEditor";

IdC 側で許可セット作成し、リレー状態に https://<region>.console.aws.amazon.com/sqlworkbench/home を設定する。
(Admin でやってますが、実運用時は権限絞りましょう)

IdC 側で AWS アカウントにグループを割り当て、上記許可セットでログインする。

IdC 側のユーザのプライマリメールアドレスは設定済かつ検証済にも関わらずこのエラーが発生してしまう。。CloudTrail 見ても同じ内容で追跡できず。。

{
    "result": false,
    "error": "FATAL: Primary email is not configured for AWS IdC user.; [SQL State=28000] [ErrorId: 1-66b311e1-2eb470965dc2414518666ac9]",
    "message": "FATAL: Primary email is not configured for AWS IdC user.; [SQL State=28000] [ErrorId: 1-66b311e1-2eb470965dc2414518666ac9]",
    "code": "AccessDeniedException"
}

これが有効にしているのにずっと無効のままが原因なのかもしれない・・・

Discussion