AWS Cloud9 不再向新客户提供。 AWS Cloud9 的现有客户可以继续正常使用该服务。了解更多
本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用访问无入口实例 EC2 AWS Systems Manager
为EC2环境创建的 “无入口EC2实例” 可以 AWS Cloud9 连接到其 Amazon 实例,而无需在该EC2实例上打开任何入站端口。在使用控制台、命令行界面或堆栈创建EC2环境时,您可以选择 no-ingress 选项。AWS CloudFormation有关如何使用控制台或命令行界面创建环境的更多信息,请参阅步骤 1:创建环境。
重要
使用 Systems Manager 会话管理器管理与您的EC2实例的连接无需支付额外费用。
在控制台的 “创建环境” 页面中选择环境类型时,您可以选择需要入站连接的新EC2实例或不需要以下内容的新无入口EC2实例:
-
新EC2实例-通过此设置,实例的安全组具有允许传入网络流量的规则。将传入的网络流量限制为已获批连接 AWS Cloud9 的 IP 地址。开放的入站端口允许 AWS Cloud9 SSH连接到其实例。如果您使用 AWS Systems Manager 会话管理器,则SSM无需打开入站端口(无入口)即可通过访问您的亚马逊EC2实例。此方法仅适用于新的 Amazon EC2 实例。有关更多信息,请参阅 在EC2环境中使用 Systems Manager 的好处。
-
现有计算-使用此设置,可以访问需要SSH登录详细信息的现有 Amazon EC2 实例,该实例必须具有入站安全组规则。如果您选择此选项,则会自动创建服务角色。您可以在设置屏幕底部的备注中查看服务角色的名称。
如果使用创建环境 AWS CLI,则可以通过在调用命令时设置--connection-type CONNECT_SSM
选项来配置无入口EC2实例。create-environment-ec2
有关创建所需的服务角色和实例配置文件的更多信息,请参阅 使用管理 Systems Manager 的实例配置文件 AWS CLI。
创建完使用无入口EC2实例的环境后,请确认以下内容:
-
Systems Manager 会话管理器有权代表您对EC2实例执行操作。有关更多信息,请参阅 管理 Systems Manager 权限。
-
AWS Cloud9 用户可以访问会话管理器管理的实例。有关更多信息,请参阅 授予用户访问由会话管理器管理的实例的权限。
在EC2环境中使用 Systems Manager 的好处
允许 Session Manager 处理 AWS Cloud9 与其EC2实例之间的安全连接有两个主要好处:
-
无需为实例打开入站端口
-
将实例启动到公有子网或私有子网内的选项
管理 Systems Manager 权限
默认情况下,Systems Manager 无权对EC2实例执行操作。通过 AWS Identity and Access Management (IAM) 实例配置文件提供访问权限。(实例配置文件是在启动时将IAM角色信息传递给EC2实例的容器。)
当您使用 AWS Cloud9 控制台创建无入口EC2实例时,系统会自动为您创建服务角色 (AWSCloud9SSMAccessRole
) 和IAM实例配置文件 (AWSCloud9SSMInstanceProfile
)。(您可以在IAM管理控制台AWSCloud9SSMAccessRole
中查看。 实例配置文件不显示在IAM控制台中。)
重要
如果您首次使用创建无入口EC2环境 AWS CLI,则必须明确定义所需的服务角色和实例配置文件。有关更多信息,请参阅 使用管理 Systems Manager 的实例配置文件 AWS CLI。
重要
如果您正在创建 AWS Cloud9 环境并使用附加AWSCloud9Administrator
或AWSCloud9User
策略的 Amazon S EC2 ystems Manager,则还必须附加具有特定IAM权限的自定义策略,请参阅用于创建SSM环境的自定义IAM策略。这是由于 AWSCloud9Administrator
和 AWSCloud9User
策略存在权限问题。
为了提供额外的安全保护, AWS Cloud9 服务相关角色的AWSCloud9ServiceRolePolicy
策略中包含了PassRole
限制。AWSServiceRoleforAWSCloud9
当您将IAM角色传递给服务时,它允许该服务代入该角色并代表您执行操作。在这种情况下,该PassRole
权限可确保 AWS Cloud9 只能将AWSCloud9SSMAccessRole
角色(及其权限)传递给EC2实例。这就限制了可以对EC2实例执行的操作仅限于所要求的 AWS Cloud9操作。
注意
如果您不再需要使用 Systems Manager 来访问实例,您可以删除 AWSCloud9SSMAccessRole
服务角色。有关更多信息,请参阅IAM用户指南中的删除角色或实例配置文件。
使用管理 Systems Manager 的实例配置文件 AWS CLI
您也可以使用创建无入口EC2环境。 AWS CLI当您调用 create-environment-ec2
时,将 --connection-type
选项设置为 CONNECT_SSM
。
如果您使用此选项,则 AWSCloud9SSMAccessRole
服务角色和 AWSCloud9SSMInstanceProfile
不会自动创建。因此,要创建所需的服务配置文件和实例配置文件,请执行下列操作之一:
-
拥有
AWSCloud9SSMAccessRole
服务角色后,使用控制台创建EC2环境,之后会自动AWSCloud9SSMInstanceProfile
创建。创建服务角色和实例配置文件后,便可用于使用创建的任何其他EC2环境 AWS CLI。 -
运行以下 AWS CLI 命令以创建服务角色和实例配置文件。
aws iam create-role --role-name AWSCloud9SSMAccessRole --path /service-role/ --assume-role-policy-document '{"Version": "2012-10-17","Statement": [{"Effect": "Allow","Principal": {"Service": ["ec2.amazonaws.com","cloud9.amazonaws.com"] },"Action": "sts:AssumeRole"}]}' aws iam attach-role-policy --role-name AWSCloud9SSMAccessRole --policy-arn arn:aws:iam::aws:policy/AWSCloud9SSMInstanceProfile aws iam create-instance-profile --instance-profile-name AWSCloud9SSMInstanceProfile --path /cloud9/ aws iam add-role-to-instance-profile --instance-profile-name AWSCloud9SSMInstanceProfile --role-name AWSCloud9SSMAccessRole
授予用户访问由会话管理器管理的实例的权限
要打开通过 Systems Manager 连接到EC2实例的 AWS Cloud9 环境,用户必须拥有API操作权限StartSession
。此操作启动与托管EC2实例的连接,以进行会话管理器会话。您可以使用 AWS Cloud9 特定的托管策略(推荐)或编辑IAM策略并添加必要的权限来授予用户访问权限。
方法 | 描述 |
---|---|
使用 AWS Cloud9特定的托管策略 |
我们建议使用 AWS 托管策略允许用户访问由 Systems Manager 管理的EC2实例。托管策略为标准 AWS Cloud9 用例提供了一组权限,并且可以轻松地附加到实IAM体。 所有托管策略还包括运行该
重要如果您正在创建 AWS Cloud9 环境并使用附加 有关更多信息,请参阅 AWS 的托管策略 AWS Cloud9。 |
编辑IAM策略并添加所需的策略声明 |
要编辑现有策略,您可以为添加权限 编辑策略时,添加允许 |
您可以使用以下权限来运行该StartSession
API操作。ssm:resourceTag
条件键指定可以为任何实例 (Resource: arn:aws:ec2:*:*:instance/*
) 启动会话管理器会话,前提是该实例是 AWS Cloud9 EC2开发环境 (aws:cloud9:environment
)。
注意
以下托管式策略还包括这些策略语句:AWSCloud9Administrator
、AWSCloud9User
和 AWSCloud9EnvironmentMember
。
{ "Effect": "Allow", "Action": "ssm:StartSession", "Resource": "arn:aws:ec2:*:*:instance/*", "Condition": { "StringLike": { "ssm:resourceTag/aws:cloud9:environment": "*" }, "StringEquals": { "aws:CalledViaFirst": "cloud9.amazonaws.com" } } }, { "Effect": "Allow", "Action": [ "ssm:StartSession" ], "Resource": [ "arn:aws:ssm:*:*:document/*" ] }
AWS CloudFormation 用于创建无入口环境 EC2
使用AWS CloudFormation 模板定义无入口的 Amazon EC2 开发环境时,请在创建堆栈之前执行以下操作:
-
创建
AWSCloud9SSMAccessRole
服务角色和AWSCloud9SSMInstanceProfile
实例配置文件。有关更多信息,请参阅 使用 AWS CloudFormation 模板创建服务角色和实例配置文件。 -
更新调用IAM实体的政策 AWS CloudFormation。这样,实体就可以启动连接到EC2实例的会话管理器会话。有关更多信息,请参阅 向IAM策略添加 Systems Manager 权限。
使用 AWS CloudFormation 模板创建服务角色和实例配置文件
您需要创建服务角色AWSCloud9SSMAccessRole
和实例配置文件,AWSCloud9SSMInstanceProfile
以使 Systems Manager 能够管理支持您的开发环境的EC2实例。
如果您之前创建AWSCloud9SSMAccessRole
并AWSCloud9SSMInstanceProfile
通过创建无入口EC2环境with the console或运行 AWS CLI 命令,则服务角色和实例配置文件已经可供使用。
注意
假设您尝试为无入口EC2环境创建 AWS CloudFormation 堆栈,但没有先创建所需的服务角色和实例配置文件。那么,不会创建堆栈,并显示以下错误消息:
账户中 AWSCloud9SSMInstanceProfile 不存在实例配置文件。
首次使用创建无入口EC2环境时 AWS CloudFormation,可以在模板中将AWSCloud9SSMAccessRole
和定义AWSCloud9SSMInstanceProfile
为IAM资源。
摘自示例模板的此内容显示了如何定义这些资源。该AssumeRole
操作会返回安全证书,这些证书提供对 AWS Cloud9 环境及其EC2实例的访问权限。
AWSTemplateFormatVersion: 2010-09-09 Resources: AWSCloud9SSMAccessRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Principal: Service: - cloud9.amazonaws.com - ec2.amazonaws.com Action: - 'sts:AssumeRole' Description: 'Service linked role for AWS Cloud9' Path: '/service-role/' ManagedPolicyArns: - arn:aws:iam::aws:policy/AWSCloud9SSMInstanceProfile RoleName: 'AWSCloud9SSMAccessRole' AWSCloud9SSMInstanceProfile: Type: "AWS::IAM::InstanceProfile" Properties: InstanceProfileName: AWSCloud9SSMInstanceProfile Path: "/cloud9/" Roles: - Ref: AWSCloud9SSMAccessRole
向IAM策略添加 Systems Manager 权限
在AWS CloudFormation 模板中定义服务角色和实例配置文件后,请确保创建堆栈的IAM实体有权启动会话管理器会话。会话是使用会话管理器与EC2实例建立的连接。
注意
如果您在为无入口EC2环境创建堆栈之前没有添加启动会话管理器会话的权限,则会AccessDeniedException
返回错误。
通过调用,将以下权限添加到IAM实体的策略中 AWS CloudFormation。
{ "Effect": "Allow", "Action": "ssm:StartSession", "Resource": "arn:aws:ec2:*:*:instance/*", "Condition": { "StringLike": { "ssm:resourceTag/aws:cloud9:environment": "*" }, "StringEquals": { "aws:CalledViaFirst": "cloudformation.amazonaws.com" } } }, { "Effect": "Allow", "Action": [ "ssm:StartSession" ], "Resource": [ "arn:aws:ssm:*:*:document/*" ] }
为 Amazon S3 配置VPC终端节点以下载依赖项
如果您的 AWS Cloud9 环境EC2实例无法访问互联网,请为指定的 Amazon S3 存储桶创建VPC终端节点。此存储桶包含保留您的存储区所需的依赖项IDE up-to-date。
为 Amazon S3 设置VPC终端节点还涉及自定义访问策略。您希望访问策略仅允许访问包含要下载的依赖项的可信 S3 桶。
注意
您可以使用、或 Amazon 创建和配置VPC终端节点VPCAPI。 AWS Management Console AWS CLI以下过程说明如何使用控制台界面创建VPC终端节点。
为 Amazon S3 创建和配置VPC终端节点
-
在中 AWS Management Console,前往 Amazon 的控制台页面VPC。
-
在导航窗格中,选择 Endpoints(端点)。
-
在 Endpoints(端点)页面中,选择 Create Endpoint(创建端点)。
-
在 Create Endpoint(创建端点)页面中,在搜索字段中输入“s3”,然后按 Return(返回)以列出 Amazon S3 在当前 AWS 区域内可用的端点。
-
从返回的 Amazon S3 端点列表中选择 Gateway(网关)类型。
-
接下来,选择VPC包含您的环境EC2实例的。
-
现在选择VPC的路由表。这样,关联的子网可以访问端点。您的环境EC2实例位于其中一个子网中。
-
在 Policy(策略)部分,选择 Custom(自定义)选项,并将标准策略替换为以下策略。
{ "Version": "2008-10-17", "Statement": [ { "Sid": "Access-to-C9-bucket-only", "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::{bucket_name}/content/dependencies/*" } ] }
对于
Resource
元素,将{bucket_name}
替换为您的 AWS 区域内可用的桶的实际名称。例如,如果您 AWS Cloud9 在欧洲(爱尔兰)地区使用,则需要指定以下内容:"Resource": "arn:aws:s3:::static-eu-west-1-prod-static-hld3vzaf7c4h/content/dependencies/
。下表列出了可用 AWS 区域 位置 AWS Cloud9 的存储桶名称。
区域中的 AWS Cloud9 亚马逊 S3 存储桶 AWS 区域 Bucket name(存储桶名称) 美国东部(俄亥俄)
static-us-east-2-prod-static-1c3sfcvf9hy4m
美国东部(弗吉尼亚州北部)
static-us-east-1-prod-static-mft1klnkc4hl
美国西部(俄勒冈州)
static-us-west-2-prod-static-p21mksqx9zlr
美国西部(加利福尼亚北部)
static-us-west-1-prod-static-16d59zrrp01z0
非洲(开普敦)
static-af-south-1-prod-static-v6v7i5ypdppv
亚太地区(香港)
static-ap-east-1-prod-static-171xhpfkrorh6
Asia Pacific (Mumbai) static-ap-south-1-prod-static-ykocre202i9d
亚太地区(大阪) static-ap-northeast-3-prod-static-ivmxqzrx2ioi
亚太地区(首尔) static-ap-northeast-2-prod-static-1wxyctlhwiajm
亚太地区(新加坡) static-ap-southeast-1-prod-static-13ibpyrx4vk6d
亚太地区(悉尼)
static-ap-southeast-2-prod-static-1cjsl8bx27rfu
亚太地区(东京)
static-ap-northeast-1-prod-static-4fwvbdisquj8
加拿大(中部)
static-ca-central-1-prod-static-g80lpejy486c
欧洲地区(法兰克福)
static-eu-central-1-prod-static-14lbgls2vrkh
欧洲地区(爱尔兰)
static-eu-west-1-prod-static-hld3vzaf7c4h
欧洲地区(伦敦)
static-eu-west-2-prod-static-36lbg202837x
欧洲地区(米兰)
static-eu-south-1-prod-static-1379tzkd3ni7d
欧洲地区(巴黎)
static-eu-west-3-prod-static-1rwpkf766ke58
欧洲地区(斯德哥尔摩)
static-eu-north-1-prod-static-1qzw982y7yu7e
中东(巴林)
static-me-south-1-prod-static-gmljex38qtqx
南美洲(圣保罗)
static-sa-east-1-prod-static-1cl8k0y7opidt
以色列(特拉维夫)
static-il-central-1-prod-static-k02vrnhcesue
-
选择 Create Endpoint(创建端点)。
如果您提供了正确的配置信息,则会出现一条消息,显示已创建的端点的 ID。
-
要检查您是否IDE可以访问 Amazon S3 存储桶,请在菜单栏上选择 “窗口”,“新建终端”,开始终端会话。然后,运行下面的命令,同时将
{bucket_name}
替换为您的区域的桶名称。ping {bucket_name}.s3.{region}.amazonaws.com.
例如,如果您在美国东部(弗吉尼亚州北部)区域为 S3 桶创建了端点,则运行以下命令。
ping static-us-east-1-prod-static-mft1klnkc4hl.s3.us-east-1.amazonaws.com
如果 ping 得到响应,则确认IDE您可以访问存储桶及其依赖项。
有关此功能的更多信息,请参阅AWS PrivateLink指南中的 Amazon S3 终端节点。
为私有连接配置VPC终端节点
当您将实例启动到带有 access using Systems Manager(使用 Systems Manager 访问)选项的子网内,则其安全组没有允许传入网络流量的入站规则。但是,安全组具有出站规则,以允许来自实例的出站流量。这是下载保持最新状态所需的软件包和库所 AWS Cloud9 IDE必需的。
要阻止实例的出站和入站流量,请为 Systems Manager 创建和配置亚马逊VPC终端节点。使用接口VPC终端节点(接口终端节点),您可以连接到由提供支持的服务AWS PrivateLink。 AWS PrivateLink 是一种可用于使用私有 IP 地址私有访问亚马逊EC2和 System APIs s Manager 的技术。要将VPC端点配置为使用 Systems Manager,请按照此知识中心资源
警告
假设您配置的安全组不允许入站或出站网络流量。然后,支持你的EC2实例将 AWS Cloud9 IDE无法访问互联网。您需要为您创建 A mazon S3 终端节点,VPC以允许访问可信 S3 存储桶中包含的依赖项。此外,如果没有互联网接入 AWS 服务 AWS Lambda,有些内容(例如)可能无法按预期运行。
使用 AWS PrivateLink,通过VPC端点处理的每 GB 会产生数据处理费用。这与流量的来源或目的地无关。有关更多信息,请参阅 AWS PrivateLink 定价