本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
为在 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 堆栈时为每个实例指定实例配置文件。
您还可以通过编辑层配置来为层的实例指定配置文件。
实例配置文件指定一个 IAM 角色。在实例上运行的应用程序可担任该角色以访问 AWS 资源,具体取决于该角色的策略授予的权限。有关应用程序如何担任角色的更多信息,请参阅使用 API 调用担任角色。
您可以采用以下任一方式创建实例配置文件:
-
使用 IAM; 控制台或 API 创建配置文件。
有关更多信息,请参阅角色(委托和联合)。
-
使用 AWS CloudFormation 模板创建配置文件。
有关如何在模板中包含 IAM; 资源的一些示例,请参阅 Identity and Access Management (IAM) 模板代码段。
一个实例配置文件必须具有一种信任关系和一个授予访问 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; 控制台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 资源的权限。