通过Azure AD Workbench Redshift验证的IAM角色

时间:2020-03-20 14:25:01

标签: azure azure-active-directory amazon-redshift amazon-iam sql-workbench-j

我一直在尝试通过IAM从workbench / J进行身份验证以进行红移,并遵循以下各种链接: https://medium.com/tensult/aws-redshift-authentication-with-adfs-4ba423e2dc96 https://docs.amazonaws.cn/en_us/redshift/latest/mgmt/generating-user-credentials.html 我仍然无法连接。

我的工作台看起来像:

Driver : com.amazon.redshift.jdbc.Driver
url : jdbc:redshift:iam://<cluster-name>:<region>/<db>
username : org email id
password : org email id password

extended properties :
DbUser  employeeid
idp_port    443
AutoCreate  true
plugin_name com.amazon.redshift.plugin.AzureCredentialsProvider
idp_host    domain-id
preferred_role arn-of-IAM-Role

IAM角色已附加以下策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "redshift:DescribeClusters",
                "iam:ListRoles"
            ],
            "Resource": "*"
        },
        {
            "Sid": "GetClusterCredsStatement",
            "Effect": "Allow",
            "Action": [
                "redshift:GetClusterCredentials"
            ],
            "Resource": [
                "arn:aws:redshift:*:*:dbname:<cluster>/<db>",
                "arn:aws:redshift:*:*:dbuser:<cluster>/${Redshift:DbUser}",
                "arn:aws:redshift:*:*:dbgroup:<cluster>/<dbgroup>"
            ]
        },
        {
            "Sid": "CreateClusterUserStatement",
            "Effect": "Allow",
            "Action": [
                "redshift:CreateClusterUser"
            ],
            "Resource": [
                "arn:aws:redshift:*:*:dbname:<cluster>/<db>",
                "arn:aws:redshift:*:*:dbuser:<cluster>/${Redshift:DbUser}"
            ]
        },
        {
            "Sid": "RedshiftJoinGroupStatement",
            "Effect": "Allow",
            "Action": [
                "redshift:JoinGroup"
            ],
            "Resource": [
                "arn:aws:redshift:*:*:dbgroup:<cluster>/<dbgroup>"
            ]
        }
    ]
}

以下索赔规则也已添加:

DbUser : user.employeeid
DbGroups : user.assignedroles
Role : the IAM role with policy attached above
RoleSessionName : user.userprincipalname

我可以提供更多详细信息,但我一直只是按照这些链接的说明进行操作,否则我将与redshift集群建立有效的连接。

编辑:

我跟踪了sqlworkbench日志以查找:Caused by: java.lang.NoClassDefFoundError: com/amazonaws/auth/profile/ProfilesConfigFile

编辑2:

我以以下方式启动sql工作台:

java -Dworkbench.log.level=DEBUG -jar sqlworkbench.jar

并查看tail -f $Home/.sqlworkbench/workbench.log

发现我缺少一些jar,例如httpclient,httpcore,aws-sdk-java等。

现在停留在idp_tenant required parameter missing

编辑2: 我现在已经进步到了:

[JDBC Driver]SAML error: invalid_grant: AADSTS50126: Error validating credentials due to invalid username or password. Trace ID: 1c67cec4-bc2e-4140-bdc5-84e72ae50300 Correlation ID: 14be34b2-b9e2-49e5-8415-a388a8839c91 Timestamp: 2020-03-31 06:20:55Z 

我什至可以反编译Redshift Jar来查看AzureCredentialsProvider插件的源代码-在Azure AD End,这确实是错误的。我的用户名/密码凭据正确无误。

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,这是因为插件扩展所需的AWS开发工具包未与驱动程序jar捆绑在一起。

有2种解决方案:

  1. 在配置的Java路径上使AWS开发工具包可用
  2. 下载并使用与AWS开发工具包捆绑在一起的redshift驱动程序

为简单起见,我选择了第二个选项。从AWS文档尚不清楚,但您似乎必须转到driver download documentation page,然后向下滚动至“在Java版AWS开发工具包中使用以前的JDBC驱动程序版本”部分,然后从该列表中选择最新的驱动程序。

作为进一步的解释,无论如何(无论为什么),驱动程序jar中都提供了AzureCredentialsProvider,但是所需的类是ProfilesConfigFile类(AWS IAM sdk的一部分)。

作为另一个说明,我正在使用DataGrip。