使用 AWS Systems Manager 存取無輸入的 EC2 執行個體 - AWS Cloud9

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 AWS Systems Manager 存取無輸入的 EC2 執行個體

為 EC2 環境建立的「無輸入 EC2 執行個體」可使 AWS Cloud9 與其 Amazon EC2 執行個體連線,無需在該執行個體上開啟任何傳入連接埠。建立 EC2 環境時,您可以使用主控台命令列界面AWS CloudFormation 堆疊選取無輸入選項。

重要

使用 Systems Manager Session Manager 來管理 EC2 執行個體的連線,不需要額外付費。

主控台的 Create environment (建立環境) 頁面選取環境類型時,您可以選擇需要傳入連線的新 EC2 執行個體,或是新的無輸入 EC2 執行個體,其不需要下列項目:

  • New EC2 instance (新的 EC2 執行個體) – 使用此設定時,執行個體的安全群組會有允許傳入聯網流量的規則。傳入網路流量受限於已核准進行 AWS Cloud9 連線的 IP 地址。開放的傳入連接埠可讓 AWS Cloud9 透過 SSH 連線到其執行個體。若您使用 AWS Systems Manager Session Manager,您可以透過 SSM 存取 Amazon EC2 執行個體,而無需開啟傳入連接埠 (無輸入)。此方法僅適用於新的 Amazon EC2 執行個體。如需詳細資訊,請參閱為 EC2 環境使用 Systems Manager 的好處

  • Existing compute (現有運算) – 透過此設定,可存取需要 SSH 登入詳細資訊的現有 Amazon EC2 執行個體,而 Amazon EC2 執行個體必須具有輸入安全群組規則。如果您選取此選項,則會自動建立服務角色。您也可以在設定畫面底部的備註中檢視服務角色名稱。

如果使用 AWS CLI 建立環境,您可以設定無輸入 EC2 執行個體,方法是在呼叫 create-environment-ec2 命令時設定 --connection-type CONNECT_SSM 選項。如需詳細了解如何建立必要的服務角色和執行個體描述檔,請參閱 使用 AWS CLI 管理 Systems Manager 的執行個體描述檔

完成建立使用無輸入 EC2 執行個體的環境之後,請確認下列項目:

為 EC2 環境使用 Systems Manager 的好處

允許 Session Manager 處理 AWS Cloud9 及其 EC2 執行個體之間的安全連線,可帶來兩項關鍵優勢:

  • 不需要為執行個體開啟傳入連接埠

  • 提供在公有或私有子網路中啟動執行個體的選項

No open inbound ports

AWS Cloud9 和其 EC2 執行個體之間的安全連線是由 Session Manager 負責處理。Session Manager 是全受管的 Systems Manager 功能,可讓 AWS Cloud9 無需開啟傳入連接埠即可連線到 EC2 執行個體。

重要

目前只有在建立新的 EC2 環境時,才能使用 Systems Manager 進行無輸入連線的選項。

Session Manager 工作階段啟動後,就會與目標執行個體建立連線。現在連線完成後,環境就可以透過 Systems Manager 服務與執行個體互動。Systems Manager 服務會透過 Systems Manager Agent (SSM Agent) 與執行個體通訊。

根據預設,SSM Agent 會安裝在 EC2 環境使用的所有執行個體上。

Private/public subnets

Network settings (advanced) (網路設定 (進階))區塊中為執行個體選取子網路時,如果您是透過 Systems Manager 存取環境的執行個體,則可以選取私有或公有子網路。

為您的環境選取新的無輸入 EC2 執行個體

私有子網路

對於私有子網路,請確保執行個體仍可連線至 SSM 服務。在公有子網路中設定 NAT 閘道為 Systems Manager 設定 VPC 端點即可確保這個要求。

使用 NAT 閘道的優點在於它可以防止網際網路在私有子網路中啟動與執行個體的連線。您環境的執行個體會獲指派私有 IP 地址,而非公用 IP 地址。因此,NAT 閘道會將流量從執行個體轉送至網際網路或其他 AWS 服務,然後將回應送回執行個體。

對於 VPC 選項,請為 Systems Manager 建立至少三個必要的界面端點com.amazonaws.region.ssmcom.amazonaws.region.ec2messagescom.amazonaws.region.ssmmessages。如需詳細資訊,請參閱 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 主控台中。)

重要

如果您第一次使用 AWS CLI 建立無輸入 EC2 環境,您必須明確定義必要的服務角色和執行個體描述檔。如需詳細資訊,請參閱使用 AWS CLI 管理 Systems Manager 的執行個體描述檔

重要

如果您正在建立AWS Cloud9環境和使用亞馬遜 EC2 系統管理器與AWSCloud9Administrator或者AWSCloud9User附加政策時,您還必須附加具有特定 IAM 許可的自訂政策,請參閱建立 SSM 環境的自訂 IAM 政策。這是由於權限問題AWSCloud9AdministratorAWSCloud9User政策。

為了獲得額外的安全保護,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 時,需在 CONNECT_SSM 設定 --connection-type 選項。

如果您使用此選項,AWSCloud9SSMAccessRole 服務角色和 AWSCloud9SSMInstanceProfile 不會自動建立。因此,若要建立必要的服務設定檔和執行個體設定檔,請執行下列其中一項操作:

  • AWSCloud9SSMAccessRole 服務角色和 AWSCloud9SSMInstanceProfile 自動建立之後使用主控台建立 EC2 環境。環境建立後,服務角色和執行個體描述檔就可以供任何其他透過 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

讓使用者存取由 Session Manager 管理的執行個體

若要透過 Systems Manager 開啟連線到 EC2 執行個體的 AWS Cloud9 環境,使用者必須具有 API 操作 StartSession 的許可。此操作會啟動與受管 EC2 執行個體的連線,執行 Session Manager 工作階段。為使用者提供存取權時,建議您使用 AWS Cloud9 特定的受管政策,或者您也可以編輯 IAM 政策並新增必要的許可。

方法 描述

使用 AWS Cloud9 特定的受管政策

建議您使用 AWS 受管政策來允許使用者存取由 Systems Manager 管理的 EC2 執行個體。受管政策可提供一組適用於標準 AWS Cloud9 使用案例的許可,並且可以輕鬆連接到 IAM 實體。

所有受管政策也都包含執行 StartSession API 操作的許可。以下是 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環境和使用亞馬遜 EC2 系統管理器與AWSCloud9Administrator或者AWSCloud9User附加政策時,您還必須附加具有特定 IAM 許可的自訂政策,請參閱建立 SSM 環境的自訂 IAM 政策。這是由於權限問題AWSCloud9AdministratorAWSCloud9User政策。

如需詳細資訊,請參閱AWS 受管理的政策 AWS Cloud9

編輯 IAM 政策並新增必要政策陳述式

若要編輯現有政策,您可以為 StartSession API 新增許可。若要使用 AWS Management Console 或 AWS CLI 編輯政策,請遵循《IAM 使用者指南》編輯 IAM 政策所提供的指示操作。

編輯政策時,請新增 policy statement (請參閱以下內容) 來允許 ssm:startSession API 操作執行。

您可以使用下列許可來執行 StartSession API 操作。ssm:resourceTag 條件索引鍵會指定 Session Manager 工作階段可由任何執行個體 (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. 為呼叫 AWS CloudFormation 的 IAM 實體更新政策。如此,該實體就能啟動連線到 EC2 執行個體的 Session Manager 工作階段。如需詳細資訊,請參閱將 Systems Manager 許可新增至 IAM 政策

使用 AWS CloudFormation 範本建立服務角色和執行個體描述檔

您需要建立服務角色 AWSCloud9SSMAccessRole 和執行個體描述檔 AWSCloud9SSMInstanceProfile,讓 Systems Manager 能夠管理支援開發環境的 EC2 執行個體。

如果您之前已建立無輸入的 EC2 環境 with the console執行 AWS CLI 命令而建立了 AWSCloud9SSMAccessRoleAWSCloud9SSMInstanceProfile,該服務角色和執行個體設定檔已可供使用。

注意

假設您嘗試為無輸入 EC2 環境建立 AWS CloudFormation 堆疊,但您沒有先建立必要的服務角色和執行個體設定檔。然後,不會建立堆疊,並顯示下列錯誤訊息:

例項設定檔AWSCloud9SSMInstanceProfile帳戶中不存在。

第一次使用 AWS CloudFormation 建立無輸入 EC2 環境時,您可以將 AWSCloud9SSMAccessRoleAWSCloud9SSMInstanceProfile 定義為範本中的 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 實體具有啟動 Session Manager 工作階段的許可。工作階段是指使用 Session Manager 建立的 EC2 執行個體連線。

注意

如果您在為無輸入 EC2 環境建立堆疊之前,並未新增啟動 Session Manager 工作階段的許可,系統就會傳回 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 儲存貯體包含要下載的相依性時,才允許存取該儲存貯體。

注意

您可使用 AWS Management Console、AWS CLI 或 Amazon VPC API 來建立與設定 VPC。下列程序說明如何使用主控台界面來建立 VPC 端點。

為 Amazon S3 建立和設定 VPC 端點

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

  2. 在導覽列中選擇 Endpoints (端點)。

  3. Endpoints (端點) 頁面,選擇 Create Endpoint (建立端點)。

  4. Create Endpoint (建立端點)頁面的搜尋欄位中輸入「s3」,然後按下 Return (傳回) 以列出目前的 AWS 區域中可用的 Amazon S3 的端點。

  5. 從傳回的 Amazon S3 端點清單中,選取 Gateway (閘道) 類型。

  6. 接下來,選擇包含您環境的 EC2 執行個體的 VPC。

  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 元素,以您的 AWS 區域中可用的儲存貯體實際的名稱取代 {bucket_name}。舉例來說,如果您在歐洲 (愛爾蘭) 區域使用 AWS Cloud9,您可指定下列內容:"Resource": "arn:aws:s3:::static-eu-west-1-prod-static-hld3vzaf7c4h/content/dependencies/

    下表列出含有可用 AWS Cloud9 的 AWS 區域中儲存貯體的名稱。

    AWS Cloud9 區域中的 Amazon 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

    亞太區域 (孟買)

    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 儲存貯體,請在選單列上選擇 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 可存取儲存貯體及其相依性。

如需此功能的詳細資訊,請參閱亞馬遜 S3 的端點AWS PrivateLink指南

將 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 定價