AWS SDK/CLI 访问错误,AWS Redshift create-cluster 的 EC2 实例凭证

Posted

技术标签:

【中文标题】AWS SDK/CLI 访问错误,AWS Redshift create-cluster 的 EC2 实例凭证【英文标题】:AWS SDK/CLI access error with EC2 Instance credentials for aws redshift create-cluster 【发布时间】:2017-10-06 01:23:47 【问题描述】:

我有一个与我的 EC2 实例相关联的 IAM 角色,该角色具有以下关于 Redshift 的政策:


    "Version": "2012-10-17",
    "Statement": [
        
            "Action": [
                "redshift:*"
            ],
            "Resource": "*",
            "Effect": "Allow"
        
    ]

但是,我无法通过 AWS 开发工具包或 CLI 从我的 EC2 实例创建集群。

两者

InstanceProfileCredentialsProvider creds = new InstanceProfileCredentialsProvider(false);
AmazonRedshift redshift = AmazonRedshiftClientBuilder.standard().withCredentials(creds).build();

CreateClusterRequest request = new CreateClusterRequest();
request.setAllowVersionUpgrade(true);
request.setClusterType("multi-node");
request.setClusterIdentifier("identifier");
request.setDBName("dbname");
request.setIamRoles(Collections.singleton("iam_role_arn")));
request.setPubliclyAccessible(true);
request.setNodeType("dc1.8xlarge");
request.setNumberOfNodes(2);
request.setPort(8192);
request.setMasterUsername("username");
request.setMasterUserPassword("Password1");
Cluster cluster = redshift.createCluster(request);

aws redshift create-cluster --cluster-identifier identifier --master-username username --master-user-password Password1 --node-type dc1.8xlarge --region us-west-2 --number-of-nodes 2

结果:

An error occurred (UnauthorizedOperation) when calling the CreateCluster operation: Access Denied. Please ensure that your IAM Permissions allow this operation.

使用 IAM 策略模拟工具,我能够确认我的实例角色具有创建 Redshift 集群的权限。

任何理解这一点的帮助将不胜感激。

【问题讨论】:

查看是否可以拨打aws redshift describe-clusters。如果这也给出了错误,那么您没有使用与上述策略关联的凭据。如果上述策略与 IAM 角色相关联并且该角色与 EC2 实例相关联,并且您在 EC2 实例上运行该命令但它失败了,那么您可能在 EC2 实例上存储了替代凭证(例如在 @987654327 @)。 我可以调用 describe-clusters 以及与角色的其他策略相关联的各种其他命令。我将检查替代凭据 可能是您无权将 PassRole 授予 Redshift,但这并不能解释您未传递角色的命令行失败。 您的 CLI 命令对我有用,所以这不是语法问题,也不是缺少任何参数。 是的,这是一个 IAM 设置。请参阅:Granting a User Permissions to Pass a Role to an AWS Service 您可以通过角色启动 Redshift 来测试该理论,看看它是否有效。 【参考方案1】:

如果您能够调用其他 Redshift 操作并且仅在 createCluster() 上失败,则错误可能是由传递给 Redshift 的 IAM 角色引起的。

你需要Grant a User Permissions to Pass a Role to an AWS Service。

背后的逻辑是这样的:

假设您无权访问 S3 存储桶 X 假设您的帐户中有一个角色确实有权访问存储桶 X 您可以使用该角色启动一个 Redshift 集群,然后使用它来访问存储桶 X 为了防止人们这样作弊,他们需要PassRole 权限,说明是否允许他们将角色传递给 Redshift,甚至允许他们传递哪些角色。

这同样适用于将角色传递给 Amazon EC2 实例。

【讨论】:

以上是关于AWS SDK/CLI 访问错误,AWS Redshift create-cluster 的 EC2 实例凭证的主要内容,如果未能解决你的问题,请参考以下文章

尝试从 AWS Lambda 但不是桌面访问 AWS Device Farm 时出现 SSL 证书错误

AWS:使用从 s3 到 redshift 的复制命令时没有插入任何内容

AWS Lambda - 访问被拒绝错误 - GetObject

aws-sdk bucket.getObject:没有“访问控制允许来源”错误

aws 部署错误 ebcli.objects.exceptions.NotAuthorizedError:操作被拒绝。拒绝访问

消息:尝试访问 aws gateway api 时出现“内部服务器错误”