

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

# 允许 OpsWorks Stacks 代表你行事
<a name="opsworks-security-servicerole"></a>

**重要**  
该 AWS OpsWorks Stacks 服务于 2024 年 5 月 26 日终止，新客户和现有客户均已禁用。我们强烈建议客户尽快将其工作负载迁移到其他解决方案。如果您对迁移有疑问，请通过 re [AWS : Post 或通过 Pre](https://repost.aws/) mium Su [AWS pp](https://aws.amazon.com/support) ort 与 AWS 支持 团队联系。

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

![\[添加堆栈 页中的“IAM 角色)”列表。\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/images/add-stack-iamrole.png)


当您指定一个新堆栈的服务角色时，可以执行下列操作之一：
+ 指定您之前创建的标准服务角色。

  您通常可在创建第一个堆栈时创建一个标准服务角色，然后将该角色用于所有后续堆栈。
+ 指定您使用 IAM; 控制台或 API 创建的自定义服务角色。

  如果您想向 OpsWorks Stacks授予比标准服务角色更多的有限权限，则此方法非常有用。

**注意**  
要创建您的第一个堆栈，您必须拥有 IAM **AdministratorAccess**策略模板中定义的权限。这些权限允许 OpsWorks Stacks 创建新的 IAM 服务角色并允许您导入用户，[如前文所述](opsworks-security-users-manage-import.md)。对于所有后续堆栈，用户可选择为第一个堆栈创建的服务角色；这些用户无需完整的管理权限便可创建堆栈。

标准服务角色授予下列权限：
+ 执行所有亚马逊 EC2 操作 (`ec2:*`)。
+ 获取 CloudWatch 统计数据 (`cloudwatch:GetMetricStatistics`)。
+ 使用 Elastic Load Balancing 将流量分配到服务器（`elasticloadbalancing:*`）。
+ 使用 Amazon RDS 实例作为数据库服务器 (`rds:*`)。
+ 使用 IAM 角色 (`iam:PassRole`) 在 OpsWorks 堆栈和您的 Amazon EC2 实例之间提供安全通信。

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

------
#### [ 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"
                }
            }
        }
    ]
}
```

------

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

------
#### [ JSON ]

****  

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

------

服务角色必须具有这种信任关系， OpsWorks Stacks 才能代表您行事。如果您使用默认服务角色，请勿修改信任关系。如果您正在创建自定义服务角色，请通过执行以下之一指定信任关系：
+ 如果您在 [IAM 控制台](https://console.aws.amazon.com/iam/home#roles)中使用**创建角色**向导，请在**选择用例中**选择 **Opsworks**。此角色具有相应的信任关系，但未隐含附加任何策略。要授予 OpsWorks Stacks 代表您执行操作的权限，请创建包含以下内容的客户管理型策略，并将其附加到新角色。

------
#### [ JSON ]

****  

  ```
  {
    "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"
          }
        }
      }
    ]
  }
  ```

------
+ 如果您使用的是 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": {
                ...
              } ]
          }
        },
     }
  }
  ```