NSA*_*NSA 5 amazon-web-services emr amazon-iam
我正在尝试从 AWS 控制台启动 AWS EMR 集群,但收到以下错误:
Failed to provision ec2 instances because 'IAM Instance Profile "arn:aws:iam::553706642095:instance-profile/EMR_EC2_DefaultRole" has no associated IAM Roles
Run Code Online (Sandbox Code Playgroud)
任何人都知道这是什么意思以及如何解决它?
以下是角色策略:
{
  "Statement": [
    {
      "Action": [
        "cloudwatch:*",
        "dynamodb:*",
        "ec2:Describe*",
        "elasticmapreduce:Describe*",
        "rds:Describe*",
        "s3:*",
        "sdb:*",
        "sns:*",
        "sqs:*"
      ],
      "Effect": "Allow",
      "Resource": "*"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)
其信托政策文件为:
{
  "Version": "2008-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "ec2.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)
    我终于解决了这个问题。这令人困惑,因为默认情况下实例配置文件和角色使用相同的名称。完整步骤概述如下,但您可以跳过各个步骤。
创建默认角色(如果出错,请降级到 awscli 版本 1.10.30)
aws emr create-default-roles
如果尚不存在,则创建实例配置文件:
aws iam create-instance-profile --instance-profile-name EMR_EC2_DefaultRole
验证实例配置文件是否存在但没有任何角色:
aws iam get-instance-profile --instance-profile-name EMR_EC2_DefaultRole
使用以下命令添加角色:
aws iam add-role-to-instance-profile --instance-profile-name EMR_EC2_DefaultRole --role-name EMR_EC2_DefaultRole
您对 EMR 只有只读权限
"elasticmapreduce:描述*",
您需要授予对 Elastic MapReduce 的完全访问权限,以便可以启动集群/终止
一旦您授予此访问权限,角色策略将如下所示
“弹性映射减少:*”,