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

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

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

重要

AWS OpsWorks Stacks 不再接受新客户。在 2024 年 5 月 26 日之前,现有客户将能够照常使用 OpsWorks 控制台、API、CLI 和 CloudFormation 资源,届时这些工具或资源将停用。为准备此过渡,我们建议您尽快将堆栈过渡到AWS Systems Manager。有关更多信息,请参阅 AWS OpsWorks Stacks 生命周期终止常见问题解答将 AWS OpsWorks Stacks 应用程序迁移到 AWS Systems Manager Application Manager

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


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

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

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

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

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

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

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

  • 如果您是在 IAM 控制台中使用 Create Role 向导,请在此向导的第二页上的 AWS Service Roles 下指定 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" } ] } } }

当您创建您的实例配置文件时,您可将适当的策略附加到该配置文件的角色。在创建堆栈后,您必须使用 IAM; 控制台或 API 来将适当的策略附加到配置文件的角色。例如,以下策略授予对名为 DOC-EXAMPLE-BUCKET 的 Amazon S3 存储桶中的所有对象的完全访问权限。将区域DOC-EXAMPLE-BUCKET 替换为适合您配置的值。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:*", "Resource": "arn:aws:s3:region::DOC-EXAMPLE-BUCKET/*" } ] }

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

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

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

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:*", "s3:*", "opsworks:*", "iam:PassRole" ], "Resource": "arn:aws:ec2:region:account_id:instance/*", "Condition": { "StringEquals": { "iam:PassedToService": "opsworks.amazonaws.com" } } } ] }
注意

如果您不允许 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 实例上使用角色以获取权限的更多信息,请参阅 https://docs.aws.amazon.com/IAM/latest/UserGuide/role-usecase-ec2app.html 用户指南 中的AWS Identity and Access Management向在 Amazon EC2 实例上运行的应用程序授予访问 AWS 资源的权限