本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
允许 AWS OpsWorks Stacks 代表你行事
重要
该 AWS OpsWorks Stacks 服务于 2024 年 5 月 26 日终止,新客户和现有客户均已禁用。我们强烈建议客户尽快将其工作负载迁移到其他解决方案。如果您对迁移有疑问,请通过 re AWS : Post 或通过 Pre
AWS OpsWorks Stacks 需要代表您与各种 AWS 服务进行交互。例如, AWS OpsWorks Stacks 与亚马逊交互 EC2 以创建实例,与亚马逊交互 CloudWatch 以获取监控统计数据。创建堆栈时,您可以指定一个 IAM 角色(通常称为服务角色),该角色向 AWS OpsWorks Stacks 授予相应的权限。

当您指定一个新堆栈的服务角色时,可以执行下列操作之一:
-
指定您之前创建的标准服务角色。
您通常可在创建第一个堆栈时创建一个标准服务角色,然后将该角色用于所有后续堆栈。
-
指定您使用 IAM; 控制台或 API 创建的自定义服务角色。
如果您想向 AWS OpsWorks Stacks授予比标准服务角色更多的有限权限,则此方法非常有用。
注意
要创建第一个堆栈,您必须拥有 IAM AdministratorAccess策略模板中定义的权限。这些权限允许 AWS OpsWorks Stacks 创建新的 IAM 服务角色并允许您导入用户,如前文所述。对于所有后续堆栈,用户可选择为第一个堆栈创建的服务角色;这些用户无需完整的管理权限便可创建堆栈。
标准服务角色授予下列权限:
-
执行所有亚马逊 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": { ... } ] } }, } }