

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

# 为在 EC2 实例上运行的应用程序指定权限
<a name="opsworks-security-appsrole"></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 支持 团队联系。

如果在您的堆栈的 Amazon EC2 实例上运行的应用程序需要访问其他 AWS 资源，例如 Amazon S3 存储桶，则它们必须具有相应的权限。要授予这些权限，您可使用实例配置文件。在[创建 Stac OpsWorks ks 堆栈时，您可以为每个实例指定实例](workingstacks-creating.md)配置文件。

![\[“Add Stack (添加堆栈)”页中的“Advanced (高级)”选项。\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/images/add-stack-instanceproflie.png)


您还可以通过[编辑层配置](workinglayers-basics-edit.md)来为层的实例指定配置文件。

实例配置文件指定一个 IAM 角色。在实例上运行的应用程序可担任该角色以访问 AWS 资源，具体取决于该角色的策略授予的权限。有关应用程序如何担任角色的更多信息，请参阅[使用 API 调用担任角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/roles-assume-role.html)。

您可以采用以下任一方式创建实例配置文件：
+ 使用 IAM; 控制台或 API 创建配置文件。

  有关更多信息，请参阅[角色（委托和联合）](https://docs.aws.amazon.com/IAM/latest/UserGuide/WorkingWithRoles.html)。
+ 使用 CloudFormation 模板创建个人资料。

  有关如何在模板中包含 IAM; 资源的一些示例，请参阅 [Identity and Access Management (IAM) 模板代码段](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/quickref-iam.html)。

一个实例配置文件必须具有一种信任关系和一个授予访问 AWS 资源的权限的附加策略。

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

****  

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

------

实例配置文件必须具有这种信任关系， OpsWorks Stacks 才能代表您采取行动。如果您使用默认服务角色，请勿修改信任关系。如果您正在创建自定义服务角色，请指定信任关系，如下所示：
+ 如果您在 [IAM 控制台](https://console.aws.amazon.com/iam/home#roles)中使用**创建角色**向导，请在向导第二页的 **AWS 服务角色**下指定 A **mazon EC2** 角色类型。
+ 如果您使用的是 CloudFormation 模板，则可以在模板的 “**资源**” 部分中添加类似以下内容的内容。

  ```
  "Resources": {
        "OpsWorksEC2Role": {
           "Type": "AWS::IAM::Role",
           "Properties": {
              "AssumeRolePolicyDocument": {
                 "Statement": [ {
                    "Effect": "Allow",
                    "Principal": {
                       "Service": [ "ec2.amazonaws.com" ]
                    },
                    "Action": [ "sts:AssumeRole" ]
                 } ]
              },
              "Path": "/"
           }
        },
        "RootInstanceProfile": {
           "Type": "AWS::IAM::InstanceProfile",
           "Properties": {
              "Path": "/",
              "Roles": [ {
                 "Ref": "OpsWorksEC2Role"
              }
           ]
        }
     }
  }
  ```

当您创建您的实例配置文件时，您可将适当的策略附加到该配置文件的角色。在创建堆栈后，您必须使用 [IAM; 控制台](https://console.aws.amazon.com/iam/)或 API 来将适当的策略附加到配置文件的角色。例如，以下策略授予对名为 amzn-s3-demo-bucket 的 Amazon S3 存储桶中所有对象的完全访问权限。将*region*和 amzn-s3-demo-bucket 替换为适合您的配置的值。

有关如何创建和使用实例配置文件的示例，请参阅[使用 Amazon S3 存储桶](https://docs.aws.amazon.com/opsworks/latest/userguide/gettingstarted.walkthrough.photoapp.html)。

如果您的应用程序使用实例配置文件从实例调用 OpsWorks Stacks API，则 EC2 除了对 OpsWorks Stacks 和其`iam:PassRole`他 AWS 服务执行相应操作外，策略还必须允许该操作。`iam:PassRole` 权限允许 OpsWorks Stacks 代表您担任该服务角色。有关 OpsWorks 堆栈 API 的更多信息，请参阅 [AWS OpsWorks API 参考](https://docs.aws.amazon.com/opsworks/latest/APIReference/Welcome.html)。

以下是 IAM 策略的示例，该策略允许您从 EC2 实例调用任何 OpsWorks Stacks 操作以及任何 Amazon EC2 或 Amazon S3 操作。

**注意**  
如果您不允许`iam:PassRole`，则任何调用 OpsWorks Stacks 操作的尝试都会失败，并出现如下错误：  

```
User: arn:aws:sts::123456789012:federated-user/Bob is not authorized
to perform: iam:PassRole on resource:
arn:aws:sts::123456789012:role/OpsWorksStackIamRole
```

有关在 EC2 实例上使用角色获取权限的更多信息，请参阅*AWS Identity and Access Management 用户指南*中的[授予在 Amazon EC2 实例上运行的应用程序访问 AWS 资源的](https://docs.aws.amazon.com/IAM/latest/UserGuide/role-usecase-ec2app.html)权限。