为在 EC2 实例上运行的应用程序指定权限 - AWS OpsWorks

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

为在 EC2 实例上运行的应用程序指定权限

如果在您的堆栈的 Amazon EC2 实例上运行的应用程序需要访问其他 AWS 资源,如 Amazon S3 存储桶,则它们必须具有适当的权限。要授予这些权限,您可使用实例配置文件。您可以在创建 AWS OpsWorks Stacks 堆栈时为每个实例指定实例配置文件。


            “Add Stack (添加堆栈)”页中的“Advanced (高级)”选项。

您还可以通过编辑层配置来为层的实例指定配置文件。

实例配置文件指定一个 IAM 角色。在实例上运行的应用程序可担任该角色以访问 AWS 资源,具体取决于该角色的策略授予的权限。有关应用程序如何担任角色的更多信息,请参阅使用 API 调用担任角色

您可以采用以下任一方式创建实例配置文件:

  • 让 AWS OpsWorks Stacks 在您创建堆栈时创建新的配置文件。

    该配置文件的命名类似于 aws-opsworks-ec2-role,并且该配置文件具有信任关系,但没有策略。

  • 使用 IAM 控制台或 API 创建配置文件。

    有关更多信息,请参阅角色(委托和联合)

  • 使用 AWS CloudFormation 模板创建配置文件。

    有关如何在模板中包含 IAM 资源的一些示例,请参阅 Identity and Access Management (IAM) 模板代码段

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

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

实例配置文件必须具有这种信任关系,以便 AWS OpsWorks Stacks 可代表您执行操作。如果您使用默认服务角色,请勿修改信任关系。如果您正在创建自定义服务角色,请指定信任关系,如下所示:

  • 如果您是在 IAM 控制台中使用 Create Role (创建角色) 向导,请在此向导的第二页上的 AWS Service Roles (AWS 服务角色) 下指定 Amazon EC2 角色类型。

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

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

如果创建您自己的实例配置文件,则此时可将适当的策略附加到该配置文件的角色。如果您让 AWS OpsWorks Stacks 在您创建堆栈时为您创建实例配置文件,则它没有附加策略且未授予任何权限。在创建堆栈后,您必须使用 IAM 控制台或 API 来将适当的策略附加到配置文件的角色。例如,以下策略授予对任何 Amazon S3 存储桶的完全访问权限。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:*", "Resource": "*" } ] }

有关如何创建和使用实例配置文件的示例,请参阅使用 Amazon S3 存储桶

如果您的应用程序使用实例配置文件来从 EC2 实例调用 AWS OpsWorks Stacks API,则该策略必须允许 iam:PassRole 操作以及针对 AWS OpsWorks Stacks 和其他 AWS 服务的相应操作。iam:PassRole 权限允许 AWS OpsWorks Stacks 代表您担任该服务角色。有关 AWS OpsWorks Stacks API 的更多信息,请参阅 AWS OpsWorks API 参考

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

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:*", "s3:*", "opsworks:*", "iam:PassRole"], "Resource": "*" } ] }
注意

如果您不允许 iam:PassRole,则调用 AWS 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 资源的权限