AWS Cloud9 现已不再向新客户提供。AWS Cloud9 的现有客户可以继续正常使用该服务。了解更多
使用 AWS Systems Manager 访问非入口 EC2 实例
为 EC2 环境创建的“非入口 EC2 实例”使 AWS Cloud9 能够路连接到其 Amazon EC2 实例,而无需打开该实例上的任何入站端口。使用控制台、命令行界面或 AWS CloudFormation 堆栈创建 EC2 环境时,可以选择非入口选项。有关如何使用控制台或命令行界面创建环境的更多信息,请参阅步骤 1:创建环境。
重要
使用 Systems Manager 会话管理器管理与 EC2 实例的连接不会产生额外费用。
在 控制台的 Create environment(创建环境)部分选择环境类型时,您可以选择需要入站连接的新 EC2 实例,也可以选择不需要以下各项的新的非入口 EC2 实例:
-
New EC2 instance(新 EC2 实例)– 选择此设置时,实例的安全组具有允许传入的网络流量的规则。将传入的网络流量限制为已获批连接 AWS Cloud9 的 IP 地址。打开的入站端口使 AWS Cloud9 能够通过 SSH 连接到其实例。如果您使用 AWS Systems Manager 会话管理器,则可以通过 SSM 访问您的 Amazon EC2 实例,而无需打开入站端口(无入口)。此方法仅适用于新 Amazon EC2 实例。有关更多信息,请参阅 在 EC2 环境中使用 Systems Manager 的益处。
-
Existing compute(现有计算)– 通过此设置,可以访问需要 SSH 登录详细信息的现有 Amazon EC2 实例,该实例必须具有对应的入站安全组规则。如果您选择此选项,则会自动创建服务角色。您可以在设置屏幕底部的备注中查看服务角色的名称。
如果使用 AWS CLI 创建环境,您可以在调用 create-environment-ec2
命令时设置 --connection-type CONNECT_SSM
选项来配置非入口 EC2 实例。有关创建所需的服务角色和实例配置文件的更多信息,请参阅 使用 AWS CLI 管理 Systems Manager 的实例配置文件。
使用非入口 EC2 实例完成创建环境后,请确认以下事项:
-
Systems Manager 会话管理器具有代表您对 EC2 实例执行操作的权限。有关更多信息,请参阅 管理 Systems Manager 权限。
-
AWS Cloud9 用户可以访问由会话管理器管理的实例。有关更多信息,请参阅 授予用户访问由会话管理器管理的实例的权限。
在 EC2 环境中使用 Systems 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 控制台中。)
重要
如果您首次使用 AWS CLI 创建非入口 EC2 环境,您必须明确定义所需的服务角色和实例配置文件。有关更多信息,请参阅 使用 AWS CLI 管理 Systems Manager 的实例配置文件。
重要
如果您正在创建 AWS Cloud9 环境并使用附加了 AWSCloud9Administrator
或 AWSCloud9User
策略的 Amazon EC2 Systems Manager,则还必须附加具有特定 IAM 权限的自定义策略,请参阅用于创建 SSM 环境的自定义 IAM 策略。这是由于 AWSCloud9Administrator
和 AWSCloud9User
策略存在权限问题。
为了获得额外的安全保护,AWS Cloud9 服务相关角色 AWSServiceRoleforAWSCloud9
在其 AWSCloud9ServiceRolePolicy
策略中带有 PassRole
限制。在您将 IAM 角色传递到服务时,则允许该服务代入该角色并代表您执行操作。在这种情况下,PassRole
权限可确保 AWS Cloud9 只能传递 AWSCloud9SSMAccessRole
角色(及其权限)到 EC2 实例。这将可以在 EC2 实例上执行的操作限制为仅 AWS Cloud9 要求的操作。
注意
如果您不再需要使用 Systems Manager 来访问实例,您可以删除 AWSCloud9SSMAccessRole
服务角色。有关更多信息,请参阅 IAM 用户指南中的删除角色或实例配置文件。
使用 AWS CLI 管理 Systems Manager 的实例配置文件
您还可以使用 AWS CLI 创建非入口 EC2 环境。当您调用 create-environment-ec2
时,将 --connection-type
选项设置为 CONNECT_SSM
。
如果您使用此选项,则 AWSCloud9SSMAccessRole
服务角色和 AWSCloud9SSMInstanceProfile
不会自动创建。因此,要创建所需的服务配置文件和实例配置文件,请执行下列操作之一:
-
使用控制台创建 EC2 环境,然后
AWSCloud9SSMAccessRole
服务角色和AWSCloud9SSMInstanceProfile
之后将自动创建。创建后,服务角色和实例配置文件可用于其他使用 AWS CLI 创建的 EC2 环境。 -
运行以下 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 环境,用户必须具有 StartSession
,API 操作的权限。此操作为会话管理器会话启动与托管 EC2 实例的连接。您可以通过使用特定于 AWS Cloud9 的托管式策略(推荐)或编辑 IAM 策略并添加必要的权限来向用户授予访问权限。
方法 | 描述 |
---|---|
使用特定于 AWS Cloud9 的托管式策略 |
我们建议使用 AWS 托管式策略,以允许用户访问由 Systems Manager 管理的 EC2 实例。托管式策略为标准 AWS Cloud9 使用案例提供一系列权限,并且可以轻松地附到 IAM 实体上。 所有托管式策略还包括运行
重要如果您正在创建 AWS Cloud9 环境并使用附加了 有关更多信息,请参阅 适用于 AWS Cloud9 的 AWS 托管式策略。 |
编辑 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 实例。
如果您之前已通过创建非入口 EC2 环境 with the console 或运行 AWS CLI 命令来创建 AWSCloud9SSMAccessRole
和 AWSCloud9SSMInstanceProfile
,则服务角色和实例配置文件已可用。
注意
假设您尝试为非入口 EC2 环境创建 AWS CloudFormation 堆栈,但没有首先创建所需的服务角色和实例配置文件。那么,不会创建堆栈,并显示以下错误消息:
账户中不存在实例配置文件 AWSCloud9SSMInstanceProfile。
首次使用 AWS CloudFormation 创建非入口 EC2 环境时,您可以在模板中将 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 保持最新状态所需的依赖项。
为 Amazon S3 设置 VPC 端点还涉及自定义访问策略。您希望访问策略仅允许访问包含要下载的依赖项的可信 S3 桶。
注意
您可以使用 AWS Management Console、AWS CLI 或 Amazon VPC API 来创建和配置 VPC 终端节点。以下过程说明如何使用控制台界面创建 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 Cloud9 可用的 AWS 区域 的桶名称。
AWS Cloud9 区域的 Amazon 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 存储桶,请在菜单栏选择 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 地址私下访问 Amazon EC2 和 Systems Manager API。要将 VPC 终端节点配置为使用 Systems Manager,请按照此知识中心资源
警告
假设您配置的安全组不允许入站或出站网络流量。然后,支持您的 AWS Cloud9 IDE 的 EC2 实例无法访问互联网。您需要创建一个适用于您的 VPC 的 Amazon S3 端点,以允许访问包含在可信 S3 桶中的依赖项。此外,如果无法访问互联网,一些 AWS 服务(如 AWS Lambda)可能无法按预期工作。
选择 AWS PrivateLink 后,对于通过 VPC 端点处理的每个 GB 都会收取数据处理费用。这与流量的来源或目的地无关。有关更多信息,请参阅AWS PrivateLink 定价