AWS Cloud9 不再向新客户提供。 AWS Cloud9 的现有客户可以继续正常使用该服务。了解更多
本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
为 EC2 环境创建的 “无入口 EC2 实例” 可以 AWS Cloud9 连接到其 Amazon 实例,而无需在该 EC2 实例上打开任何入站端口。在使用控制台、命令行界面或堆栈创建 EC2 环境时,您可以选择 no-ingress 选项。AWS CloudFormation有关如何使用控制台或命令行界面创建环境的更多信息,请参阅步骤 1:创建环境。
重要
使用 Systems Manager 会话管理器管理与您的 EC2 实例的连接无需支付额外费用。
在控制台的 “创建环境” 页面中选择环境类型时,您可以选择需要入站连接的新 EC2 实例或不需要以下内容的新无入口 EC2 实例:
-
新 EC2实例-通过此设置,实例的安全组具有允许传入网络流量的规则。将传入的网络流量限制为已获批连接 AWS Cloud9 的 IP 地址。开放的入站端口 AWS Cloud9 允许通过 SSH 连接到其实例。如果您使用 S AWS ystems Manager 会话管理器,则无需打开入站端口(无入口)即可通过 SSM 访问您的 Amazon 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 实例之间的安全连接有两个主要好处:
-
无需为实例打开入站端口
-
将实例启动到公有子网或私有子网内的选项
与其 EC2 实例 AWS Cloud9 之间的安全连接由会话管理器处理。会话管理器是一项完全托管的 S AWS Cloud9 ystems Manager 功能,无需打开入站端口即可连接到其 EC2 实例。
重要
目前,只有在创建新 EC2 环境时,才可以使用使用 Systems Manager 进行无入口连接的选项。
随着会话管理器会话的启动,将建立与目标实例的连接。建立连接后,环境现在可以通过 Systems Manager 服务与实例进行交互。Systems Manager 服务通过 Systems Manager Agent (SSM Agent) 与实例交互。
默认情况下,SSM 代理安装在 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 实例的会话管理器会话。有关更多信息,请参阅 将 Systems Manager 权限添加到 IAM 策略。
使用 AWS CloudFormation 模板创建服务角色和实例配置文件
您需要创建服务角色AWSCloud9SSMAccessRole
和实例配置文件,AWSCloud9SSMInstanceProfile
以使 Systems Manager 能够管理支持您的开发环境的 EC2 实例。
如果您之前创建AWSCloud9SSMAccessRole
并AWSCloud9SSMInstanceProfile
通过创建无入口 EC2 环境with the console或运行 AWS CLI 命令,则服务角色和实例配置文件已经可供使用。
注意
假设您尝试为无入口 EC2 环境创建 AWS CloudFormation 堆栈,但没有先创建所需的服务角色和实例配置文件。那么,不会创建堆栈,并显示以下错误消息:
账户中不存在实例 AWSCloud9SSMInstance配置文件。
首次使用创建无入口 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
将 Systems Manager 权限添加到 IAM 策略
在 AWS CloudFormation 模板中定义服务角色和实例配置文件后,请确保创建堆栈的 IAM 实体具有启动会话管理器会话的权限。会话是使用会话管理器与 EC2 实例建立的连接。
注意
如果您在为无入口 EC2 环境创建堆栈之前没有添加启动会话管理器会话的权限,则会AccessDeniedException
返回错误。
通过调用 AWS CloudFormation,向 IAM 实体的策略添加以下权限。
{
"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 API 创建和配置 VPC 终端节点。 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(网关)类型。
-
接下来,选择包含您的环境 EC2 实例的 VPC。
-
现在选择 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 区域 存储桶名称 美国东部(俄亥俄州)
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 存储桶,请在菜单栏选择 Window(窗口)> New Terminal(新建终端)以启动终端会话。然后,运行下面的命令,同时将
{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 创建和配置 Amazon VPC 端点。使用接口 VPC 终端节点(接口终端节点),您可以连接到由提供支持的服务AWS PrivateLink。 AWS PrivateLink 是一种可用于使用私有 IP 地址私有访问亚马逊 EC2 和 System APIs s Manager 的技术。要将 VPC 终端节点配置为使用 Systems Manager,请按照此知识中心资源
警告
假设您配置的安全组不允许入站或出站网络流量。然后,支持你的 AWS Cloud9 IDE 的 EC2 实例无法访问互联网。您需要创建一个适用于您的 VPC 的 Amazon S3 端点,以允许访问包含在可信 S3 桶中的依赖项。此外,如果没有互联网接入 AWS 服务 AWS Lambda,有些内容(例如)可能无法按预期运行。
使用 AWS PrivateLink,通过 VPC 终端节点处理的每 GB 会产生数据处理费用。这与流量的来源或目的地无关。有关更多信息,请参阅 AWS PrivateLink 定价