本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用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 CloudShellFullAccess《AWS 托管策略用户指南》。
注意
IAM也可以启动具有以下 AWS 托管策略的身份 CloudShell。但是,这些策略提供了广泛的权限。因此,我们建议您仅在这些政策对IAM用户的工作角色至关重要时才授予这些政策。
有关附加托管策略的更多信息,请参阅《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。
名称 | 对已授予权限的描述 | 需要启动 CloudShell吗? |
---|---|---|
|
创建 CloudShell 环境,在会 CloudShell 话开始时检索布局,并将来自 Web 应用程序的当前布局保存在后端。此权限的期望 |
是 |
|
从连接到 CloudShell 环境 AWS Management Console。 |
是 |
|
读取 CloudShell 环境的状态。 |
是 |
|
删除 CloudShell 环境。 |
否 |
|
生成预签名URLs的 Amazon S3,用于 CloudShell 通过 CloudShell 网络界面下载文件。这不适用于VPC环境。 |
否 |
|
生成预签名URLs的 Amazon S3,用于 CloudShell 通过 CloudShell 网络界面上传文件。这不适用于VPC环境。 |
否 |
|
描述环境。 |
否 |
|
将用于登录的凭据转发 AWS Management Console 到。 CloudShell |
否 |
|
启动已停止的 CloudShell 环境。 |
是 |
|
停止正在运行的 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-1
和vpc-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-1
和subnet-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-1
和sg-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-1
和vpc-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-1
和subnet-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-1
和sg-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 开发者基于身份的策略示例。