AWS CodeDeploy:服务角色无法扮演提供的角色

7
我是一个有用的助手,可以为您翻译文本。

我正在尝试使用GitHub设置CodeDeploy,但遇到了一些问题。

如文档中所述,我创建了服务角色并使用了AWSCodeDeployRole策略。

在我的Code Deploy应用程序创建过程中,我遇到了一个问题:

Cannot assume role provided.

我发现,我的AWSCodeDeployRole角色拥有许多自动缩放权限,但这并不是我所期望的:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "autoscaling:CompleteLifecycleAction",
        "autoscaling:DeleteLifecycleHook",
        "autoscaling:DescribeAutoScalingGroups",
        "autoscaling:DescribeLifecycleHooks",
        "autoscaling:PutLifecycleHook",
        "autoscaling:RecordLifecycleActionHeartbeat",
        "autoscaling:CreateAutoScalingGroup",
        "autoscaling:UpdateAutoScalingGroup",
        "autoscaling:EnableMetricsCollection",
        "autoscaling:DescribeAutoScalingGroups",
        "autoscaling:DescribePolicies",
        "autoscaling:DescribeScheduledActions",
        "autoscaling:DescribeNotificationConfigurations",
        "autoscaling:DescribeLifecycleHooks",
        "autoscaling:SuspendProcesses",
        "autoscaling:ResumeProcesses",
        "autoscaling:AttachLoadBalancers",
        "autoscaling:PutScalingPolicy",
        "autoscaling:PutScheduledUpdateGroupAction",
        "autoscaling:PutNotificationConfiguration",
        "autoscaling:PutLifecycleHook",
        "autoscaling:DescribeScalingActivities",
        "autoscaling:DeleteAutoScalingGroup",
        "ec2:DescribeInstances",
        "ec2:DescribeInstanceStatus",
        "ec2:TerminateInstances",
        "tag:GetTags",
        "tag:GetResources",
        "sns:Publish",
        "cloudwatch:DescribeAlarms",
        "elasticloadbalancing:DescribeLoadBalancers",
        "elasticloadbalancing:DescribeInstanceHealth",
        "elasticloadbalancing:RegisterInstancesWithLoadBalancer",
        "elasticloadbalancing:DeregisterInstancesFromLoadBalancer"
      ],
      "Resource": "*"
    }
  ]
}

在进行一些谷歌搜索后,我发现CodeDeploy应用程序可能期望类似以下内容:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": [
          "codedeploy.amazonaws.com"
        ]
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

但是当我尝试手动创建此策略时,也会出现错误:

This policy contains the following error: Has prohibited field Principal For more information about the IAM policy grammar, see AWS IAM Policies.

那么,Code Deploy Application的预期服务角色是什么?顺便说一句,Code deploy正在我的EC2实例上运行。

1
我相信你把权限策略和信任关系策略混淆了。它们都是策略,语法类似,但目的不同:前者指定角色允许或拒绝的操作(例如自动缩放操作),后者指定哪些实体(原则)可以扮演该角色(例如codedeploy.amazonaws.com服务主体)。 - Michael - sqlbot
我的“服务角色”的信任关系看起来像这样:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } - smart
1
你是否发现了这个和你在谷歌搜索时找到的策略之间的相似性?codedeployec2 - Michael - sqlbot
@Michael-sqlbot,您可以发布您的建议,我会批准它。之前删除了我的回答。 - smart
谢谢。我会做的。 - Michael - sqlbot
3个回答

16
根据@Michael的评论,我在我的“服务角色”中的“信任关系策略”中找到了一些区别。
看起来默认的AWSCodeDeployRole不能正确处理Code Deploy的问题。
为了解决这个问题,我用"codedeploy.amazonaws.com"替换了"Service": ["ec2.amazonaws.com"]。
然后就可以正常工作了!

1
不错的发现,伙计,应该成为默认设置! - user25794

2

对于通过谷歌找到此篇文章的人 - 在我的云形成模板中,我格式化了ARN错误,并且错误没有描述:

角色需要按照以下方式指定:arn:aws:iam::1234567890:role/CodeDeployRole 注意 :role/ 而不是 :instance-profile/

错误与上述完全相同,无法扮演角色,尽管这是因为您指定错误。


我建议您不要共享私人数据,例如实例 ID 或账户 ID。 - KBeDev
这不是真的 - 1234567890 - B Fish

0
我在跟随教程时发现它没有提到您必须编辑服务角色的信任关系。直到我更改了以下内容,才避免了出现与教程中相同的错误。
我更改了:
        "Service": "codebuild.amazonaws.com"

"Service" : [
      "codedeploy.amazonaws.com",
      "codebuild.amazonaws.com"
    ]
   

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接