步骤 2:为创建服务角色 CodeDeploy - AWS CodeDeploy

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

步骤 2:为创建服务角色 CodeDeploy

在中 AWS,服务角色用于向 AWS 服务授予权限,使其可以访问 AWS 资源。附加到服务角色的策略将确定服务可访问的 资源以及可使用这些资源执行的操作。

您为其创建的服务角色 CodeDeploy 必须被授予计算平台所需的权限。如果您部署到多个计算平台,请为每个平台创建一个服务角色。要添加权限,请附加以下一个或多个 AWS 提供的策略:

对于 EC2/本地部署,请附加 AWSCodeDeployRole 策略。该策略为您的服务角色提供以下权限:

  • 阅读实例上的标签,或通过 Amazon EC2 Auto Scaling 组名称识别 Amazon EC2 实例。

  • 读取、创建、更新和删除 Amazon EC2 Auto Scaling 组、生命周期挂钩和扩展策略。

  • 将信息发布到 Amazon SNS 主题。

  • 检索有关 CloudWatch 警报的信息。

  • 阅读并更新 Elastic Load Balancing。

    注意

    如果您使用启动模板创建 Auto Scaling 组,则必须添加以下权限:

    • ec2:RunInstances

    • ec2:CreateTags

    • iam:PassRole

    有关更多信息,请参阅《Amazon EC2 Auto Scaling 用户指南》中的 步骤 2:创建服务角色、为 Auto Scaling 组创建启动模板启动模板支持

对于 Amazon ECS 部署,如果您想要针对支持服务的完全访问权限,请附加 AWSCodeDeployRoleForECS 策略。该策略为您的服务角色提供以下权限:

  • 读取、更新和删除 Amazon ECS 任务集。

  • 更新 Elastic Load Balancing 目标组、侦听器和规则。

  • 调用 AWS Lambda 函数。

  • 访问 Amazon S3 存储桶中的修订文件。

  • 检索有关 CloudWatch 警报的信息。

  • 将信息发布到 Amazon SNS 主题。

对于 Amazon ECS 部署,如果您想要针对支持服务的有限访问权限,请附加 AWSCodeDeployRoleForECSLimited 策略。该策略为您的服务角色提供以下权限:

  • 读取、更新和删除 Amazon ECS 任务集。

  • 检索有关 CloudWatch 警报的信息。

  • 将信息发布到 Amazon SNS 主题。

对于 AWS Lambda 部署,如果您想允许发布到 Amazon SNS,请附上该政策。AWSCodeDeployRoleForLambda该策略为您的服务角色提供以下权限:

  • 读取、更新和调用 AWS Lambda 函数和别名。

  • 访问 Amazon S3 存储桶中的修订文件。

  • 检索有关 CloudWatch 警报的信息。

  • 将信息发布到 Amazon SNS 主题。

对于 AWS Lambda 部署,如果您想限制对 Amazon SNS 的访问,请附上该政策。AWSCodeDeployRoleForLambdaLimited该策略为您的服务角色提供以下权限:

  • 读取、更新和调用 AWS Lambda 函数和别名。

  • 访问 Amazon S3 存储桶中的修订文件。

  • 检索有关 CloudWatch 警报的信息。

在设置服务角色过程中,您还可以更新其信任关系,指定您希望向其授予访问权限的终端节点。

您可以使用 IAM 控制台 AWS CLI、或 IAM API 创建服务角色。

创建服务角色(控制台)

  1. 登录 AWS Management Console 并打开 IAM 控制台,网址为 https://console.aws.amazon.com/iam/

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

  3. 选择AWS 服务,然后在用例下的下拉列表中选择CodeDeploy

  4. 选择您的使用案例:

    • 对于 EC2/本地部署,请选择。CodeDeploy

    • 对于 AWS Lambda 部署,请选择 CodeDeploy Lambda

    • 对于 Amazon ECS 部署,请选择 CodeDeploy -ECS

  5. 选择下一步

  6. 添加权限页面上,将显示该使用案例的正确权限策略。选择下一步

  7. 命名、查看和创建页面上的角色名称中,输入服务角色的名称(例如,CodeDeployServiceRole),然后选择创建角色

    您还可以在角色描述中输入此服务角色的描述。

  8. 如果您希望此服务角色有权访问所有当前支持的终端节点,则您已完成了此过程。

    要限制此服务角色访问某些端点,请继续执行此过程中的其余步骤。

  9. 在角色列表中搜索并选择您刚刚创建的角色(CodeDeployServiceRole)。

  10. 选择 Trust relationships(信任关系)选项卡。

  11. 选择编辑信任策略

    您应该看到以下策略,该策略向服务角色提供访问所有支持的终端节点的权限:

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

    要仅授予服务角色访问支持的某些终端节点的权限,请使用以下策略替换信任策略文本框中的内容。删除您希望阻止访问的终端节点的行,然后选择更新策略

    { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": [ "codedeploy.us-east-1.amazonaws.com", "codedeploy.us-east-2.amazonaws.com", "codedeploy.us-west-1.amazonaws.com", "codedeploy.us-west-2.amazonaws.com", "codedeploy.ca-central-1.amazonaws.com", "codedeploy.ap-east-1.amazonaws.com", "codedeploy.ap-northeast-1.amazonaws.com", "codedeploy.ap-northeast-2.amazonaws.com", "codedeploy.ap-northeast-3.amazonaws.com", "codedeploy.ap-southeast-1.amazonaws.com", "codedeploy.ap-southeast-2.amazonaws.com", "codedeploy.ap-southeast-3.amazonaws.com", "codedeploy.ap-southeast-4.amazonaws.com", "codedeploy.ap-south-1.amazonaws.com", "codedeploy.ap-south-2.amazonaws.com", "codedeploy.ca-central-1.amazonaws.com", "codedeploy.eu-west-1.amazonaws.com", "codedeploy.eu-west-2.amazonaws.com", "codedeploy.eu-west-3.amazonaws.com", "codedeploy.eu-central-1.amazonaws.com", "codedeploy.eu-central-2.amazonaws.com", "codedeploy.eu-north-1.amazonaws.com", "codedeploy.eu-south-1.amazonaws.com", "codedeploy.eu-south-2.amazonaws.com", "codedeploy.il-central-1.amazonaws.com", "codedeploy.me-central-1.amazonaws.com", "codedeploy.me-south-1.amazonaws.com", "codedeploy.sa-east-1.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }

有关创建服务角色的更多信息,请参阅 IAM 用户指南中的创建角色以向 AWS 服务委派权限

创建服务角色(CLI)

  1. 例如,在您的开发计算机上,创建一个名为 CodeDeployDemo-Trust.json 的文本文件。此文件用于 CodeDeploy 允许代表您工作。

    请执行以下操作之一:

    • 要授予对所有支持的 AWS 区域的访问权限,请将以下内容保存在文件中:

      { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": [ "codedeploy.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
    • 要仅授予对部分受支持区域的访问权限,请在文件中键入以下内容,然后删除不授予访问权限的区域的行:

      { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": [ "codedeploy.us-east-1.amazonaws.com", "codedeploy.us-east-2.amazonaws.com", "codedeploy.us-west-1.amazonaws.com", "codedeploy.us-west-2.amazonaws.com", "codedeploy.ca-central-1.amazonaws.com", "codedeploy.ap-east-1.amazonaws.com", "codedeploy.ap-northeast-1.amazonaws.com", "codedeploy.ap-northeast-2.amazonaws.com", "codedeploy.ap-northeast-3.amazonaws.com", "codedeploy.ap-southeast-1.amazonaws.com", "codedeploy.ap-southeast-2.amazonaws.com", "codedeploy.ap-southeast-3.amazonaws.com", "codedeploy.ap-southeast-4.amazonaws.com", "codedeploy.ap-south-1.amazonaws.com", "codedeploy.ap-south-2.amazonaws.com", "codedeploy.ca-central-1.amazonaws.com", "codedeploy.eu-west-1.amazonaws.com", "codedeploy.eu-west-2.amazonaws.com", "codedeploy.eu-west-3.amazonaws.com", "codedeploy.eu-central-1.amazonaws.com", "codedeploy.eu-central-2.amazonaws.com", "codedeploy.eu-north-1.amazonaws.com", "codedeploy.eu-south-1.amazonaws.com", "codedeploy.eu-south-2.amazonaws.com", "codedeploy.il-central-1.amazonaws.com", "codedeploy.me-central-1.amazonaws.com", "codedeploy.me-south-1.amazonaws.com", "codedeploy.sa-east-1.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
      注意

      请不要在列表中的最后一个终端节点后使用逗号。

  2. 从相同的目录调用 create-role 命令,根据刚刚创建的文本文件中的信息创建名为 CodeDeployServiceRole 的服务角色:

    aws iam create-role --role-name CodeDeployServiceRole --assume-role-policy-document file://CodeDeployDemo-Trust.json
    重要

    务必在文件名前包含 file://。此命令中需要该项。

    在命令输出中,记录 Arn 对象下方 Role 条目的值。稍后创建部署组时将需要它。如果您忘记了值,请按照获取服务角色 ARN(CLI) 中的说明操作。

  3. 您使用的托管策略取决于计算平台。

    • 如果您要部署到 EC2/本地计算平台,请:

      调用 attach-role-policy 命令以根据名为 AWSCodeDeployRole 的 IAM 托管策略向名为 CodeDeployServiceRole 的服务角色授予权限。例如:

      aws iam attach-role-policy --role-name CodeDeployServiceRole --policy-arn arn:aws:iam::aws:policy/service-role/AWSCodeDeployRole
    • 如果您的部署是在 AWS Lambda 计算平台上:

      调用 attach-role-policy 命令以根据名为 AWSCodeDeployRoleForLambdaAWSCodeDeployRoleForLambdaLimited 的 IAM 托管策略向名为 CodeDeployServiceRole 的服务角色授予权限。例如:

      aws iam attach-role-policy --role-name CodeDeployServiceRole --policy-arn arn:aws:iam::aws:policy/service-role/AWSCodeDeployRoleForLambda
    • 如果您要部署到 Amazon ECS 计算平台,请:

      调用 attach-role-policy 命令以根据名为 AWSCodeDeployRoleForECSAWSCodeDeployRoleForECSLimited 的 IAM 托管策略向名为 CodeDeployServiceRole 的服务角色授予权限。例如:

      aws iam attach-role-policy --role-name CodeDeployServiceRole --policy-arn arn:aws:iam::aws:policy/AWSCodeDeployRoleForECS

有关创建服务角色的更多信息,请参阅 IAM 用户指南中的为 AWS 服务创建角色

获取服务角色 ARN(控制台)

要使用 IAM 控制台获取服务角色的 ARN,请执行以下操作:

  1. 登录 AWS Management Console 并打开 IAM 控制台,网址为 https://console.aws.amazon.com/iam/

  2. 在导航窗格中,选择角色

  3. 筛选条件框中,键入 CodeDeployServiceRole,然后按 Enter。

  4. 选择CodeDeployServiceRole

  5. 记下 Role ARN(角色 ARN)字段的值。

获取服务角色 ARN(CLI)

要使用获取服务角色的 ARN,请对名为的服务角色调用get-role命令: AWS CLI CodeDeployServiceRole

aws iam get-role --role-name CodeDeployServiceRole --query "Role.Arn" --output text

返回值是服务角色的 ARN。