允许 AWS OpsWorks Stacks 代表您执行操作 - AWS OpsWorks

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

允许 AWS OpsWorks Stacks 代表您执行操作

AWS OpsWorks Stacks 需要代表您与各种 AWS 服务交互。例如,AWS OpsWorks Stacks 与 Amazon EC2 交互以创建实例,与 Amazon CloudWatch 交互以获取监控统计信息。当您创建堆栈时,指定一个为 AWS OpsWorks Stacks 授予适当权限的 IAM 角色(一般称为服务角色)。


            Add Stack (添加堆栈) 页中的 IAM 角色列表。

当您指定一个新堆栈的服务角色时,可以执行下列操作之一:

  • 让 AWS OpsWorks Stacks 创建一个新的具有一组标准权限的服务角色。

    该角色名为 aws-opsworks-service-role 或类似。

  • 指定您之前创建的标准服务角色。

    您通常可在创建第一个堆栈时创建一个标准服务角色,然后将该角色用于所有后续堆栈。

  • 指定您使用 IAM 控制台或 API 创建的自定义服务角色。

    如果您想要为 AWS OpsWorks Stacks 授予超出标准服务角色的有限权限,此方法很有用。

注意

要创建您的第一个堆栈,您必须拥有 IAM AdministratorAccess 策略模板中定义的权限。这些权限允许 AWS OpsWorks Stacks 创建新的 IAM 服务角色并允许您导入用户,如前文所述。对于所有后续堆栈,用户可选择为第一个堆栈创建的服务角色;这些用户无需完整的管理权限便可创建堆栈。

标准服务角色授予下列权限:

  • 执行所有 Amazon EC2 操作 (ec2:*).

  • 获得 CloudWatch 统计数据 (cloudwatch:GetMetricStatistics)。

  • 使用 Elastic Load Balancing 将流量分发到服务器 (elasticloadbalancing:*)。

  • 使用 Amazon RDS 实例作为数据库服务器 (rds:*)。

  • 使用 IAM 角色 (iam:PassRole) 在 AWS OpsWorks Stacks 和 Amazon EC2 实例之间提供安全通信。

如果您创建自定义服务角色,则必须确保它授予 AWS OpsWorks Stacks 管理您的堆栈所需的所有权限。以下 JSON 示例是标准服务角色的策略声明;自定义服务角色应在其策略声明中至少包含以下权限。

{ "Statement": [ { "Action": [ "ec2:*", "iam:PassRole", "cloudwatch:GetMetricStatistics", "cloudwatch:DescribeAlarms", "ecs:*", "elasticloadbalancing:*", "rds:*" ], "Effect": "Allow", "Resource": [ "*" ] } ] }

服务角色还具有信任关系。AWS OpsWorks Stacks 创建的服务角色具有以下信任关系。

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

服务角色必须具有此信任关系,AWS OpsWorks Stacks 才能代表您执行操作。如果您使用默认服务角色,请勿修改信任关系。如果您正在创建自定义服务角色,请指定信任关系,如下所示:

  • 如果您是在 IAM 控制台中使用 Create role (创建角色) 向导,请在此向导的第二页上的 AWS Service Roles (AWS 服务角色) 下指定 AWS Opsworks 角色类型。请注意,在向导中提示您默认添加的 AWSOpsWorksRole 策略具有适当的信任关系,并允许 AWS OpsWorks 代表您执行某些操作,但不允许您创建新资源,如实例、Elastic Load Balancing 负载均衡器或 Amazon ECS 集群。要向 AWS OpsWorks 授予代表您创建这些资源的权限,请将自定义策略附加到您的角色,以将以下允许的操作添加到 AWSOpsWorksRole 策略中可用的操作。

    "ec2:*", "ecs:*", "elasticloadbalancing:*", "rds:*"
  • 如果您使用的是 AWS CloudFormation 模板,可将以下类似的内容添加到您的模板的 Resources (资源) 部分。

    "Resources": { "OpsWorksServiceRole": { "Type": "AWS::IAM::Role", "Properties": { "AssumeRolePolicyDocument": { "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "opsworks.amazonaws.com" ] }, "Action": [ "sts:AssumeRole" ] } ] }, "Path": "/", "Policies": [ { "PolicyName": "opsworks-service", "PolicyDocument": { ... } ] } }, } }