步骤 2:为 CodeDeploy 创建服务角色
在 Amazon 中,服务角色用于向 Amazon 服务授予权限,以便能访问 Amazon 资源。附加到服务角色的策略将确定服务可访问的 资源以及可使用这些资源执行的操作。
您为 CodeDeploy 创建的服务角色必须授予对您的计算平台所需的权限。如果您部署到多个计算平台,请为每个平台创建一个服务角色。要添加权限,请附加 Amazon 提供的以下一个或多个策略:
对于 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 目标组、侦听器和规则。
-
调用 Amazon Lambda 函数。
-
访问 Amazon S3 存储桶中的修订文件。
-
检索有关 CloudWatch 警报的信息。
-
将信息发布到 Amazon SNS 主题。
对于 Amazon ECS 部署,如果您想要针对支持服务的有限访问权限,请附加 AWSCodeDeployRoleForECSLimited 策略。该策略为您的服务角色提供以下权限:
-
读取、更新和删除 Amazon ECS 任务集。
-
检索有关 CloudWatch 警报的信息。
-
将信息发布到 Amazon SNS 主题。
对于 Amazon Lambda 部署,如果您想允许发布到 Amazon SNS,请附加 AWSCodeDeployRoleForLambda 策略。该策略为您的服务角色提供以下权限:
-
读取、更新和调用 Amazon Lambda 函数和别名。
-
访问 Amazon S3 存储桶中的修订文件。
-
检索有关 CloudWatch 警报的信息。
-
将信息发布到 Amazon SNS 主题。
对于 Amazon Lambda 部署,如果您想限制对 Amazon SNS 的访问,请附上 AWSCodeDeployRoleForLambdaLimited 策略。该策略为您的服务角色提供以下权限:
-
读取、更新和调用 Amazon Lambda 函数和别名。
-
访问 Amazon S3 存储桶中的修订文件。
-
检索有关 CloudWatch 警报的信息。
在设置服务角色过程中,您还可以更新其信任关系,指定您希望向其授予访问权限的终端节点。
您可以使用 IAM 控制台、Amazon CLI 或 IAM API 创建服务角色。
创建服务角色(控制台)
登录 Amazon Web Services 管理控制台,然后通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/
。 在导航窗格中,选择 Roles(角色),然后选择 Create role(创建角色)。
-
选择 Amazon 服务,然后在使用案例下的下拉列表中选择 CodeDeploy。
-
选择您的使用案例:
-
对于 EC2/本地部署,请选择 CodeDeploy。
-
对于 Amazon Lambda 部署,请选择适用于 Lambda 的 CodeDeploy。
-
对于 Amazon ECS 部署,请选择 CodeDeploy - ECS。
-
选择下一步。
-
在添加权限页面上,将显示该使用案例的正确权限策略。选择下一步。
-
在命名、查看和创建页面上的角色名称中,输入服务角色的名称(例如,
CodeDeployServiceRole),然后选择创建角色。您还可以在角色描述中输入此服务角色的描述。
-
如果您希望此服务角色有权访问所有当前支持的终端节点,则您已完成了此过程。
要限制此服务角色访问某些端点,请继续执行此过程中的其余步骤。
在角色列表中搜索并选择您刚刚创建的角色(
CodeDeployServiceRole)。-
选择 Trust relationships(信任关系)选项卡。
选择编辑信任策略。
您应该看到以下策略,该策略向服务角色提供访问所有支持的终端节点的权限:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": [ "codedeploy.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
有关创建服务角色的更多信息,请参阅《IAM 用户指南》中的创建向 Amazon 服务委派权限的角色。
创建服务角色(CLI)
-
例如,在您的开发计算机上,创建一个名为
CodeDeployDemo-Trust.json的文本文件。使用此文件可允许 CodeDeploy 代表您执行操作。在文件中保存以下内容:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": [ "codedeploy.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] } -
从相同的目录调用 create-role 命令,根据刚刚创建的文本文件中的信息创建名为
CodeDeployServiceRole的服务角色:aws iam create-role --role-name CodeDeployServiceRole --assume-role-policy-document file://CodeDeployDemo-Trust.json重要
务必在文件名前包含
file://。此命令中需要该项。在命令输出中,记录
Arn对象下方Role条目的值。稍后创建部署组时将需要它。如果您忘记了值,请按照获取服务角色 ARN(CLI) 中的说明操作。 -
调用 attach-role-policy 命令以根据名为
AWSCodeDeployRole的 IAM 托管策略向名为CodeDeployServiceRole的服务角色授予权限。例如:aws iam attach-role-policy --role-name CodeDeployServiceRole --policy-arn arn:aws:-cn:iam::aws:policy/service-role/AWSCodeDeployRole
有关创建服务角色的更多信息,请参阅《IAM 用户指南》中的为 Amazon 服务创建一个角色。
获取服务角色 ARN(控制台)
要使用 IAM 控制台获取服务角色的 ARN,请执行以下操作:
登录 Amazon Web Services 管理控制台,然后通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/
。 -
在导航窗格中,选择角色。
-
在筛选条件框中,键入
CodeDeployServiceRole,然后按 Enter。 -
选择 CodeDeployServiceRole。
-
记下 Role ARN(角色 ARN)字段的值。
获取服务角色 ARN(CLI)
要使用 Amazon CLI 获取服务角色的 ARN,请对名为 get-role 的服务角色调用 CodeDeployServiceRole 命令:
aws iam get-role --role-name CodeDeployServiceRole --query "Role.Arn" --output text
返回值是服务角色的 ARN。