Amazon ECS CodeDeploy IAM 角色 - Amazon Elastic Container Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

Amazon ECS CodeDeploy IAM 角色

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

注意

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

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

AWSCodeDeployRoleForECS
{ "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
{ "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 角色

您可以使用以下过程为 Amazon ECS 创建 CodeDeploy 角色

Amazon Web Services Management Console
创建用于 CodeDeploy 的服务角色(IAM 控制台)
  1. 登录 Amazon Web Services Management Console,然后通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

  2. 在 IAM 控制台的导航窗格中,选择角色,然后选择创建角色

  3. 对于 Trusted entity type(可信实体类型),选择 Amazon Web Service

  4. 对于服务或使用案例,请选择 CodeDeploy,然后选择 CodeDeploy - ECS 使用案例。

  5. 选择下一步

  6. 附加权限策略部分中,确保选择了 AWSCodeDeployRoleForECS 策略。

  7. 选择下一步

  8. 对于在角色名称,输入 ecsCodeDeployRole

  9. 检查该角色,然后选择创建角色

Amazon CLI

将所有用户输入替换为您自己的信息。

  1. 创建一个名为 codedeploy-trust-policy.json 的文件,其中包含要用于 CodeDeploy IAM 角色的信任策略。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": ["codedeploy.amazonaws.com"] }, "Action": "sts:AssumeRole" } ] }
  2. 使用上一步中创建的信任策略创建命名为 ecsCodedeployRole 的 IAM 角色。

    aws iam create-role \ --role-name ecsCodedeployRole \ --assume-role-policy-document file://codedeploy-trust-policy.json
  3. AWSCodeDeployRoleForECSAWSCodeDeployRoleForECSLimited 托管策略附加到 ecsTaskRole 角色。

    aws iam attach-role-policy \ --role-name ecsCodedeployRole \ --policy-arn arn:aws::iam::aws:policy/AWSCodeDeployRoleForECS
    aws iam attach-role-policy \ --role-name ecsCodedeployRole \ --policy-arn arn:aws::iam::aws:policy/AWSCodeDeployRoleForECSLimited

为蓝/绿部署添加权限

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

使用以下过程创建策略

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

  2. 在左侧的导航窗格中,选择策略

    如果这是您首次选择策略,则会显示欢迎访问托管式策略页面。选择开始使用

  3. 在页面的顶部,选择创建策略

  4. 策略编辑器部分,选择 JSON 选项。

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

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iam:PassRole", "Resource": ["arn:aws:iam::<aws_account_id>:role/<ecsCodeDeployRole>"] } ] }
  6. 选择下一步

    注意

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

  7. 查看并创建页面上,为您要创建的策略输入策略名称描述(可选)。查看此策略中定义的权限以查看策略授予的权限。

  8. 选择创建策略可保存新策略。

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

Amazon CLI

将所有用户输入替换为您自己的信息。

  1. 使用以下内容创建名为 blue-green-iam-passrole.json 的文件。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iam:PassRole", "Resource": ["arn:aws:iam::<aws_account_id>:role/<ecsCodeDeployRole>"] } ] }
  2. 使用以下命令通过 JSON 策略文档文件创建 IAM 策略。

    aws iam create-policy \ --policy-name cdTaskExecutionPolicy \ --policy-document file://blue-green-iam-passrole.json
  3. 使用以下命令检索您创建的 IAM 策略的 ARN。

    aws iam list-policies --scope Local --query 'Policies[?PolicyName==`cdTaskExecutionPolicy`].Arn'
  4. 使用以下命令将策略附加到 CodeDeploy IAM 角色。

    aws iam attach-role-policy \ --role-name ecsCodedeployRole \ --policy-arn arn:aws:iam:111122223333:aws:policy/cdTaskExecutionPolicy