本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
创建和使用 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": "EnforceOutOfSubnet", "Action": [ "cloudshell:CreateEnvironment" ], "Effect": "Deny", "Resource": "*", "Condition": { "StringEquals": { "cloudshell:SubnetIds": [ "subnet-1", "subnet-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" ] } } } ] }