Amazon ECS CodeDeploy IAM 角色 - Amazon Elastic Container Service

Amazon ECS CodeDeploy IAM 角色

在将 CodeDeploy 蓝色/绿色部署类型用于 Amazon ECS 之前,CodeDeploy 服务需要获得代表您更新 Amazon ECS 服务的权限。这些权限是由 CodeDeploy IAM 角色 (ecsCodeDeployRole) 提供的。

注意

用户还需要使用 CodeDeploy 的权限;蓝/绿部署所需的 IAM 权限 中介绍了这些权限。

提供了两个托管策略。以下所示的 AWSCodeDeployRoleForECS 策略向 CodeDeploy 授予使用相关操作更新任何资源的权限。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "ecs:DescribeServices", "ecs:CreateTaskSet", "ecs:UpdateServicePrimaryTaskSet", "ecs:DeleteTaskSet", "elasticloadbalancing:DescribeTargetGroups", "elasticloadbalancing:DescribeListeners", "elasticloadbalancing:ModifyListener", "elasticloadbalancing:DescribeRules", "elasticloadbalancing:ModifyRule", "lambda:InvokeFunction", "cloudwatch:DescribeAlarms", "sns:Publish", "s3:GetObject", "s3:GetObjectVersion" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "iam:PassRole" ], "Effect": "Allow", "Resource": "*", "Condition": { "StringLike": { "iam:PassedToService": [ "ecs-tasks.amazonaws.com" ] } } } ] }

以下所示的 AWSCodeDeployRoleForECSLimited 策略向 CodeDeploy 授予更多有限权限。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "ecs:DescribeServices", "ecs:CreateTaskSet", "ecs:UpdateServicePrimaryTaskSet", "ecs:DeleteTaskSet", "cloudwatch:DescribeAlarms" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "sns:Publish" ], "Resource": "arn:aws:sns:*:*:CodeDeployTopic_*", "Effect": "Allow" }, { "Action": [ "elasticloadbalancing:DescribeTargetGroups", "elasticloadbalancing:DescribeListeners", "elasticloadbalancing:ModifyListener", "elasticloadbalancing:DescribeRules", "elasticloadbalancing:ModifyRule" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "lambda:InvokeFunction" ], "Resource": "arn:aws:lambda:*:*:function:CodeDeployHook_*", "Effect": "Allow" }, { "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": "*", "Condition": { "StringEquals": { "s3:ExistingObjectTag/UseWithCodeDeploy": "true" } }, "Effect": "Allow" }, { "Action": [ "iam:PassRole" ], "Effect": "Allow", "Resource": [ "arn:aws:iam::*:role/ecsTaskExecutionRole", "arn:aws:iam::*:role/ECSTaskExecution*" ], "Condition": { "StringLike": { "iam:PassedToService": [ "ecs-tasks.amazonaws.com" ] } } } ] }

创建 CodeDeploy AWSCodeDeployRoleForECS 角色

为 CodeDeploy 创建 IAM 角色
  1. 通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

  2. 在导航窗格中,选择 Roles(角色)和 Create role(创建角色)。

  3. Select type of trusted entity (选择受信任实体的类型) 部分中,选择 AWS 服务

  4. 对于选择将使用此角色的服务,选择 CodeDeploy

  5. 对于 Select your use case(选择您的使用案例),选择 CodeDeploy - ECSNext(下一步)。

  6. Attach permissions policy(附加权限策略)页面上,执行以下操作:

    1. 搜索 AWSCodeDeployRoleForECS,然后选择策略。

    2. Set permissions boundary - optional(设置权限边界 - 可选)下,选择 Create role without a permissions boundary(创建没有权限边界的角色)。

    3. 选择 Next(下一步)。

  7. Role details(角色详细信息)下,执行以下操作:

    1. 对于角色名称,输入 ecsCodeDeployRole,然后输入可选描述。

    2. 对于添加标签(可选),输入要与策略关联的任何自定义标签。

  8. 选择 Create role(创建角色)。

将所需权限添加到 Amazon ECS CodeDeploy IAM 角色
  1. 通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

  2. 在角色列表中搜索 ecsCodeDeployRole。如果该角色不存在,请使用上述过程创建该角色。如果角色存在,请选择角色以查看附加的策略。

  3. 权限策略部分中,验证 AWSCodeDeployRoleForECSAWSCodeDeployRoleForECSLimited 托管策略是否已附加到角色。如果附加该策略,则将正确配置 Amazon ECS CodeDeploy 服务角色。否则,请执行以下子步骤来附加策略。

    1. 依次选择 Add Permissions(添加权限)和 Attach policies(附加策略)。

    2. 要缩小要附加的可用策略的范围,请为筛选条件键入 AWSCodeDeployRoleForECSAWSCodeDeployRoleForECSLimited

    3. 选中 AWS 托管策略左侧的框,然后选择附加策略

  4. 选择 Trust Relationships(信任关系)。

  5. 验证信任关系是否包含以下策略。如果信任关系符合以下策略,请选择 Cancel。如果信任关系不匹配,请选择编辑信任策略,将该策略复制到策略文档窗口中,然后选择更新策略

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

为蓝/绿部署添加权限

如果使用蓝/绿部署类型的 Amazon ECS 服务中的任务需要使用任务执行角色或任务角色覆盖,则必须将每个任务执行角色或任务角色覆盖的 iam:PassRole 权限作为策略添加到 CodeDeploy IAM 角色。有关更多信息,请参阅 Amazon ECS 任务执行 IAM 角色任务 IAM 角色

使用以下过程创建策略

使用 JSON 策略编辑器创建策略
  1. 登录AWS Management Console,然后通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

  2. 在左侧的导航栏中,选择 Policies (策略)

    如果这是您首次选择 Policies,则会显示 Welcome to Managed Policies 页面。选择开始使用

  3. 在页面的顶部,选择 Create policy (创建策略)

  4. 请选择 JSON 选项卡。

  5. 输入以下 JSON 策略文档:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iam:PassRole", "Resource": [ "arn:aws:iam::<aws_account_id>:role/<ecsTaskExecutionRole_or_TaskRole_name>" ] } ] }
  6. 选择Review policy(查看策略)

    注意

    您可以随时在可视化编辑器JSON 选项卡之间切换。不过,如果您进行更改或在可视化编辑器选项卡中选择 Review policy (查看策略),IAM 可能会调整您的策略结构以针对可视化编辑器进行优化。有关更多信息,请参阅《IAM 用户指南》中的调整策略结构

  7. Review policy (查看策略) 页面上,为创建的策略输入 Name (名称)Description (说明)(可选)。查看策略摘要以查看您的策略授予的权限。然后,选择创建策略以保存您的工作。

创建策略后,将策略附加到 AWSCodeDeployRoleForECSAWSCodeDeployRoleForECSLimited 角色。有关如何将策略附加到角色的信息,请参阅《AWS Identity and Access Management 用户指南》中的修改角色权限策略