【发布时间】: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 来测试该理论,看看它是否有效。
标签: amazon-web-services amazon-ec2 amazon-redshift aws-sdk amazon-iam