使用访问无入口实例 EC2 AWS Systems Manager - AWS Cloud9

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实例的环境后,请确认以下内容:

在EC2环境中使用 Systems Manager 的好处

允许 Session Manager 处理 AWS Cloud9 与其EC2实例之间的安全连接有两个主要好处:

  • 无需为实例打开入站端口

  • 将实例启动到公有子网或私有子网内的选项

No open inbound ports

与其EC2实例 AWS Cloud9 之间的安全连接由会话管理器处理。会话管理器是一项完全托管的 S AWS Cloud9 ystems Manager 功能,无需打开入站端口即可连接到其EC2实例。

重要

目前,只有在创建新EC2环境时,才可以使用使用 Systems Manager 进行无入口连接的选项。

随着会话管理器会话的启动,将建立与目标实例的连接。建立连接后,环境现在可以通过 Systems Manager 服务与实例进行交互。Systems Manager 服务通过 Systems Manager 代理(代SSM理)与实例通信。

默认情况下,SSMAgent 安装在EC2环境使用的所有实例上。

Private/public subnets

当在 Network settings (advanced) 网络设置(高级)部分中为实例选择子网时,如果环境实例通过 Systems Manager 访问,则可以选择私有子网或公有子网。

为您的环境选择一个新的无入口EC2实例

私有子网

对于私有子网,请确保该实例仍然可以连接到SSM服务。这可以通过在公有子NAT网中设置网关或为 S ystems Manager 配置VPC端点来完成。

使用NAT网关的优势在于,它可以防止 Internet 启动与私有子网中实例的连接。为您的环境的实例分配了一个私有 IP 地址,而不是公有 IP 地址。因此,NAT网关会将流量从实例转发到互联网或其他 AWS 服务,然后将响应发送回实例。

对于该VPC选项,请为 Systems Manager 创建至少三个必需的接口终端节点com.amazonaws.region.ssm、com.amazonaws.region.ec2messages 和 com.amazonaws.region. ssmessages。有关更多信息,请参阅《AWS Systems Manager 用户指南》中的 “为 Systems Manager 创建VPC端点”。

重要

目前,如果您的环境EC2实例启动到私有子网中,则无法使用AWS 托管临时证书允许EC2环境代表 AWS 实体(例如IAM用户)访问 AWS 服务。

公有子网

如果您的开发环境使用SSM访问EC2实例,请确保启动实例的公有子网为该实例分配了公有 IP 地址。为此,您可以指定自己的 IP 地址或启用公有 IP 地址的自动分配。有关修改自动分配 IP 设置所涉及的步骤,请参阅 Amazon VPC 用户指南VPC中的您的 IP 地址

有关为环境实例配置私有子网和公有子网的更多信息,请参阅 为创建子网 AWS Cloud9

管理 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 环境并使用附加AWSCloud9AdministratorAWSCloud9User策略的 Amazon S EC2 ystems Manager,则还必须附加具有特定IAM权限的自定义策略,请参阅用于创建SSM环境的自定义IAM策略。这是由于 AWSCloud9AdministratorAWSCloud9User 策略存在权限问题。

为了提供额外的安全保护, 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体。

所有托管策略还包括运行该StartSessionAPI操作的权限。以下是特定于以下各项的托管策略 AWS Cloud9:

  • AWSCloud9Administrator (arn:aws:iam::aws:policy/AWSCloud9Administrator)

  • AWSCloud9User (arn:aws:iam::aws:policy/AWSCloud9User)

  • AWSCloud9EnvironmentMember (arn:aws:iam::aws:policy/AWSCloud9EnvironmentMember)

重要

如果您正在创建 AWS Cloud9 环境并使用附加AWSCloud9AdministratorAWSCloud9User策略的 Amazon S EC2 ystems Manager,则还必须附加具有特定IAM权限的自定义策略,请参阅用于创建SSM环境的自定义IAM策略。这是由于 AWSCloud9AdministratorAWSCloud9User 策略存在权限问题。

有关更多信息,请参阅 AWS 的托管策略 AWS Cloud9

编辑IAM策略并添加所需的策略声明

要编辑现有策略,您可以为添加权限StartSessionAPI。要使用 AWS Management Console 或编辑策略 AWS CLI,请按照《IAM用户指南》编辑IAM策略提供的说明进行操作。

编辑策略时,添加允许ssm:startSessionAPI操作运行的policy statement(参见以下内容)。

您可以使用以下权限来运行该StartSessionAPI操作。ssm:resourceTag条件键指定可以为任何实例 (Resource: arn:aws:ec2:*:*:instance/*) 启动会话管理器会话,前提是该实例是 AWS Cloud9 EC2开发环境 (aws:cloud9:environment)。

注意

以下托管式策略还包括这些策略语句:AWSCloud9AdministratorAWSCloud9UserAWSCloud9EnvironmentMember

{ "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 开发环境时,请在创建堆栈之前执行以下操作:

  1. 创建 AWSCloud9SSMAccessRole 服务角色和 AWSCloud9SSMInstanceProfile 实例配置文件。有关更多信息,请参阅 使用 AWS CloudFormation 模板创建服务角色和实例配置文件

  2. 更新调用IAM实体的政策 AWS CloudFormation。这样,实体就可以启动连接到EC2实例的会话管理器会话。有关更多信息,请参阅 向IAM策略添加 Systems Manager 权限

使用 AWS CloudFormation 模板创建服务角色和实例配置文件

您需要创建服务角色AWSCloud9SSMAccessRole和实例配置文件,AWSCloud9SSMInstanceProfile以使 Systems Manager 能够管理支持您的开发环境的EC2实例。

如果您之前创建AWSCloud9SSMAccessRoleAWSCloud9SSMInstanceProfile通过创建无入口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终端节点

  1. 在中 AWS Management Console,前往 Amazon 的控制台页面VPC。

  2. 在导航窗格中,选择 Endpoints(端点)

  3. Endpoints(端点)页面中,选择 Create Endpoint(创建端点)

  4. Create Endpoint(创建端点)页面中,在搜索字段中输入“s3”,然后按 Return(返回)以列出 Amazon S3 在当前 AWS 区域内可用的端点。

  5. 从返回的 Amazon S3 端点列表中选择 Gateway(网关)类型。

  6. 接下来,选择VPC包含您的环境EC2实例的。

  7. 现在选择VPC的路由表。这样,关联的子网可以访问端点。您的环境EC2实例位于其中一个子网中。

  8. 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

  9. 选择 Create Endpoint(创建端点)。

    如果您提供了正确的配置信息,则会出现一条消息,显示已创建的端点的 ID。

  10. 要检查您是否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 定价