EC2 Instance Connect 설정 - Amazon Elastic Compute Cloud

EC2 Instance Connect 설정

EC2 Instance Connect를 사용하여 인스턴스에 연결하려면 Instance Connect를 사용하여 지원할 모든 인스턴스를 구성해야 하며(각 인스턴스에 대한 일회성 요구 사항), Instance Connect를 사용할 모든 IAM 보안 주체에게 권한을 부여해야 합니다. 다음 설정 작업을 완료한 후 EC2 Instance Connect을(를) 사용하여 인스턴스에 연결할 수 있습니다.

EC2 Instance Connect 설정에 대한 자세한 내용은 Amazon EC2 Instance Connect를 사용하여 Bastion 호스트의 보안 유지를 참조하세요.

제한 사항

  • 다음과 같은 지원되는 Linux 배포판에 EC2 Instance Connect를 설치할 수 있습니다.

    • Amazon Linux 2(모든 버전)

    • Ubuntu 16.04 이상

  • SSH 인증을 위한 AuthorizedKeysCommandAuthorizedKeysCommandUser 설정을 구성했다면 EC2 Instance Connect 설치 시 이들 항목이 업데이트가 되지 않습니다. 따라서 Instance Connect를 사용할 수 없습니다.

EC2 Instance Connect 설치를 위한 사전 조건

  • SSH를 사용하여 인스턴스에 연결하기 위한 일반 사전 조건을 확인합니다.

    자세한 내용은 인스턴스에 연결하기 위한 일반 사전 조건 섹션을 참조하세요.

  • 로컬 컴퓨터에 SSH 클라이언트를 설치합니다.

    로컬 컴퓨터에는 대개 기본적으로 SSH 클라이언트가 설치되어 있습니다. 명령줄에 ssh를 입력하여 SSH 클라이언트가 있는지 확인할 수 있습니다. 로컬 컴퓨터가 명령을 인식하지 않는 경우 SSH 클라이언트를 설치할 수 있습니다. Linux 또는 macOS에 SSH 클라이언트를 설치하는 방법은 http://www.openssh.com을 참조하십시오. Windows 10에 SSH 클라이언트를 설치하는 방법은 OpenSSH in Windows를 참조하십시오.

  • 로컬 컴퓨터에 AWS CLI를 설치합니다.

    IAM 권한을 구성하려면 AWS CLI를 사용해야 합니다. AWS CLI 설치에 대한 자세한 내용은 AWS Command Line Interface 사용 설명서에서 AWS CLI 설치를 참조하세요.

  • [Ubuntu] 인스턴스에 AWS CLI를 설치합니다.

    Ubuntu 인스턴스에 EC2 Instance Connect를 설치하려면 해당 인스턴스에서 AWS CLI를 사용해야 합니다. AWS CLI 설치에 대한 자세한 내용은 AWS Command Line Interface 사용 설명서에서 AWS CLI 설치를 참조하세요.

작업 1: 인스턴스에 대한 네트워크 액세스 구성

사용자가 EC2 Instance Connect를 사용하여 인스턴스에 연결할 수 있도록 다음 네트워크 액세스를 구성해야 합니다.

  • 사용자가 인터넷을 통해 인스턴스에 액세스하는 경우 인스턴스는 퍼블릭 IP 주소를 보유해야 하고 퍼블릭 서브넷에 있어야 합니다. 자세한 내용은 Amazon VPC 사용 설명서인터넷 액세스 활성화를 참조하세요.

  • 사용자가 인스턴스의 프라이빗 IP 주소를 통해 인스턴스에 액세스하는 경우 사용자가 인스턴스의 프라이빗 IP 주소에 도달할 수 있도록 AWS Direct Connect, AWS Site-to-Site VPN 또는 VPC 피어링을 사용하여 VPC에 대한 프라이빗 네트워크 연결을 설정해야 합니다.

  • 인스턴스와 연관된 보안 그룹이 IP 주소 또는 네트워크에서 포트 22를 통한 인바운드 SSH 트래픽을 허용하는지 확인하세요. VPC의 기본 보안 그룹은 기본적으로 수신 SSH 트래픽을 허용하지 않습니다. Launch Wizard가 생성한 보안 그룹은 기본적으로 수신 SSH 트래픽을 허용합니다. 자세한 내용은 Linux 인스턴스의 인바운드 트래픽 권한 부여 섹션을 참조하세요.

  • (Amazon EC2 콘솔 브라우저 기반 클라이언트) 인스턴스와 연결된 보안 그룹이 이 서비스의 IP 주소 범위에서 인바운드 SSH 트래픽을 허용하는지 확인합니다. 주소 범위를 식별하기 위해, AWS에서 제공하는 JSON 파일을 다운로드하고 EC2_INSTANCE_CONNECT를 서비스 값으로 사용하여 EC2 Instance Connect 하위 집합을 필터링합니다. JSON 파일 다운로드 및 서비스별 필터링에 대한 자세한 내용은 Amazon Web Services 일반 참조에서 AWSIP 주소 범위를 참조하세요.

작업 2: (조건부) 인스턴스에 EC2 Instance Connect 설치

다음 AMI 중 하나를 사용하여 인스턴스를 시작한 경우 EC2 Instance Connect가 사전 설치되어 있으므로 이 태스크를 건너뛸 수 있습니다.

  • Amazon Linux 2 2.0.20190618 이상

  • Ubuntu 20.04 이상

이러한 AMI의 이전 버전의 경우 Instance Connect를 사용하여 연결을 지원하는 모든 인스턴스에 Instance Connect를 설치해야 합니다.

Instance Connect를 설치하면 인스턴스에 SSH 데몬이 구성됩니다. Instance Connect 설치 절차는 Amazon Linux 2 및 Ubuntu를 사용하여 시작된 인스턴스에 따라 다릅니다.

Amazon Linux 2

EC2 Instance Connect로 시작된 인스턴스에 Amazon Linux 2를 설치하려면

  1. SSH를 사용하여 인스턴스에 연결합니다.

    인스턴스를 시작할 때 인스턴스에 할당된 SSH 키 페어 및 인스턴스를 시작하는 데 사용한 AMI의 기본 사용자 이름을 사용합니다. Amazon Linux 2의 경우, 기본 사용자 이름은 ec2-user입니다.

    예를 들어 인스턴스가 Amazon Linux 2를 사용하여 시작되었고 인스턴스의 퍼블릭 DNS 이름이 ec2-a-b-c-d.us-west-2.compute.amazonaws.com이고 키 페어가 my_ec2_private_key.pem인 경우 다음 명령을 사용하여 인스턴스에 SSH를 추가합니다.

    $ ssh -i my_ec2_private_key.pem ec2-user@ec2-a-b-c-d.us-west-2.compute.amazonaws.com

    인스턴스 연결에 대한 자세한 내용은 SSH를 사용하여 Linux 인스턴스에 연결 주제를 참조하세요.

  2. 인스턴스에 EC2 Instance Connect 패키지를 설치합니다.

    Amazon Linux 2에서 yum install 명령을 사용합니다.

    [ec2-user ~]$ sudo yum install ec2-instance-connect

    /opt/aws/bin/ 폴더에 4개의 새 스크립트가 표시됩니다.

    eic_curl_authorized_keys eic_harvest_hostkeys eic_parse_authorized_keys eic_run_authorized_keys
  3. (선택 사항) Instance Connect가 인스턴스에 성공적으로 설치되었는지 확인합니다.

    sudo less 명령을 사용하여 /etc/ssh/sshd_config 파일이 다음과 같이 올바르게 업데이트되었는지 확인합니다.

    [ec2-user ~]$ sudo less /etc/ssh/sshd_config

    AuthorizedKeysCommand 파일의 AuthorizedKeysCommandUser/etc/ssh/sshd_config 행에 다음 값이 포함되어 있으면 Instance Connect가 성공적으로 설치된 것입니다.

    AuthorizedKeysCommand /opt/aws/bin/eic_run_authorized_keys %u %f AuthorizedKeysCommandUser ec2-instance-connect
    • AuthorizedKeysCommandeic_run_authorized_keys 스크립트를 설정하여 인스턴스 메타데이터에서 키를 찾습니다

    • AuthorizedKeysCommandUser는 시스템 사용자를 로 설정합니다.ec2-instance-connect

    참고

    이전에 AuthorizedKeysCommandAuthorizedKeysCommandUser를 구성한 경우 Instance Connect 설치가 값을 변경하지 않으며 Instance Connect를 사용할 수 없습니다.

Ubuntu

Ubuntu 16.04 이상으로 시작된 인스턴스에 EC2 Instance Connect를 설치하려면

  1. SSH를 사용하여 인스턴스에 연결합니다.

    인스턴스를 시작할 때 인스턴스에 할당된 SSH 키 페어를 사용하고 인스턴스를 시작하는 데 사용한 AMI의 기본 사용자 이름을 사용합니다. Ubuntu AMI의 경우 사용자 이름은 ubuntu입니다.

    인스턴스가 Ubuntu를 사용하여 시작되었고 인스턴스의 퍼블릭 DNS가 ec2-a-b-c-d.us-west-2.compute.amazonaws.com이고 키 페어가 my_ec2_private_key.pem인 경우 다음 명령을 사용하여 인스턴스에 SSH를 추가합니다.

    $ ssh -i my_ec2_private_key.pem ubuntu@ec2-a-b-c-d.us-west-2.compute.amazonaws.com

    인스턴스 연결에 대한 자세한 내용은 SSH를 사용하여 Linux 인스턴스에 연결 주제를 참조하세요.

  2. (선택 사항) 인스턴스에 최신 Ubuntu AMI가 있는지 확인합니다.

    Ubuntu의 경우 다음 명령을 사용하여 인스턴스의 모든 패키지를 업데이트합니다.

    ubuntu:~$ sudo apt-get update
    ubuntu:~$ sudo apt-get upgrade
  3. 인스턴스에 Instance Connect 패키지를 설치합니다.

    Ubuntu의 경우 sudo apt-get 명령을 사용합니다.

    ubuntu:~$ sudo apt-get install ec2-instance-connect

    /usr/share/ec2-instance-connect/ 폴더에 4개의 새 스크립트가 표시됩니다.

    eic_curl_authorized_keys eic_harvest_hostkeys eic_parse_authorized_keys eic_run_authorized_keys
  4. (선택 사항) Instance Connect가 인스턴스에 성공적으로 설치되었는지 확인합니다.

    sudo less 명령을 사용하여 /lib/systemd/system/ssh.service.d/ec2-instance-connect.conf가 다음과 같이 올바르게 업데이트되었는지 확인합니다.

    ubuntu:~$ sudo less /lib/systemd/system/ssh.service.d/ec2-instance-connect.conf

    AuthorizedKeysCommand 파일의 AuthorizedKeysCommandUser/lib/systemd/system/ssh.service.d/ec2-instance-connect.conf 행에 다음 값이 포함되어 있으면 Instance Connect가 성공적으로 설치된 것입니다.

    AuthorizedKeysCommand /usr/share/ec2-instance-connect/eic_run_authorized_keys %%u %%f AuthorizedKeysCommandUser ec2-instance-connect
    • AuthorizedKeysCommandeic_run_authorized_keys 스크립트를 설정하여 인스턴스 메타데이터에서 키를 찾습니다

    • AuthorizedKeysCommandUser는 시스템 사용자를 로 설정합니다.ec2-instance-connect

    참고

    이전에 AuthorizedKeysCommandAuthorizedKeysCommandUser를 구성한 경우 Instance Connect 설치가 값을 변경하지 않으며 Instance Connect를 사용할 수 없습니다.

EC2 Instance Connect 패키지에 대한 자세한 내용은 GitHub 웹 사이트의 aws/aws-ec2-instance-connect-config를 참조하십시오.

태스크 3: (선택 사항) 컴퓨터에 EC2 Instance Connect CLI 설치

EC2 Instance Connect CLI는 단일 명령인 mssh instance_id를 통해 EC2 인스턴스에 연결할 수 있는 간소화된 환경을 제공합니다. 자세한 내용은 EC2 Instance Connect CLI를 사용하여 연결 섹션을 참조하세요.

참고

사용자가 Amazon EC2 콘솔(브라우저 기반 클라이언트) 또는 SSH 클라이언트만 사용하여 인스턴스에 연결하는 경우, EC2 Instance Connect CLI를 설치할 필요가 없습니다.

EC2 Instance Connect CLI 패키지를 설치하려면

pip를 사용하여 ec2instanceconnectcli 패키지를 설치합니다. 자세한 내용은 GitHub 웹 사이트의 aws/aws-ec2-instance-connect-cli와 Python Package Index(PyPI) 웹 사이트의 https://pypi.org/project/ec2instanceconnectcli/를 참조하십시오.

$ pip install ec2instanceconnectcli

작업 4: EC2 Instance Connect의 IAM 권한 구성

IAM 보안 주체가 EC2 Instance Connect를 사용하여 인스턴스에 연결할 경우 퍼블릭 키를 인스턴스에 푸시하도록 권한을 부여해야 합니다. IAM 정책을 생성하고 권한이 필요한 IAM 보안 주체에게 정책을 연결하여 권한을 부여하세요. 자세한 내용은 Amazon EC2 Instance Connect에 사용되는 작업, 리소스 및 조건 키를 참조하세요.

다음 지침에서는 정책을 생성하고 AWS CLI를 사용하여 IAM 사용자에게 정책을 연결하는 방법을 설명합니다. IAM 역할과 같은 다른 IAM 보안 주체에도 동일한 정책을 적용할 수 있습니다. AWS Management Console 사용 지침은 IAM 사용 설명서에서 IAM 정책 생성(콘솔), 사용자에게 직접 정책을 연결하여 권한을 추가IAM 역할 생성을 참조하세요.

EC2 Instance Connect에 대한 IAM 보안 주체 권한을 부여하려면(AWS CLI)

  1. 다음 사항이 포함된 JSON 정책 문서를 생성합니다.

    • ec2-instance-connect:SendSSHPublicKey 작업 이 작업은 퍼블릭 키를 인스턴스에 푸시할 수 있는 권한을 IAM 보안 주체에게 부여합니다. ec2-instance-connect:SendSSHPublicKey를 사용해 특정 EC2 인스턴스에 대한 액세스 제한을 고려하세요. 그렇지 않을 경우, 이 권한이 있는 모든 IAM 보안 주체가 모든 EC2 인스턴스에 연결할 수 있습니다. 리소스 ARN을 지정하거나 리소스 태그를 조건 키로 사용하여 액세스를 제한할 수도 있습니다.

    • ec2:osuser 조건. 퍼블릭 키를 인스턴스로 푸시할 수 있는 OS 사용자의 이름을 지정합니다. 인스턴스를 시작하는 데 사용한 AMI의 기본 사용자 이름을 사용합니다. Amazon Linux 2의 기본 사용자 이름은 ec2-user이며 Ubuntu의 경우 ubuntu입니다.

    • ec2:DescribeInstances 작업 이 작업은 래퍼가 이 작업을 호출하기 때문에 EC2 Instance Connect CLI를 사용할 때 필요합니다. IAM 보안 주체는 이미 다른 정책에서 이 작업을 호출할 권한을 보유할 수도 있습니다.

    다음은 정책 문서의 예입니다. 사용자가 SSH 클라이언트만을 사용하여 인스턴스에 연결하는 경우 ec2:DescribeInstances 작업의 설명문을 생략할 수 있습니다. EC2 Instance Connect를 사용하는 모든 EC2 인스턴스에 대한 사용자 액세스 권한을 부여하도록 Resource에서 지정된 인스턴스를 와일드카드 *로 바꿀 수 있습니다.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2-instance-connect:SendSSHPublicKey", "Resource": [ "arn:aws:ec2:region:account-id:instance/i-1234567890abcdef0", "arn:aws:ec2:region:account-id:instance/i-0598c7d356eba48d7" ], "Condition": { "StringEquals": { "ec2:osuser": "ami-username" } } }, { "Effect": "Allow", "Action": "ec2:DescribeInstances", "Resource": "*" } ] }

    앞의 정책은 인스턴스 ID로 식별되는 특정 인스턴스에 대한 액세스를 허용합니다. 또는 리소스 태그를 사용하여 인스턴스에 대한 액세스를 제어할 수 있습니다. 속성 기반 액세스 제어는 사용자 및 AWS 리소스에 연결할 수 있는 태그를 기반으로 권한을 정의하는 권한 부여 전략입니다. 예를 들어, 다음 정책은 IAM 사용자가 해당 인스턴스에 리소스 태그 key=tag-key 및 value=tag-value가 있는 경우에만 인스턴스에 액세스할 수 있도록 허용합니다. 태그를 사용하여 AWS 리소스에 대한 액세스를 제어하는 방법에 대한 자세한 내용은 IAM 사용 설명서에서 AWS 리소스에 대한 액세스 제어를 참조하세요.

    { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":"ec2-instance-connect:SendSSHPublicKey", "Resource": "arn:aws:ec2:region:account-id:instance/*", "Condition":{ "StringEquals":{ "aws:ResourceTag/tag-key":"tag-value" } } }, { "Effect": "Allow", "Action": "ec2:DescribeInstances", "Resource": "*" } ] }
  2. create-policy 명령을 사용하여 새 관리형 정책을 생성하고 사용자가 생성한 JSON 문서를 지정하여 새 정책의 콘텐츠로 사용합니다.

    $ aws iam create-policy --policy-name my-policy --policy-document file://JSON-file-name
  3. attach-user-policy 명령을 사용하여 지정된 IAM 사용자에게 관리형 정책을 연결합니다. --user-name 파라미터의 경우 IAM 사용자의 알기 쉬운 이름(ARN 아님)을 지정합니다.

    $ aws iam attach-user-policy --policy-arn arn:aws:iam::account-id:policy/my-policy --user-name IAM-friendly-name