Amazon EC2를 Google SecOps와 통합

이 문서에서는 AWS Elastic Compute Cloud (Amazon EC2)를 Google Security Operations와 통합하는 방법을 설명합니다.

사용 사례

  1. Amazon Elastic Compute Cloud (Amazon EC2) 인스턴스 보안

    1. Amazon EC2에 대한 인바운드 및 아웃바운드 인터넷 액세스를 제한하는 보안 그룹을 만듭니다.
    2. 새 탄력적 IP 주소 할당
    3. 새 탄력적 IP 주소 연결
  2. 리소스 관리 - 인스턴스 맞춤 태그를 사용하여 AWS 리소스를 추적하고 식별합니다.

시작하기 전에

Google SecOps에서 AWS Elastic Compute Cloud (EC2) 통합을 구성하기 전에 네트워크 환경과 AWS 사용자 인증 정보가 모든 운영 기본 요건을 충족하는지 확인하세요.

통합을 위해 환경을 준비하려면 다음을 완료해야 합니다.

  1. Google SecOps와 AWS EC2 리전 서비스 엔드포인트 간의 네트워크 가시성을 확인합니다.

  2. 적절한 IAM 권한이 있는 AWS 프로그래매틱 API 사용자 인증 정보 (액세스 키 ID 및 보안 비밀 액세스 키)를 획득합니다.

  3. Google SecOps 내에서 통합 인스턴스를 구성하고 테스트합니다.

네트워크 요구사항

Google SecOps는 HTTPS REST API와 AWS Python SDK (boto3)를 사용하여 AWS EC2 서비스와 직접 통신합니다.

네트워크 환경이 다음 연결 규칙을 충족하는지 확인하세요.

  • 아웃바운드 HTTPS 액세스: 포트 443/TCP을 통해 Google SecOps 인스턴스 또는 원격 에이전트에서 AWS EC2 리전 엔드포인트 (ec2.<region>.amazonaws.com)로 아웃바운드 HTTPS 통신을 사용 설정합니다.

    자세한 내용은 AWS 문서의 AWS 서비스 엔드포인트를 참고하세요.

  • 프록시 구성: 조직에서 HTTP/HTTPS 프록시를 통해 아웃바운드 트래픽을 라우팅하는 경우 Google SecOps 서버 또는 원격 에이전트 호스트에서 표준 환경 프록시 변수(HTTP_PROXY, HTTPS_PROXY, NO_PROXY)를 구성합니다.

인증 및 사용자 인증 정보

AWS EC2 통합에는 AWS 서명 버전 4를 사용하여 요청을 인증하기 위한 프로그래매틱 API 사용자 인증 정보가 필요합니다.

AWS 환경이 다음 인증 요구사항을 충족하는지 확인합니다.

  • 프로그래매틱 사용자 인증 정보: AWS IAM 사용자 또는 역할과 연결된 유효한 AWS 액세스 키 ID 및 AWS 보안 비밀 키를 획득합니다.

    IAM ID를 만들고 사용자 인증 정보를 생성하는 방법은 AWS 문서의 IAM 사용자의 액세스 키 관리 및 IAM ID를 참고하세요.

  • 최소 권한: 자동화된 워크플로에 필요한 작업 및 컴퓨팅 리소스로만 권한을 제한하고 사용자 인증 정보를 주기적으로 순환합니다.

    보안 권장사항에 관한 자세한 내용은 AWS 문서의 IAM의 보안 권장사항을 참고하세요.

작업 권한 구성

인증된 AWS IAM ID에 Google SecOps 플레이북이 실행하는 작업에 필요한 특정 권한을 부여합니다.

다음 표에서 AWS Elastic Compute Cloud (EC2) 작업에 필요한 최소 권한을 참고하세요.

액션명 필수 AWS IAM 권한 (ActionName:Permission) 필수 권한 설명 / 리소스 범위
보안 그룹 이그레스 승인 ec2:AuthorizeSecurityGroupEgress ec2:DescribeRegions EC2 보안 그룹에 아웃바운드 규칙을 추가합니다. 리소스: 타겟 보안 그룹 ARN입니다.
보안 그룹 인그레스 승인 ec2:AuthorizeSecurityGroupIngress ec2:DescribeRegions EC2 보안 그룹에 인바운드 규칙을 추가합니다. 리소스: 타겟 보안 그룹 ARN입니다.
태그 만들기 ec2:CreateTags ec2:DescribeRegions EC2 리소스에 태그를 추가하거나 덮어씁니다. 리소스: 타겟 EC2 리소스 ARN입니다.
인스턴스 나열 ec2:DescribeInstances ec2:DescribeRegions EC2 인스턴스의 상태와 메타데이터를 가져옵니다. 리소스: *
보안 그룹 나열 ec2:DescribeSecurityGroups — 보안 그룹 구성 및 규칙을 가져옵니다. 리소스: *
Ping ec2:DescribeRegions — 통합 연결을 검증합니다. 리소스: *
보안 그룹 이그레스 취소 ec2:RevokeSecurityGroupEgress ec2:DescribeRegions EC2 보안 그룹에서 아웃바운드 규칙을 삭제합니다. 리소스: 타겟 보안 그룹 ARN입니다.
보안 그룹 인그레스 취소 ec2:RevokeSecurityGroupIngress ec2:DescribeRegions EC2 보안 그룹에서 인바운드 규칙을 삭제합니다. 리소스: 타겟 보안 그룹 ARN입니다.
인스턴스 시작 ec2:StartInstances — 중지된 EC2 인스턴스를 시작합니다. 리소스: 타겟 EC2 인스턴스 ARN입니다.
인스턴스 중지 ec2:StopInstances — 실행 중인 EC2 인스턴스를 중지합니다. 리소스: 타겟 EC2 인스턴스 ARN입니다.
스냅샷 만들기 ec2:CreateSnapshots ec2:DescribeRegions 인스턴스 볼륨의 특정 시점 EBS 스냅샷을 만듭니다. 리소스: 인스턴스 및 볼륨 ARN
인스턴스 종료 ec2:TerminateInstances — EC2 인스턴스를 종료합니다. 리소스: 타겟 EC2 인스턴스 ARN입니다.

빠른 참조 (ActionName:Permission)

다음 빠른 참조를 사용하여 각 작업에 필요한 권한을 검토하세요.

Ping: ec2:DescribeRegions
Authorize Security Group Egress: ec2:AuthorizeSecurityGroupEgress, ec2:DescribeRegions
Authorize Security Group Ingress: ec2:AuthorizeSecurityGroupIngress, ec2:DescribeRegions
Create Tags: ec2:CreateTags, ec2:DescribeRegions
List Instances: ec2:DescribeInstances, ec2:DescribeRegions
List Security Groups: ec2:DescribeSecurityGroups
Revoke Security Group Egress: ec2:RevokeSecurityGroupEgress, ec2:DescribeRegions
Revoke Security Group Ingress: ec2:RevokeSecurityGroupIngress, ec2:DescribeRegions
Start Instance: ec2:StartInstances
Stop Instance: ec2:StopInstances
Take Snapshot: ec2:CreateSnapshots, ec2:DescribeRegions
Terminate Instance: ec2:TerminateInstances

샘플 IAM 정책 (최소 권한)

다음 예시 정책은 Google SecOps에서 모든 AWS EC2 작업을 실행하는 데 필요한 권한을 보여줍니다.

IAM 정책을 만들고 연결하는 방법은 AWS 문서의 IAM 정책 만들기를 참고하세요.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "SecOpsEC2Discovery",
      "Effect": "Allow",
      "Action": [
        "ec2:DescribeRegions",
        "ec2:DescribeInstances",
        "ec2:DescribeSecurityGroups"
      ],
      "Resource": "*"
    },
    {
      "Sid": "SecOpsEC2InstanceRemediation",
      "Effect": "Allow",
      "Action": [
        "ec2:StartInstances",
        "ec2:StopInstances",
        "ec2:TerminateInstances",
        "ec2:CreateTags",
        "ec2:CreateSnapshots"
      ],
      "Resource": "*"
    },
    {
      "Sid": "SecOpsEC2SecurityGroupManagement",
      "Effect": "Allow",
      "Action": [
        "ec2:AuthorizeSecurityGroupIngress",
        "ec2:RevokeSecurityGroupIngress",
        "ec2:AuthorizeSecurityGroupEgress",
        "ec2:RevokeSecurityGroupEgress"
      ],
      "Resource": "arn:aws:ec2:*:*:security-group/*"
    }
  ]
}

통합 매개변수

다음 매개변수를 사용하여 통합을 구성합니다.

매개변수 표시 이름 유형 기본값 필수 항목 설명
AWS 액세스 키 ID 문자열 해당 사항 없음 예 통합에 사용할 AWS 액세스 키 ID입니다.
AWS 보안 비밀 키 비밀번호 해당 사항 없음 예 통합에 사용할 AWS 보안 비밀 키입니다.
AWS 기본 리전 문자열 해당 사항 없음 예 통합에 사용할 AWS 기본 리전입니다(예: us-west-2).

Google SecOps에서 통합을 구성하는 방법에 대한 안내는 통합 구성을 참고하세요.

필요한 경우 이후 단계에서 변경할 수 있습니다. 통합 인스턴스를 구성한 후 플레이북에서 사용할 수 있습니다. 여러 인스턴스를 구성하고 지원하는 방법에 관한 자세한 내용은 여러 인스턴스 지원을 참고하세요.

작업

작업에 대한 자세한 내용은 Workdesk에서 대기 중인 작업에 응답 및 직접 조치 실행을 참고하세요.

보안 그룹 이그레스 승인

VPC와 함께 사용할 보안 그룹에 지정된 이그레스 규칙을 추가합니다. 아웃바운드 규칙을 사용하면 인스턴스가 지정된 IPv4 또는 IPv6 CIDR 주소 범위로 트래픽을 전송할 수 있습니다. 규칙 변경사항은 영향을 받는 인스턴스에 최대한 빨리 전파됩니다. 하지만 약간의 지연이 발생할 수 있습니다.

VPC 보안 그룹 한도에 대한 자세한 내용은 Amazon VPC 한도를 참고하세요.

매개변수

매개변수 표시 이름 유형 기본값 필수 항목 설명
보안 그룹 ID 문자열 해당 사항 없음 예

하나 이상의 보안 그룹 ID입니다. 쉼표로 구분됩니다.

개발자 참고사항: 별도의 요청에 모든 ID

IP 프로토콜 DDL 전체 아니요

IP 프로토콜 이름입니다. 모든 프로토콜을 지정하려면 'all'을 사용합니다. 'all'을 지정하면 지정한 포트 범위와 관계없이 모든 포트의 트래픽이 허용됩니다.

가능한 값: tcp , udp , icmp, all

개발자 참고: 코드에서 'all'은 -1과 같습니다.

발신 포트 정수 아니요 TCP 및 UDP 프로토콜의 포트 범위 시작 또는 ICMP 유형 번호입니다.
수신 포트 정수 아니요 TCP 및 UDP 프로토콜의 포트 범위 끝은 지정한 포트 범위와 관계없이 모든 포트에서 트래픽을 허용합니다.
IP 범위 - CidrIP 문자열 해당 사항 없음 아니요 IPv4 CIDR 범위입니다. 단일 IPv4 주소를 지정하려면 /32 프리픽스 길이를 사용합니다.
IPv6 범위 - CidrIP 문자열 해당 사항 없음 아니요 IPv6 CIDR 범위입니다. 단일 IPv6 주소를 지정하려면 /128 프리픽스 길이를 사용하세요.

실행

이 작업은 항목에서 실행되지 않습니다.

작업 결과

스크립트 결과
스크립트 결과 이름 값 옵션 예
is_success True/False is_success:False
케이스 월
결과 유형 값 / 설명 유형
출력 메시지*

작업이 실패하거나 플레이북 실행을 중지하지 않습니다.

지정된 이그레스 규칙이 하나 이상의 보안 그룹 (또는 모든 보안 그룹)에 추가된 경우(is_success = true): '다음 보안 그룹에 지정된 이그레스 규칙이 추가되었습니다. {group_ids}'

권한 규칙 오류 (잘못된 포트 등)로 인해 지정된 이그레스 규칙을 추가하지 못한 경우(is_success = false): "다음 보안 그룹에 지정된 이그레스 규칙을 추가하지 못했습니다. {group_ids}. 이유: 잘못된 IP 권한이 설정되었습니다. 자세한 내용은 로그를 확인하세요.'

잘못된 보안 그룹 ID로 인해 지정된 이그레스 규칙을 추가할 수 없는 경우(is_success = false): '다음 보안 그룹에 지정된 이그레스 규칙을 추가할 수 없습니다. {group_ids}. 이유: 잘못된 보안 그룹 ID가 제공되었습니다. 자세한 내용은 로그를 확인하세요.``

지정된 이그레스 규칙을 모든 그룹에 추가하지 못한 경우: is_success=false

작업이 실패하고 플레이북 실행을 중지합니다.

잘못된 사용자 인증 정보, 서버 연결 없음, 기타 오류와 같은 치명적인 오류, SDK 오류인 경우: ''보안 그룹 이그레스 승인' 작업을 실행하는 중에 오류가 발생했습니다. 이유: {0}'.format(error.Stacktrace)

일반

보안 그룹 인그레스 승인

지정된 인그레스 규칙을 보안 그룹에 추가합니다. 인바운드 규칙을 사용하면 인스턴스가 지정된 IPv4 또는 IPv6 CIDR 주소 범위에서 트래픽을 수신할 수 있습니다. 규칙 변경사항은 영향을 받는 인스턴스에 최대한 빨리 전파됩니다. 하지만 약간의 지연이 발생할 수 있습니다.

VPC 보안 그룹 한도에 대한 자세한 내용은 Amazon VPC 한도를 참고하세요.

매개변수

매개변수 표시 이름 유형 기본값 필수 항목 설명
보안 그룹 ID 문자열 해당 사항 없음 예

하나 이상의 보안 그룹 ID입니다. 쉼표로 구분됩니다.

개발자 참고사항: 별도의 요청에 모든 ID

IP 프로토콜 DDL 전체 아니요

IP 프로토콜 이름입니다. 모든 프로토콜을 지정하려면 'all'을 사용합니다. 'all'을 지정하면 지정한 포트 범위와 관계없이 모든 포트의 트래픽이 허용됩니다.

가능한 값: tcp , udp , icmp, all

개발자 참고: 코드에서 'all'은 -1과 같습니다.

발신 포트 정수 아니요 TCP 및 UDP 프로토콜의 포트 범위 시작 또는 ICMP 유형 번호입니다.
수신 포트 정수 아니요 TCP 및 UDP 프로토콜의 포트 범위 끝은 지정한 포트 범위와 관계없이 모든 포트에서 트래픽을 허용합니다.
IP 범위 - CidrIP 문자열 해당 사항 없음 아니요 CIDR 형식의 IPv4 주소입니다. 단일 IPv4 주소를 지정하려면 /32 프리픽스 길이를 사용합니다.
IPv6 범위 - CidrIP 문자열 해당 사항 없음 아니요 IPv6 CIDR 범위입니다. 단일 IPv6 주소를 지정하려면 /128 프리픽스 길이를 사용하세요.

실행

이 작업은 항목에서 실행되지 않습니다.

작업 결과

스크립트 결과
스크립트 결과 이름 값 옵션 예
is_success True/False is_success:False
케이스 월
결과 유형 값 / 설명 유형
출력 메시지*

작업이 실패하거나 플레이북 실행을 중지하지 않습니다.

지정된 수신 규칙이 하나 이상의 보안 그룹에 추가된 경우(모두 성공적으로 업데이트된 경우 - is_success = true): '지정된 수신 규칙이 다음 보안 그룹에 추가되었습니다. {group_ids}'

권한 규칙 오류 (잘못된 포트 등)로 인해 지정된 인그레스 규칙을 추가하지 못한 경우(is_success =false): "다음 보안 그룹에 지정된 인그레스 규칙을 추가하지 못했습니다. {group_ids}. 이유: 잘못된 IP 권한이 설정되었습니다. 자세한 내용은 로그를 확인하세요.'

잘못된 보안 그룹 ID로 인해 지정된 인그레스 규칙을 추가할 수 없는 경우(is_success =false): '다음 보안 그룹에 지정된 인그레스 규칙을 추가할 수 없습니다: {group_ids}. 이유: 잘못된 보안 그룹 ID가 제공되었습니다. 자세한 내용은 로그를 확인하세요.``

작업이 실패하고 플레이북 실행을 중지합니다.

잘못된 사용자 인증 정보, 서버 연결 없음, 기타 오류와 같은 치명적인 오류, SDK 오류인 경우: ''보안 그룹 수신 승인' 작업을 실행하는 중에 오류가 발생했습니다. 이유: {0}'.format(error.Stacktrace)

일반

태그 만들기

태그는 AWS 리소스에 할당하는 라벨입니다. 각 태그는 키와 선택적 값으로 구성됩니다. 태그를 사용하여 리소스를 검색 및 필터링하거나 AWS 비용을 추적할 수 있습니다. 지정된 Amazon EC2 리소스에 대해 지정된 태그만 추가하거나 덮어씁니다. 기존 태그 키를 지정하면 값이 새 값으로 덮어쓰여집니다. 각 리소스는 최대 50개의 태그를 가질 수 있습니다. 태그 키는 리소스별로 고유해야 합니다.

태그에 대한 자세한 내용은 Amazon Elastic Compute Cloud 사용자 가이드의 리소스에 태그 지정을 참고하세요.

매개변수

매개변수 표시 이름 유형 기본값 필수 항목 설명
리소스 ID 문자열 해당 사항 없음 예 하나 이상의 리소스 ID입니다. 쉼표로 구분됩니다.
태그 문자열 해당 사항 없음 예

리소스에 할당할 태그의 키-값 조합입니다. 예를 들어 지정된 모든 리소스에 키가 Owner이고 값이 TeamA인 태그를 추가하려면 Owner:TeamA를 지정합니다. 쉼표로 구분하여 여러 키-값 조합을 지정할 수 있습니다.

지정된 태그를 추가하거나 덮어쓸 수 있습니다. 태그 키는 리소스별로 고유해야 합니다.

실행

이 작업은 항목에서 실행되지 않습니다.

작업 결과

스크립트 결과
스크립트 결과 이름 값 옵션 예
is_success True/False is_success:False
케이스 월
결과 유형 값 / 설명 유형
출력 메시지*

작업이 실패하거나 플레이북 실행을 중지하지 않습니다.

성공한 경우: '다음 리소스에 {tags_list} 태그를 추가했습니다. 'resource_ids'

유효하지 않은 리소스 ID의 경우(is_success = false): '다음 리소스({resource_ids})에 {tag_list} 태그를 추가할 수 없습니다. 이유: 리소스 ID가 잘못됨

리소스에 50개가 넘는 태그가 있는 경우 (is_success = false): '다음 리소스에 {tag_list} 태그를 추가할 수 없습니다. {resource_ids}. 이유: 리소스에는 최대 50개의 태그가 있을 수 있습니다.

태그 키가 고유하지 않은 경우(is_success = false): '다음 리소스에 {tag_list} 태그를 추가할 수 없습니다. {resource_ids}. 이유: 태그 키는 리소스별로 고유해야 합니다.

지정된 태그가 잘못된 형식인 경우 (키:값의 전체 구조 없이 키만 또는 값만 있음) (is_success = false): '다음 리소스에 {invalid_tags} 태그를 추가하지 못했습니다. {ids}. 이유: 형식이 잘못되었습니다. 태그에 키와 값이 포함되어야 합니다.

작업이 실패하고 플레이북 실행을 중지합니다.

잘못된 사용자 인증 정보, 서버 연결 없음, 기타 오류와 같은 치명적인 오류, SDK 오류인 경우: ''태그 만들기' 작업을 실행하는 중에 오류가 발생했습니다. 이유: {0}'.format(error.Stacktrace)

일반

인스턴스 나열

지정된 인스턴스 또는 모든 인스턴스를 설명합니다.

매개변수

매개변수 표시 이름 유형 기본값 필수 항목 설명
인스턴스 ID 문자열 해당 사항 없음 아니요 하나 이상의 인스턴스 ID입니다. 인스턴스 ID를 지정하면 지정된 인스턴스의 정보만 출력에 포함됩니다. 이 파라미터는 '최대 결과' 파라미터와 함께 사용할 수 없습니다. '인스턴스 ID'가 '최대 결과' 매개변수보다 우선합니다.
태그 필터 문자열 해당 사항 없음 아니요 리소스에 할당된 태그의 키/값 조합입니다. 예를 들어 키가 Owner이고 값이 TeamA인 태그가 있는 모든 리소스를 찾으려면 Owner:TeamA를 지정합니다. 쉼표로 구분된 태그 필터입니다. 예: Name:Name1,Owner:TeamA 반환된 인스턴스는 모든 필터에 적합합니다.
최대 결과 정수 50 아니요 반환할 인스턴스 수를 지정합니다. 기본값은 50입니다. 최댓값은 1,000입니다. '인스턴스 ID' 매개변수는 '최대 결과' 매개변수와 함께 사용할 수 없습니다. '인스턴스 ID'가 '최대 결과' 매개변수보다 우선합니다.

실행

이 작업은 항목에서 실행되지 않습니다.

작업 결과

스크립트 결과
스크립트 결과 이름 값 옵션 예
is_success True/False is_success:False
JSON 결과
"EC2_Instances": [
    {
   "AmiLaunchIndex":0,
   "ImageId":"ami-047a51fa27710816e",
   "InstanceId":"i-044c08c5bfe1a7f98",
   "InstanceType":"t2.micro",
   "KeyName":"\"Key\": \"Test\", \"Value\":\"Test\"",
   "LaunchTime":"2021-1-30",
   "Monitoring":{
      "State":"disabled"
   },
   "Placement":{
      "AvailabilityZone":"us-east-1d",
      "GroupName":"",
      "Tenancy":"default"
   },
   "PrivateDnsName":"ip-192-0-2-220.ec2.internal",
   "PrivateIpAddress":"192.0.2.220",
   "ProductCodes":[

   ],
   "PublicDnsName":"ec2-192-0-2-218.compute-1.amazonaws.com",
   "PublicIpAddress":"192.0.2.218",
   "State":{
      "Code":16,
      "Name":"running"
   },
   "StateTransitionReason":"",
   "SubnetId":"subnet-1b1fda3a",
   "VpcId":"vpc-ID",
   "Architecture":"x86_64",
   "BlockDeviceMappings":[
      {
         "DeviceName":"/dev/xvda",
         "Ebs":{
            "AttachTime":"2021-1-30",
            "DeleteOnTermination":true,
            "Status":"attached",
            "VolumeId":"vol-00f70681a43e5d86e"
         }
      }
   ],
   "ClientToken":"",
   "EbsOptimized":false,
   "EnaSupport":true,
   "Hypervisor":"xen",
   "NetworkInterfaces":[
      {
         "Association":{
            "IpOwnerId":"amazon",
            "PublicDnsName":"ec2-192-0-2-218.compute-1.amazonaws.com",
            "PublicIp":"192.0.2.218"
         },
         "Attachment":{
            "AttachTime":"",
            "AttachmentId":"eni-attach-06bc5e5901ce99ef2",
            "DeleteOnTermination":true,
            "DeviceIndex":0,
            "Status":"attached",
            "NetworkCardIndex":0
         },
         "Description":"",
         "Groups":[
            {
               "GroupName":"launch-wizard-2",
               "GroupId":"sg-001700ccddac4189a"
            }
         ],
         "Ipv6Addresses":[

         ],
         "MacAddress":"12:34:56:ab:cd:ef",
         "NetworkInterfaceId":"eni-020fa83efd417e32d",
         "OwnerId":"ID",
         "PrivateDnsName":"ip-192-0-2-220.ec2.internal",
         "PrivateIpAddress":"192.0.2.220",
         "PrivateIpAddresses":[
            {
               "Association":{
                  "IpOwnerId":"amazon",
                  "PublicDnsName":"ec2-192-0-2-218.compute-1.amazonaws.com",
                  "PublicIp":"192.0.2.218"
               },
               "Primary":true,
               "PrivateDnsName":"ip-192-0-2-220.ec2.internal",
               "PrivateIpAddress":"192.0.2.220"
            }
         ],
         "SourceDestCheck":true,
         "Status":"in-use",
         "SubnetId":"subnet-1b1fda3a",
         "VpcId":"vpc-ID",
         "InterfaceType":"interface"
      }
   ],
   "RootDeviceName":"/dev/xvda",
   "RootDeviceType":"ebs",
   "SecurityGroups":[
      {
         "GroupName":"launch-wizard-2",
         "GroupId":"sg-001700ccddac4189a"
      }
   ],
   "SourceDestCheck":true,
   "Tags":[
      {
         "Key":"Owner",
         "Value":"Example"
      },
      {
         "Key":"Name",
         "Value":"Example test"
      }
   ],
   "VirtualizationType":"hvm",
   "CpuOptions":{
      "CoreCount":1,
      "ThreadsPerCore":1
   },
   "CapacityReservationSpecification":{
      "CapacityReservationPreference":"open"
   },
   "HibernationOptions":{
      "Configured":false
   },
   "MetadataOptions":{
      "State":"applied",
      "HttpTokens":"optional",
      "HttpPutResponseHopLimit":1,
      "HttpEndpoint":"enabled"
   },
   "EnclaveOptions":{
      "Enabled":false
   }
}
 ]
케이스 월
결과 유형 값 / 설명 유형
출력 메시지*

작업이 실패하거나 플레이북 실행을 중지하지 않습니다.

  • 인스턴스가 성공적으로 나열된 경우(is_success = true): 'Amazon EC2 인스턴스를 설명했습니다.'
  • 사용 가능한 값이 없는 경우(is_success = false): 'Amazon EC2에서 인스턴스를 찾을 수 없습니다.'

작업이 실패하고 플레이북 실행을 중지합니다.

잘못된 사용자 인증 정보, 서버 연결 없음, 기타 오류와 같은 치명적인 오류, 잘못된 인스턴스 ID, SDK 오류인 경우: ''인스턴스 나열' 작업을 실행하는 중에 오류가 발생했습니다. 이유: {0}'.format(error.Stacktrace)

일반
케이스 월 테이블

표 이름: Amazon EC2 인스턴스

테이블 열:

ID

주

유형

가용성 영역

공개 IPv4 DNS

공개 IPv4 주소

모니터링

보안 그룹 이름

키 이름

시작 시간

보안 그룹 나열

지정된 보안 그룹 또는 모든 보안 그룹을 설명합니다. 보안 그룹은 EC2-Classic 플랫폼 또는 특정 VPC의 인스턴스와 함께 사용됩니다.

자세한 내용은 Amazon EC2 보안 그룹을 참고하세요.

매개변수

매개변수 표시 이름 유형 기본값 필수 항목 설명
보안 그룹 이름 문자열 해당 사항 없음 거짓 하나 이상의 보안 그룹 이름[EC2-Classic 및 기본 VPC만 해당] 쉼표로 구분됩니다.보안 그룹 이름을 지정하면 지정된 이름의 정보만 출력에 포함됩니다.
보안 그룹 ID 문자열 해당 사항 없음 거짓 하나 이상의 보안 그룹 ID입니다. 쉼표로 구분됩니다.보안 그룹 ID를 지정하면 출력에 지정된 ID에 대한 정보만 포함됩니다. 기본이 아닌 VPC의 보안 그룹에 필요합니다.
태그 필터 문자열 해당 사항 없음 거짓

보안 그룹에 할당된 태그의 키-값 조합입니다. 예를 들어 키 Owner와 값 TeamA이 포함된 태그가 있는 모든 그룹을 찾으려면 Owner:TeamA를 입력합니다. Name:Name1,Owner:TeamA와 같이 쉼표로 구분된 태그 필터를 사용할 수 있습니다. 반환된 그룹은 모든 필터와 일치해야 합니다.

최대 결과 정수 50 거짓 반환할 보안 그룹의 수입니다. 기본값은 50입니다. 최댓값은 1000입니다. 참고: '보안 그룹 ID' 및 '보안 그룹 이름' 매개변수는 '최대 결과' 매개변수와 함께 사용할 수 없습니다.

실행

이 작업은 항목에서 실행되지 않습니다.

작업 결과

스크립트 결과
스크립트 결과 이름 값 옵션 예
is_success True/False is_success:False
JSON 결과
"EC2_Security_Groups": [
{
   "Description":"launch-wizard-2 created 2021-01-30T19:37:11.523+02:00",
   "GroupName":"launch-wizard-2",
   "IpPermissions":[
      {
         "FromPort":22,
         "IpProtocol":"tcp",
         "IpRanges":[
            {
               "CidrIp":"192.0.2.0/0"
            }
         ],
         "Ipv6Ranges":[

         ],
         "PrefixListIds":[

         ],
         "ToPort":22,
         "UserIdGroupPairs":[

         ]
      }
   ],
   "OwnerId":"582302349248",
   "GroupId":"sg-001700ccddac4189a",
   "IpPermissionsEgress":[
      {
         "IpProtocol":"-1",
         "IpRanges":[
            {
               "CidrIp":"192.0.2.0/0"
            }
         ],
         "Ipv6Ranges":[

         ],
         "PrefixListIds":[

         ],
         "UserIdGroupPairs":[

         ]
      }
   ],
   "Tags":[
      {
         "Key":"Team",
         "Value":"A-Team"
      },
      {
         "Key":"Owner",
         "Value":"Example"
      }
   ],
   "VpcId":"vpc-ID"
}
]
케이스 월
결과 유형 값 / 설명 유형
출력 메시지*

작업이 실패하거나 플레이북 실행을 중지하지 않습니다.

  • 그룹이 성공적으로 나열된 경우(is_success = true): 'Amazon EC2 보안 그룹을 설명했습니다.'
  • 사용 가능한 값이 없는 경우(is_success = false): 'Amazon EC2에서 보안 그룹을 찾을 수 없습니다.'

작업이 실패하고 플레이북 실행을 중지합니다.

잘못된 사용자 인증 정보, 서버 연결 없음, 기타 오류와 같은 치명적인 오류, 잘못된 그룹 ID/이름, SDK 오류: ''보안 그룹 나열' 작업을 실행하는 중에 오류가 발생했습니다. 이유: {0}'.format(error.Stacktrace)

일반
케이스 월 테이블

표 이름: Amazon EC2 인스턴스

테이블 열:

보안 그룹 ID

보안 그룹 이름

VPC ID

설명

소유자 ID

핑

AWS EC2에 대한 연결을 테스트합니다.

매개변수

해당 사항 없음

실행

이 작업은 항목에서 실행되지 않습니다.

작업 결과

스크립트 결과
스크립트 결과 이름 값 옵션 예
is_success True/False is_success:False
케이스 월
결과 유형 값 / 설명 유형
출력 메시지*

작업이 실패하거나 플레이북 실행을 중지하지 않습니다.

성공한 경우: '제공된 연결 매개변수를 사용하여 Amazon EC2에 연결되었습니다.'

작업이 실패하고 플레이북 실행을 중지합니다.

실패한 경우: 'Amazon EC2 서버에 연결할 수 없습니다. 오류: {0}".format(exception.stacktrace)

일반

보안 그룹 이그레스 취소

EC2-VPC의 보안 그룹에서 지정된 이그레스 규칙 (아웃바운드 규칙)을 삭제합니다. 이 작업은 EC2-Classic에서 사용할 보안 그룹에는 적용되지 않습니다. 규칙을 삭제하려면 지정한 값 (예: 포트)이 기존 규칙의 값과 정확히 일치해야 합니다. 규칙 변경사항은 보안 그룹 내 인스턴스에 최대한 빨리 전파됩니다. 하지만 약간의 지연이 발생할 수 있습니다.

매개변수

매개변수 표시 이름 유형 기본값 필수 항목 설명
보안 그룹 ID 문자열 해당 사항 없음 예

하나 이상의 보안 그룹 ID입니다. 쉼표로 구분됩니다.

개발자 참고사항: 별도의 요청에 모든 ID

IP 프로토콜 DDL 전체 아니요

IP 프로토콜 이름입니다. 모든 프로토콜을 지정하려면 'all'을 사용합니다. 'all'을 지정하면 지정한 포트 범위와 관계없이 모든 포트의 트래픽이 허용됩니다.

가능한 값: tcp , udp , icmp, all

개발자 참고: 코드에서 'all'은 -1과 같습니다.

발신 포트 정수 아니요 TCP 및 UDP 프로토콜의 포트 범위 시작 또는 ICMP 유형 번호입니다.
수신 포트 정수 아니요 TCP 및 UDP 프로토콜의 포트 범위 끝은 지정한 포트 범위와 관계없이 모든 포트에서 트래픽을 허용합니다.
IP 범위 - CidrIP 문자열 해당 사항 없음 아니요 CIDR 형식의 IPv4 주소입니다. 단일 IPv4 주소를 지정하려면 /32 프리픽스 길이를 사용합니다.
IPv6 범위 - CidrIP 문자열 해당 사항 없음 아니요 IPv6 CIDR 범위입니다. 단일 IPv6 주소를 지정하려면 /128 프리픽스 길이를 사용하세요.

실행

이 작업은 항목에서 실행되지 않습니다.

작업 결과

스크립트 결과
스크립트 결과 이름 값 옵션 예
is_success True/False is_success:False
케이스 월
결과 유형 값 / 설명 유형
출력 메시지*

작업이 실패하거나 플레이북 실행을 중지하지 않습니다.

하나 이상의 (또는 모든) 보안 그룹에서 지정된 이그레스 규칙이 성공적으로 취소된 경우(is_success = true): '다음 보안 그룹에서 지정된 이그레스 규칙이 취소되었습니다: {group_ids}'

권한 규칙 오류 (포트가 205 등으로 잘못됨)로 인해 지정된 이그레스 규칙을 취소할 수 없는 경우(is_success =false): '다음 보안 그룹에서 지정된 이그레스 규칙을 취소할 수 없습니다. {group_ids}. 이유: 잘못된 IP 권한이 설정되었습니다. 자세한 내용은 로그를 확인하세요.'

잘못된 보안 그룹 ID로 인해 지정된 이그레스 규칙을 취소하지 못한 경우(is_success =false): '다음 보안 그룹에서 지정된 이그레스 규칙을 취소하지 못했습니다. {group_ids}. 이유: 잘못된 보안 그룹 ID가 제공되었습니다. 자세한 내용은 로그를 확인하세요.``

작업이 실패하고 플레이북 실행을 중지합니다.

잘못된 사용자 인증 정보, 서버 연결 없음, 기타 오류와 같은 치명적인 오류, SDK 오류인 경우: ''보안 그룹 아웃바운드 트래픽 취소' 작업을 실행하는 중에 오류가 발생했습니다. 이유: {0}'.format(error.Stacktrace)

Gener

보안 그룹 인그레스 취소

보안 그룹에서 지정된 인그레스 규칙 (인바운드 규칙)을 삭제합니다. 규칙을 삭제하려면 지정한 값 (예: 포트)이 기존 규칙의 값과 정확히 일치해야 합니다. 규칙 변경사항은 보안 그룹 내 인스턴스에 최대한 빨리 전파됩니다. 하지만 약간의 지연이 발생할 수 있습니다.

매개변수

매개변수 표시 이름 유형 기본값 필수 항목 설명
보안 그룹 ID 문자열 해당 사항 없음 예

하나 이상의 보안 그룹 ID입니다. 쉼표로 구분됩니다.

개발자 참고사항: 별도의 요청에 모든 ID

IP 프로토콜 DDL 전체 아니요

IP 프로토콜 이름입니다. 모든 프로토콜을 지정하려면 'all'을 사용합니다. 'all'을 지정하면 지정한 포트 범위와 관계없이 모든 포트의 트래픽이 허용됩니다.

가능한 값: tcp , udp , icmp, all

개발자 참고: 코드에서 'all'은 -1과 같습니다.

발신 포트 정수 아니요 TCP 및 UDP 프로토콜의 포트 범위 시작 또는 ICMP 유형 번호입니다.
수신 포트 정수 아니요 TCP 및 UDP 프로토콜의 포트 범위 끝은 지정한 포트 범위와 관계없이 모든 포트에서 트래픽을 허용합니다.
IP 범위 - CidrIP 문자열 해당 사항 없음 아니요 CIDR 형식의 IPv4 주소입니다. 단일 IPv4 주소를 지정하려면 /32 프리픽스 길이를 사용합니다.
IPv6 범위 - CidrIP 문자열 해당 사항 없음 아니요 IPv6 CIDR 범위입니다. 단일 IPv6 주소를 지정하려면 /128 프리픽스 길이를 사용하세요.

실행

이 작업은 항목에서 실행되지 않습니다.

작업 결과

스크립트 결과
스크립트 결과 이름 값 옵션 예
is_success True/False is_success:False
케이스 월
결과 유형 값 / 설명 유형
출력 메시지*

작업이 실패하거나 플레이북 실행을 중지하지 않습니다.

하나 이상의 (또는 모든) 보안 그룹에서 지정된 수신 규칙을 성공적으로 취소한 경우(is_success = true): '다음 보안 그룹에서 지정된 수신 규칙을 취소했습니다: {group_ids}'

권한 규칙 오류(잘못된 포트(205 등))로 인해 지정된 인그레스 규칙을 취소하지 못한 경우(is_success =false): '다음 보안 그룹에서 지정된 인그레스 규칙을 취소하지 못했습니다. {group_ids}. 이유: 잘못된 IP 권한이 설정되었습니다. 자세한 내용은 로그를 확인하세요.'

보안 그룹 ID가 잘못되어 지정된 수신 규칙을 취소할 수 없는 경우(is_success =false): '다음 보안 그룹에서 지정된 수신 규칙을 취소할 수 없습니다: {group_ids}. 이유: 잘못된 보안 그룹 ID가 제공되었습니다. 자세한 내용은 로그를 확인하세요.``

작업이 실패하고 플레이북 실행을 중지합니다.

잘못된 사용자 인증 정보, 서버 연결 없음, 기타 오류와 같은 치명적인 오류, SDK 오류인 경우: ''보안 그룹 인그레스 취소' 작업을 실행하는 중에 오류가 발생했습니다. 이유: {0}'.format(error.Stacktrace)

일반

인스턴스 시작

이전에 중지한 Amazon Elastic Block Store (Amazon EBS) 지원 인스턴스를 시작합니다. 인스턴스가 실행 상태가 되는 데 몇 분 정도 걸릴 수 있습니다. 인스턴스 스토어 지원 인스턴스는 시작할 수 없습니다. 인스턴스 스토어 지원 인스턴스에 대한 자세한 내용은 루트 기기용 스토리지를 참고하세요.

매개변수

매개변수 표시 이름 유형 기본값 필수 항목 설명
인스턴스 ID 문자열 해당 사항 없음 예 하나 이상의 인스턴스 ID입니다. 쉼표로 구분

실행

이 작업은 항목에서 실행되지 않습니다.

작업 결과

스크립트 결과
스크립트 결과 이름 값 옵션 예
is_success True/False is_success:False
JSON 결과
[
  {
      "CurrentState": "pending",
        "InstanceId": "string",
        "PreviousState":"stopped"
    }
]
케이스 월
결과 유형 값 / 설명 유형
출력 메시지*

작업이 실패하거나 플레이북 실행을 중지하지 않습니다.

  • 모든 인스턴스 또는 일부 인스턴스의 현재 상태가 대기, 실행과 다른 경우(is_success = false): 현재 상태에서 다음 인스턴스를 시작할 수 없습니다. <failed_instance ids>
  • 현재 상태가 대기 중인 경우 → 작업이 아직 진행 중임: 계속….요청된 인스턴스가 아직 대기 중입니다.
  • 현재 상태가 실행 중인 경우(is_success=true): 다음 인스턴스가 성공적으로 시작되었습니다: <running_instance ids>
  • 인스턴스 중 하나가 유효하지 않은 경우 (is_success =false): 다음 인스턴스가 유효하지 않습니다. <유효하지 않은 ID>. 다시 시도하세요.

작업이 실패하고 플레이북 실행을 중지합니다.

잘못된 사용자 인증 정보, 서버 연결 없음, 기타 오류와 같은 치명적인 오류, SDK 오류인 경우: ''인스턴스 시작' 작업을 실행하는 중에 오류가 발생했습니다. 이유: {0}'.format(error.Stacktrace)

일반

인스턴스 중지

Amazon EBS 지원 인스턴스를 중지합니다. 인스턴스를 중지하면 시스템은 잠시 지연된 후 강제로 종료하려고 시도합니다. 인스턴스가 중지되는 데 몇 분 정도 걸릴 수 있습니다. 언제든지 인스턴스를 다시 시작할 수 있습니다. 인스턴스 스토어 지원 인스턴스는 중지할 수 없습니다. 대신 종료해야 합니다. 인스턴스 스토어 지원 인스턴스에 대한 자세한 내용은 https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ComponentsAMIs.html#storage-for-the-root-device를 참고하세요.

매개변수

매개변수 표시 이름 유형 기본값 필수 항목 설명
인스턴스 ID 문자열 해당 사항 없음 예 인스턴스 ID의 쉼표로 구분된 목록입니다.
강제 Bool 해당 사항 없음 아니요 선택하면 이 작업은 단계적 종료를 수행하지 않고 (강제) 파일 시스템 캐시나 메타데이터를 플러시하지 않고 인스턴스를 즉시 중지합니다. 이 프로세스에서는 인스턴스가 작업을 재개하기 전에 필수 파일 시스템 검사 및 복구 절차가 필요합니다. Windows 인스턴스에는 권장되지 않습니다.

기본적으로 사용 설정되어 있지 않습니다.

실행

이 작업은 항목에서 실행되지 않습니다.

스냅샷 촬영

인스턴스의 스냅샷을 가져옵니다.

매개변수

매개변수 표시 이름 유형 기본값 필수 항목 설명
인스턴스 ID 문자열 해당 사항 없음 예 인스턴스 ID를 지정합니다.
설명 문자열 해당 사항 없음 아니요 스냅샷의 설명을 지정합니다.

실행

이 작업은 항목에서 실행되지 않습니다.

작업 결과

스크립트 결과
스크립트 결과 이름 값 옵션 예
is_success True/False is_success:False
JSON 결과
{
  "EC2_Snapshot": [
    {
      "Description": "",
      "Tags": [],
      "Encrypted": false,
      "VolumeId": "vol-ID",
      "State": "pending",
      "VolumeSize": 8,
      "StartTime": "2022-11-13 15:45:44.795000+00:00",
      "Progress": "",
      "OwnerId": "OWNER_ID",
      "SnapshotId": "snap-ID"
    }
  ]
}

인스턴스 종료

인스턴스를 종료합니다.

종료된 인스턴스는 다시 시작할 수 없습니다. 인스턴스 스토어 지원 인스턴스만 종료할 수 있습니다. 인스턴스 스토어 지원 인스턴스에 대한 자세한 내용은 루트 기기용 스토리지를 참고하세요.

인스턴스를 두 번 이상 종료하면 모든 호출이 성공합니다. 인스턴스를 여러 개 지정했는데 요청이 실패하면 (예: 잘못된 인스턴스 ID가 하나 있기 때문) 인스턴스가 종료되지 않습니다.

종료된 인스턴스는 종료 후에도 약 1시간 동안 표시됩니다. 기본적으로 Amazon EC2는 인스턴스가 시작될 때 연결된 모든 EBS 볼륨을 삭제합니다. 인스턴스 시작 후에 연결된 볼륨은 계속 실행됩니다. 자세한 내용은 Amazon 사용자 가이드를 참고하세요.

매개변수

매개변수 표시 이름 유형 기본값 필수 항목 설명
인스턴스 ID 문자열 해당 사항 없음 예 하나 이상의 인스턴스 ID입니다. 쉼표로 구분됩니다.

실행

이 작업은 항목에서 실행되지 않습니다.

작업 결과

스크립트 결과
스크립트 결과 이름 값 옵션 예
is_success True/False is_success:False
JSON 결과
"StoppingInstances": [
      {
      "CurrentState": "shutting-down",
        "InstanceId": "string",
        "PreviousState":"running"
      }
   ]
케이스 월
결과 유형 값 / 설명 유형
출력 메시지*

작업이 실패하거나 플레이북 실행을 중지하지 않습니다.

  • 모든/일부 인스턴스의 현재 상태가 종료, 종료와 다른 경우(is_success = false): 현재 상태에서 다음 인스턴스를 종료할 수 없습니다. <failed_instance ids>
  • 현재 상태가 종료 중인 경우(is_success=true) → 작업이 아직 진행 중인 경우: 요청된 인스턴스가 아직 종료 중입니다.
  • 현재 상태가 종료된 경우(is_success=true): 다음 인스턴스가 성공적으로 종료되었습니다. <stopped_instance ids>
  • 인스턴스 중 하나가 유효하지 않은 경우 (is_success =false): 다음 인스턴스가 유효하지 않습니다. <유효하지 않은 ID>. 다시 시도하세요.

작업이 실패하고 플레이북 실행을 중지합니다.

잘못된 사용자 인증 정보, 서버 연결 없음, 기타 오류와 같은 치명적인 오류, SDK 오류인 경우: ''인스턴스 종료' 작업을 실행하는 중에 오류가 발생했습니다. 이유: {0}'.format(error.Stacktrace)

일반

도움이 더 필요하신가요? 커뮤니티 회원 및 Google SecOps 전문가에게 문의하여 답변을 받으세요.