允许 AWS OpsWorks Stacks 代表你行事 - AWS OpsWorks

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

允许 AWS OpsWorks Stacks 代表你行事

重要

该 AWS OpsWorks Stacks 服务于 2024 年 5 月 26 日终止,新客户和现有客户均已禁用。我们强烈建议客户尽快将其工作负载迁移到其他解决方案。如果您对迁移有疑问,请通过 re AWS : Post 或通过 Pre mium Su AWS pp ort 与 AWS Support 团队联系。

AWS OpsWorks Stacks 需要代表您与各种 AWS 服务进行交互。例如, AWS OpsWorks Stacks 与 Amazon EC2 交互以创建实例,与亚马逊交互 CloudWatch 以获取监控统计数据。创建堆栈时,您可以指定一个 IAM 角色(通常称为服务角色),该角色向 AWS OpsWorks Stacks 授予相应的权限。

添加堆栈 页中的“IAM 角色)”列表。

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

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

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

  • 指定您使用 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 堆栈和您的 Amazon EC2 实例之间提供安全的通信。

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

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "ec2:*", "iam:PassRole", "cloudwatch:GetMetricStatistics", "cloudwatch:DescribeAlarms", "ecs:*", "elasticloadbalancing:*", "rds:*" ], "Effect": "Allow", "Resource": [ "*" ], "Condition": { "StringEquals": { "iam:PassedToService": "ec2.amazonaws.com" } } } ] }

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

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

服务角色必须具有这种信任关系, AWS OpsWorks Stacks 才能代表您行事。如果您使用默认服务角色,请勿修改信任关系。如果您正在创建自定义服务角色,请通过执行以下之一指定信任关系:

  • 如果您在 IAM 控制台中使用创建角色向导,请在选择用例中选择 Opsworks。此角色具有相应的信任关系,但未隐含附加任何策略。要授予 AWS OpsWorks Stacks 代表您执行操作的权限,请创建包含以下内容的客户管理型策略,并将其附加到新角色。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cloudwatch:DescribeAlarms", "cloudwatch:GetMetricStatistics", "ec2:*", "ecs:*", "elasticloadbalancing:*", "iam:GetRolePolicy", "iam:ListInstanceProfiles", "iam:ListRoles", "iam:ListUsers", "rds:*" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": "*", "Condition": { "StringEquals": { "iam:PassedToService": "ec2.amazonaws.com" } } } ] }
  • 如果您使用的是 AWS CloudFormation 模板,则可以在模板的 “资源” 部分中添加类似以下内容的内容。

    "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": { ... } ] } }, } }