使用IAM策略管理 AWS CloudShell 访问和使用情况 - AWS CloudShell

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

使用IAM策略管理 AWS CloudShell 访问和使用情况

通过提供的访问管理资源 AWS Identity and Access Management,管理员可以向IAM用户授予权限。这样,这些用户就可以访问 AWS CloudShell 和使用环境的功能。管理员还可以创建策略,在精细级别上指定这些用户可以在 Shell 环境中执行哪些操作。

管理员向用户授予访问权限的最快方法是通过 AWS 托管策略。AWS托管策略是由创建和管理的独立策略 AWS。以下的 AWS 托管策略 AWS CloudShell 可以附加到IAM身份:

  • AWS CloudShellFullAccess:授予使用权限,并 AWS CloudShell 具有对所有功能的完全访问权限。

AWS CloudShellFullAccess策略使用通配符 (*) 来授予IAM身份(用户、角色或群组)对 CloudShell和功能的完全访问权限。有关此策略的更多信息,请参阅AWS CloudShellFullAccessAWS 托管策略用户指南》

注意

IAM也可以启动具有以下 AWS 托管策略的身份 CloudShell。但是,这些策略提供了广泛的权限。因此,我们建议您仅在这些政策对IAM用户的工作角色至关重要时才授予这些政策。

  • 管理员:为IAM用户提供完全访问权限,并允许他们向中的每项服务和资源委派权限 AWS。

  • 开发者高级IAM用户:使用户能够执行应用程序开发任务,创建和配置支持 AWS 感知型应用程序开发的资源和服务。

有关附加托管策略的更多信息,请参阅《IAM用户指南》中的添加IAM身份权限(控制台)

AWS CloudShell 使用自定义策略管理允许的操作

要管理IAM用户可以执行的操作 CloudShell,请创建使用 CloudShellPolicy 托管策略作为模板的自定义策略。或者,编辑嵌入在相关IAM身份(用户、组或角色)中的内联策略

例如,您可以允许IAM用户访问 CloudShell,但阻止他们转发用于登录的 CloudShell 环境凭证 AWS Management Console。

重要

要 AWS CloudShell 从启动 AWS Management Console,IAM用户需要具有执行以下操作的权限:

  • CreateEnvironment

  • CreateSession

  • GetEnvironmentStatus

  • StartEnvironment

如果附加的策略未明确允许其中一项操作,则在您尝试启动时会返回IAM权限错误 CloudShell。

AWS CloudShell 权限
名称 对已授予权限的描述 需要启动 CloudShell吗?

cloudshell:CreateEnvironment

创建 CloudShell 环境,在会 CloudShell 话开始时检索布局,并将来自 Web 应用程序的当前布局保存在后端。此权限的期望*值仅Resource为中概述的值的IAM政策示例 CloudShell

cloudshell:CreateSession

从连接到 CloudShell 环境 AWS Management Console。

cloudshell:GetEnvironmentStatus

读取 CloudShell 环境的状态。

cloudshell:DeleteEnvironment

删除 CloudShell 环境。

cloudshell:GetFileDownloadUrls

生成预签名URLs的 Amazon S3,用于 CloudShell 通过 CloudShell 网络界面下载文件。这不适用于VPC环境。

cloudshell:GetFileUploadUrls

生成预签名URLs的 Amazon S3,用于 CloudShell 通过 CloudShell 网络界面上传文件。这不适用于VPC环境。

cloudshell:DescribeEnvironments

描述环境。

cloudshell:PutCredentials

将用于登录的凭据转发 AWS Management Console 到。 CloudShell

cloudshell:StartEnvironment

启动已停止的 CloudShell 环境。

cloudshell:StopEnvironment

停止正在运行的 CloudShell 环境。

的IAM政策示例 CloudShell

以下示例说明如何创建策略来限制谁可以访问 CloudShell。这些示例还显示可在 Shell 环境中执行的操作。

以下政策强制完全拒绝访问 CloudShell 及其功能。

{ "Version": "2012-10-17", "Statement": [{ "Sid": "DenyCloudShell", "Effect": "Deny", "Action": [ "cloudshell:*" ], "Resource": "*" }] }

以下策略允许IAM用户访问, CloudShell 但禁止他们生成URLs用于文件上传和下载的预签名。用户仍然可以将文件传入和传出环境,例如使用 wget 等客户端。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowUsingCloudshell", "Effect": "Allow", "Action": [ "cloudshell:*" ], "Resource": "*" }, { "Sid": "DenyUploadDownload", "Effect": "Deny", "Action": [ "cloudshell:GetFileDownloadUrls", "cloudshell:GetFileUploadUrls" ], "Resource": "*" }] }

以下策略允许IAM用户访问 CloudShell。但是,该策略禁止将您用于登录的凭据转发 AWS Management Console 到 CloudShell 环境。IAM使用此策略的用户需要在中手动配置其凭证 CloudShell。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowUsingCloudshell", "Effect": "Allow", "Action": [ "cloudshell:*" ], "Resource": "*" }, { "Sid": "DenyCredentialForwarding", "Effect": "Deny", "Action": [ "cloudshell:PutCredentials" ], "Resource": "*" }] }

以下策略允许IAM用户创建 AWS CloudShell 环境。

{ "Version": "2012-10-17", "Statement": [{ "Sid": "CloudShellUser", "Effect": "Allow", "Action": [ "cloudshell:CreateEnvironment", "cloudshell:CreateSession", "cloudshell:GetEnvironmentStatus", "cloudshell:StartEnvironment" ], "Resource": "*" }] }

创建和使用 CloudShell VPC环境所需的IAM权限

要创建和使用 CloudShell VPC环境,IAM管理员必须允许访问VPC特定 Amazon EC2 权限。本节列出了创建和使用VPC环境所需的 Amazon EC2 权限。

要创建VPC环境,分配给您的角色的IAM策略必须包含以下 Amazon EC2 权限:

  • ec2:DescribeVpcs

  • ec2:DescribeSubnets

  • ec2:DescribeSecurityGroups

  • ec2:DescribeDhcpOptions

  • ec2:DescribeNetworkInterfaces

  • ec2:CreateTags

  • ec2:CreateNetworkInterface

  • ec2:CreateNetworkInterfacePermission

我们还建议包括:

  • ec2:DeleteNetworkInterface

注意

此权限不是强制性的,但这是清理由 CloudShell 其创建的ENI资源(为 CloudShell VPC环境ENIs创建的带有ManagedByCloudShell密钥标记)所必需的。如果未启用此权限,则必须在每次使用 CloudShell VPC环境后手动清理ENI资源。

IAM策略授予完全 CloudShell访问权限,包括访问权限 VPC

以下示例显示了如何启用对以下内容的完全权限,包括对以下内容的VPC访问权限 CloudShell:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCloudShellOperations", "Effect": "Allow", "Action": [ "cloudshell:*" ], "Resource": "*" }, { "Sid": "AllowDescribeVPC", "Effect": "Allow", "Action": [ "ec2:DescribeDhcpOptions", "ec2:DescribeNetworkInterfaces", "ec2:DescribeSubnets", "ec2:DescribeSecurityGroups", "ec2:DescribeVpcs" ], "Resource": "*" }, { "Sid": "AllowCreateTagWithCloudShellKey", "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": "arn:aws:ec2:*:*:network-interface/*", "Condition": { "StringEquals": { "ec2:CreateAction": "CreateNetworkInterface" }, "ForAnyValue:StringEquals": { "aws:TagKeys": "ManagedByCloudShell" } } }, { "Sid": "AllowCreateNetworkInterfaceWithSubnetsAndSG", "Effect": "Allow", "Action": [ "ec2:CreateNetworkInterface" ], "Resource": [ "arn:aws:ec2:*:*:subnet/*", "arn:aws:ec2:*:*:security-group/*" ] }, { "Sid": "AllowCreateNetworkInterfaceWithCloudShellTag", "Effect": "Allow", "Action": [ "ec2:CreateNetworkInterface" ], "Resource": "arn:aws:ec2:*:*:network-interface/*", "Condition": { "ForAnyValue:StringEquals": { "aws:TagKeys": "ManagedByCloudShell" } } }, { "Sid": "AllowCreateNetworkInterfacePermissionWithCloudShellTag", "Effect": "Allow", "Action": [ "ec2:CreateNetworkInterfacePermission" ], "Resource": "arn:aws:ec2:*:*:network-interface/*", "Condition": { "StringEquals": { "aws:ResourceTag/ManagedByCloudShell": "" } } }, { "Sid": "AllowDeleteNetworkInterfaceWithCloudShellTag", "Effect": "Allow", "Action": [ "ec2:DeleteNetworkInterface" ], "Resource": "arn:aws:ec2:*:*:network-interface/*", "Condition": { "StringEquals": { "aws:ResourceTag/ManagedByCloudShell": "" } } } ] }

为VPC环境使用IAM条件键

您可以使用 CloudShell特定条件键进行VPC设置,为您的VPC环境提供额外的权限控制。您还可以指定VPC环境可以使用和不能使用的子网和安全组。

CloudShell 在IAM策略中支持以下条件键:

  • CloudShell:VpcIds— 允许或拒绝一个或多个 VPCs

  • CloudShell:SubnetIds— 允许或拒绝一个或多个子网

  • CloudShell:SecurityGroupIds— 允许或拒绝一个或多个安全组

注意

如果修改了有权访问公共 CloudShell 环境的用户的权限以增加对cloudshell:createEnvironment操作的限制,他们仍然可以访问其现有的公共环境。但是,如果您想修改具有此限制的IAM策略并禁用他们对现有公共环境的访问权限,则必须先使用该限制更新IAM策略,然后确保您账户中的每个 CloudShell 用户都使用 CloudShell Web 用户界面(操作删除环境)手动删除现有的公共 CloudShell环境

带有VPC设置条件键的策略示例

以下示例演示如何使用条件键进行VPC设置。创建具有所需限制的策略语句后,为目标用户或角色附加策略语句。

确保用户仅创建VPC环境并拒绝创建公共环境

为确保用户只能创建VPC环境,请使用拒绝权限,如以下示例所示:

{ "Statement": [ { "Sid": "DenyCloudShellNonVpcEnvironments", "Action": [ "cloudshell:CreateEnvironment" ], "Effect": "Deny", "Resource": "*", "Condition": { "Null": { "cloudshell:VpcIds": "true" } } } ] }

拒绝用户访问特定VPCs、子网或安全组

要拒绝用户访问特定的VPCs内容,StringEquals请使用检查cloudshell:VpcIds条件的值。以下示例拒绝用户访问vpc-1vpc-2

{ "Version": "2012-10-17", "Statement": [ { "Sid": "EnforceOutOfVpc", "Action": [ "cloudshell:CreateEnvironment" ], "Effect": "Deny", "Resource": "*", "Condition": { "StringEquals": { "cloudshell:VpcIds": [ "vpc-1", "vpc-2" ] } } } ] }

要拒绝用户访问特定的VPCs内容,StringEquals请使用检查cloudshell:SubnetIds条件的值。以下示例拒绝用户访问subnet-1subnet-2

{ "Version": "2012-10-17", "Statement": [ { "Sid": "EnforceOutOfVpc", "Action": [ "cloudshell:CreateEnvironment" ], "Effect": "Deny", "Resource": "*", "Condition": { "StringEquals": { "cloudshell:VpcIds": [ "vpc-1", "vpc-2" ] } } } ] }

要拒绝用户访问特定的VPCs内容,StringEquals请使用检查cloudshell:SecurityGroupIds条件的值。以下示例拒绝用户访问sg-1sg-2

{ "Version": "2012-10-17", "Statement": [ { "Sid": "EnforceOutOfSecurityGroups", "Action": [ "cloudshell:CreateEnvironment" ], "Effect": "Deny", "Resource": "*", "Condition": { "ForAnyValue:StringEquals": { "cloudshell:SecurityGroupIds": [ "sg-1", "sg-2" ] } } } ] }

允许用户创建具有特定VPC配置的环境

要允许用户访问特定的VPCs,StringEquals请使用检查cloudshell:VpcIds条件的值。以下示例允许用户访问vpc-1vpc-2

{ "Version": "2012-10-17", "Statement": [ { "Sid": "EnforceStayInSpecificVpc", "Action": [ "cloudshell:CreateEnvironment" ], "Effect": "Allow", "Resource": "*", "Condition": { "StringEquals": { "cloudshell:VpcIds": [ "vpc-1", "vpc-2" ] } } } ] }

要允许用户访问特定的VPCs,StringEquals请使用检查cloudshell:SubnetIds条件的值。以下示例允许用户访问subnet-1subnet-2

{ "Version": "2012-10-17", "Statement": [ { "Sid": "EnforceStayInSpecificSubnets", "Action": [ "cloudshell:CreateEnvironment" ], "Effect": "Allow", "Resource": "*", "Condition": { "ForAllValues:StringEquals": { "cloudshell:SubnetIds": [ "subnet-1", "subnet-2" ] } } } ] }

要允许用户访问特定的VPCs,StringEquals请使用检查cloudshell:SecurityGroupIds条件的值。以下示例允许用户访问sg-1sg-2

{ "Version": "2012-10-17", "Statement": [ { "Sid": "EnforceStayInSpecificSecurityGroup", "Action": [ "cloudshell:CreateEnvironment" ], "Effect": "Allow", "Resource": "*", "Condition": { "ForAllValues:StringEquals": { "cloudshell:SecurityGroupIds": [ "sg-1", "sg-2" ] } } } ] }

访问权限 AWS 服务

CloudShell 使用您用于登录的IAM凭据 AWS Management Console。

注意

要使用您登录时使用的IAM证书 AWS Management Console,您必须拥有cloudshell:PutCredentials权限。

的这种预身份验证功能 CloudShell 便于使用 AWS CLI。但是,对于从命令行调用的IAM用户 AWS 服务 ,用户仍然需要显式权限。

例如,假设IAM用户需要创建 Amazon S3 存储桶并将文件作为对象上传给他们。您可以创建明确允许这些操作的策略。IAM控制台提供了交互式可视化编辑器,可指导您完成构建JSON格式策略文档的过程。创建策略后,您可以将其附加到相关IAM身份(用户、组或角色)。

有关附加托管策略的更多信息,请参阅《IAM用户指南》中的添加IAM身份权限(控制台)

访问中 Amazon Q CLI 功能的权限 CloudShell

要在中使用 Amazon Q CLI 功能 CloudShell,例如内联建议、聊天和翻译,请确保您拥有所需的IAM权限。如果您无法访问中的 Amazon Q CLI 功能 CloudShell,请联系您的管理员为您提供必要的IAM权限。有关更多信息,请参阅 Amazon Q 开发者用户指南中的 Amazon Q 开发者基于身份的策略示例