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:操作被拒绝。拒绝访问