VM에서 SSH 키 제한


이 문서에서는 VM에서 SSH 키를 삭제하고 차단하여 사용자가 가상 머신(VM) 인스턴스에 액세스하지 못하도록 하는 방법을 설명합니다.

시작하기 전에

  • 아직 인증을 설정하지 않았다면 설정합니다. 인증은 Google Cloud 서비스 및 API에 액세스하기 위해 ID를 확인하는 프로세스입니다. 로컬 개발 환경에서 코드 또는 샘플을 실행하려면 다음과 같이 Compute Engine에 인증하면 됩니다.

    이 페이지의 샘플 사용 방법에 대한 탭을 선택하세요.

    콘솔

    Google Cloud 콘솔을 사용하여 Google Cloud 서비스 및 API에 액세스할 때는 인증을 설정할 필요가 없습니다.

    gcloud

    1. Google Cloud CLI를 설치한 후 다음 명령어를 실행하여 초기화합니다.

      gcloud init
    2. 기본 리전 및 영역을 설정합니다.

    REST

    로컬 개발 환경에서 이 페이지의 REST API 샘플을 사용하려면 gcloud CLI에 제공한 사용자 인증 정보를 사용합니다.

      Google Cloud CLI를 설치한 후 다음 명령어를 실행하여 초기화합니다.

      gcloud init

SSH 키 삭제

OS 로그인을 사용하는 VM메타데이터 기반 SSH 키를 사용하는 VM에서 SSH 키를 삭제할 수 있습니다.

OS 로그인을 사용하는 VM에서 SSH 키 삭제

OS 로그인을 사용하는 VM은 Google 계정과 연결된 SSH 키를 허용합니다. Google Cloud CLI 또는 OS Login API를 사용하여 사용자 계정에서 공개 SSH 키를 삭제할 수 있습니다. 조직 관리자는 Directory API를 사용하여 사용자 계정에서 SSH 키를 삭제할 수 있습니다. Compute Engine은 Google 계정에서 만료된 키를 자동으로 제거합니다.

gcloud

계정에서 공개 SSH 키를 삭제하려면 다음 안내를 따르세요.

  1. 삭제할 키를 모르는 경우 gcloud compute os-login describe-profile 명령어를 실행하여 계정과 연결된 모든 키를 확인합니다.

    gcloud compute os-login describe-profile
    
  2. 삭제할 키의 fingerprint 값을 복사합니다.

  3. gcloud compute os-login ssh-keys remove 명령어를 사용하여 계정에서 키를 삭제합니다.

    gcloud compute os-login ssh-keys remove --key=KEY
    

    KEY를 삭제할 공개 SSH 키 또는 삭제하려는 키의 OS 로그인 디지털 지문으로 바꿉니다.

REST

계정에서 공개 SSH 키를 삭제하려면 다음 안내를 따르세요.

  1. 삭제할 키를 모르는 경우 users.getLoginProfile 메서드를 사용하여 계정과 연결된 모든 키를 확인합니다.

    GET https://oslogin.googleapis.com/v1/users/ACCOUNT_EMAIL/loginProfile
    

    ACCOUNT_EMAIL을 계정과 연결된 이메일 주소로 바꿉니다.

  2. 삭제할 키의 fingerprint 값을 복사합니다.

  3. users.sshPublicKeys.delete 메서드를 사용하여 계정에서 키를 삭제합니다.

    DELETE https://oslogin.googleapis.com/v1/users/ACCOUNT_EMAIL/sshPublicKeys/FINGERPRINT
    

    다음을 바꿉니다.

    • ACCOUNT_EMAIL: 내 계정과 관련된 이메일 주소입니다.
    • FINGERPRINT: 삭제할 키의 SHA-256 디지털 지문입니다.

메타데이터 기반 키를 사용하는 VM에서 SSH 키 삭제

Google Cloud 콘솔, gcloud CLI 또는 Compute Engine API를 사용하여 프로젝트 또는 인스턴스 메타데이터에서 공개 SSH 키를 삭제할 수 있습니다.

특정 사용자의 메타데이터에서 마지막 키를 삭제하거나 특정 사용자의 메타데이터에서 마지막 키가 만료되면 Compute Engine은 VM에서 사용자의 ~/.ssh/authorized_keys 파일을 삭제합니다.

주의: 메타데이터에서 SSH 키를 관리하는 경우 프로젝트 구성원이 VM에 연결하지 못하게 될 수 있습니다. 또한 프로젝트 외부의 사용자를 포함한 사용자에게 VM에 대한 의도하지 않은 액세스 권한을 부여할 위험이 있습니다. 자세한 내용은 수동 키 관리 위험을 참조하세요.

프로젝트 메타데이터에서 공개 키 삭제

프로젝트의 모든 VM에 대한 액세스 권한을 삭제하려면 프로젝트 메타데이터에서 공개 SSH 키를 삭제하세요.

gcloud CLI 및 Compute Engine API를 사용하여 메타데이터에서 키를 삭제할 때는 다음 섹션에 설명된 대로 기존 키 목록을 검색하고, 키 목록을 수정하여 원치 않는 키를 삭제하고, 보관하려는 키 목록으로 이전 키를 덮어써야 합니다.

Console

Google Cloud Console을 사용하여 프로젝트 메타데이터에서 공개 SSH 키를 삭제하려면 다음 안내를 따르세요.

  1. Google Cloud Console에서 메타데이터 페이지로 이동합니다.

    메타데이터로 이동

  2. SSH 키 탭을 클릭합니다.

  3. 페이지 상단에 있는 수정을 클릭합니다.

  4. 삭제하려는 SSH 키로 이동하고 SSH 키 옆에 있는 삭제 버튼을 클릭합니다.

    PuTTYgen 공개 키입니다.

    삭제하려는 SSH 키마다 이 단계를 반복합니다.

  5. 저장을 클릭합니다.

gcloud

gcloud CLI를 사용하여 프로젝트 메타데이터에서 공개 SSH 키를 삭제하려면 다음 안내를 따르세요.

  1. gcloud compute project-info describe 명령어를 실행하여 프로젝트의 메타데이터를 가져옵니다.

    gcloud compute project-info describe
    

    출력은 다음과 비슷합니다.

    ...
    metadata:
      ...
      - key: ssh-keys
        value: |-
          cloudysanfrancisco:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF
          baklavainthebalkans:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDQDx3FNVC8 google-ssh {"userName":"baklavainthebalkans","expireOn":"2021-06-14T16:59:03+0000"}
    ...
    
  2. ssh-keys 메타데이터 값을 복사합니다.

  3. 워크스테이션에서 새 텍스트 파일을 만들고 엽니다.

  4. 파일에서 방금 복사한 SSH 키 목록을 붙여넣은 다음 프로젝트 메타데이터에서 삭제할 키를 삭제합니다.

  5. 저장하고 파일을 닫습니다.

  6. gcloud compute project-info add-metadata 명령어를 실행하여 프로젝트 전체 ssh-keys 값을 설정합니다.

    gcloud compute project-info add-metadata --metadata-from-file=ssh-keys=KEY_FILE
    

    KEY_FILE를 다음 중 하나로 바꿉니다.

    • 프로젝트에 기존 SSH 키가 있는 경우 이전 단계에서 만든 파일의 경로
    • 프로젝트에 기존 SSH 키가 없는 경우 새 공개 SSH 키 파일의 경로

REST

Compute Engine API를 사용하여 프로젝트 메타데이터에서 공개 SSH 키를 삭제하려면 다음 안내를 따르세요.

  1. projects.get 메서드를 사용하여 메타데이터에서 fingerprintssh-keys 값을 가져옵니다.

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID
    

    PROJECT_ID를 프로젝트 ID로 바꿉니다.

    응답은 다음 예시와 유사합니다.

    ...
    "fingerprint": "utgYE_XWtE8=",
    "items": [
     {
      "key": "ssh-keys",
      "value": "cloudysanfrancisco:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF\nbaklavainthebalkans:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDQDx3FNVC8 google-ssh {"userName":"baklavainthebalkans","expireOn":"2021-06-14T16:59:03+0000"}"
     }
    ]
    ...
    
  2. SSH 키 값 목록을 복사하고 삭제할 키를 삭제합니다.

  3. projects.setCommonInstanceMetadata를 사용하여 SSH 키를 삭제합니다.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/setCommonInstanceMetadata
    
    {
    "items": [
     {
      "key": "ssh-keys",
      "value": "EXISTING_SSH_KEYS"
     }
    ]
    "fingerprint": "FINGERPRINT"
    }
    

    다음을 바꿉니다.

    • PROJECT_ID: 프로젝트 ID입니다.
    • EXISTING_SSH_KEYS: 보관할 SSH 키 목록입니다.
    • FINGERPRINT: projects.get 요청 응답의 fingerprint 값입니다.

인스턴스 메타데이터에서 공개 SSH 키 삭제

인스턴스 메타데이터에서 공개 SSH 키를 삭제하여 단일 VM에 대한 액세스를 삭제합니다.

gcloud CLI 및 Compute Engine API를 사용하여 메타데이터에서 키를 삭제할 때는 다음 섹션에 설명된 대로 기존 키 목록을 검색하고, 키 목록을 수정하여 원치 않는 키를 삭제하고, 보관하려는 키 목록으로 이전 키를 덮어써야 합니다.

Console

Google Cloud Console을 사용하여 인스턴스 메타데이터에서 공개 SSH 키를 삭제하려면 다음 안내를 따르세요.

  1. Google Cloud Console에서 메타데이터 페이지로 이동합니다.

    메타데이터로 이동

  2. 키를 삭제할 VM의 이름을 클릭합니다.

  3. 수정을 클릭합니다.

  4. 가운데 창의 SSH 키 아래에서 표시 및 수정을 클릭합니다. 섹션이 확장되어 모든 인스턴스 수준의 공개 SSH 키가 표시됩니다.

  5. 삭제할 키 옆에 있는 삭제 버튼을 클릭합니다.

    PuTTYgen 공개 키입니다.

  6. 저장을 클릭합니다.

gcloud

gcloud CLI를 사용하여 인스턴스 메타데이터에서 공개 SSH 키를 삭제하려면 다음 안내를 따르세요.

  1. gcloud compute instances describe 명령어를 실행하여 VM의 메타데이터를 가져옵니다.

    gcloud compute instances describe VM_NAME
    

    VM_NAME을 공개 SSH 키를 추가하거나 삭제해야 하는 VM의 이름으로 바꿉니다.

    출력은 다음과 비슷합니다.

    ...
    metadata:
    ...
    - key: ssh-keys
     value: |-
       cloudysanfrancisco:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF
       baklavainthebalkans:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDQDx3FNVC8 google-ssh {"userName":"baklavainthebalkans","expireOn":"2021-06-14T16:59:03+0000"}
    ...
    
  2. ssh-keys 메타데이터 값을 복사합니다.

  3. 로컬 워크스테이션에서 새 텍스트 파일을 만들고 엽니다.

  4. 파일에서 방금 복사한 SSH 키 목록을 붙여넣은 다음 삭제할 키를 삭제합니다.

  5. 저장하고 파일을 닫습니다.

  6. gcloud compute project-info add-metadata 명령어를 실행하여 프로젝트 전체 ssh-keys 값을 설정합니다.

    gcloud compute instances add-metadata VM_NAME --metadata-from-file ssh-keys=KEY_FILE
    

    다음을 바꿉니다.

    • VM_NAME: SSH 키를 삭제하려는 VM
    • KEY_FILE: 모든 프로젝트 SSH 키 목록이 포함된 파일의 경로

REST

Compute Engine API를 사용하여 인스턴스 메타데이터에서 공개 SSH 키를 삭제하려면 다음 안내를 따르세요.

  1. instances.get 메서드를 사용하여 메타데이터에서 fingerprintssh-keys 값을 가져옵니다.

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME
    

    다음을 바꿉니다.

    • PROJECT_ID: 프로젝트 ID입니다.
    • ZONE: SSH 키를 추가할 VM의 영역입니다.
    • VM_NAME: SSH 키를 추가할 VM입니다.

    응답은 다음 예시와 유사합니다.

    ...
    "fingerprint": "utgYE_XWtE8=",
    "items": [
    {
     "key": "ssh-keys",
     "value": "cloudysanfrancisco:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF\nbaklavainthebalkans:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDQDx3FNVC8 google-ssh {"userName":"baklavainthebalkans","expireOn":"2021-06-14T16:59:03+0000"}"
    }
    ]
    ...
    
  2. SSH 키 값 목록을 복사하고 삭제할 키를 삭제합니다.

  3. instances.setMetadata를 사용하여 SSH 키를 삭제합니다.

    
    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setMetadata
    
    {
    "items": [
     {
      "key": "ssh-keys",
      "value": "EXISTING_SSH_KEYS
     }
    ]
    "fingerprint": "FINGERPRINT"
    }
    

    다음을 바꿉니다.

    • PROJECT_ID: 프로젝트 ID입니다.
    • EXISTING_SSH_KEYS: projects.get 요청 응답의 ssh-keys 키 값입니다.
    • FINGERPRINT: instances.get 요청 응답의 fingerprint 값입니다.

메타데이터 기반 SSH 키를 사용하는 VM에서 프로젝트 SSH 키 차단

VM에서 프로젝트 SSH 키를 차단하여 VM이 프로젝트 메타데이터에 저장된 SSH 키를 허용하지 않도록 할 수 있습니다. VM을 만들 때 또는 VM을 만든 후 VM에서 프로젝트 SSH 키를 차단할 수 있습니다.

VM 생성 중에 VM에서 프로젝트 SSH 키 차단

VM 생성 중에 Google Cloud Console, gcloud CLI 또는 Compute Engine API를 사용하여 VM에서 프로젝트 SSH 키를 차단할 수 있습니다.

Console

Google Cloud Console을 사용하여 VM을 만들고 프로젝트 메타데이터에 저장된 SSH 키를 허용하지 않도록 하려면 다음을 수행합니다.

  1. Google Cloud Console에서 인스턴스 만들기 페이지로 이동합니다.

    인스턴스 만들기로 이동

  2. VM 세부정보를 지정합니다.

  3. 고급 옵션 섹션을 펼친 후 다음을 수행합니다.

    1. 보안 섹션을 펼칩니다.

    2. 프로젝트 전체 SSH 키 차단을 선택합니다.

  4. 만들기를 클릭하여 VM을 만들고 시작합니다.

gcloud

gcloud CLI를 사용하여 VM을 만들고 프로젝트 메타데이터에 저장된 SSH 키를 허용하지 않도록 하려면 gcloud compute instances create 명령어를 사용합니다.

gcloud compute instances create VM_NAME \
    --metadata block-project-ssh-keys=TRUE

VM_NAME을 새 VM 이름으로 바꿉니다.

REST

Compute Engine을 사용하여 VM을 만들고 프로젝트 메타데이터에 저장된 SSH 키를 허용하지 않도록 하려면 instances.insert 메서드에 대한 POST 요청을 작성합니다.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances

다음을 바꿉니다.

  • PROJECT_ID: 프로젝트 ID입니다.
  • ZONE: VM의 영역

요청 본문에서 items 속성에 사용자 이름 및 공개 SSH 키를 제공합니다.

...
{
 "items": [
    {
     "key": "block-project-ssh-keys",
     "value": TRUE
    }
   ]
}
...

VM 생성 후 VM에서 프로젝트 SSH 키 차단

VM을 만든 후 Google Cloud Console, gcloud CLI 또는 Compute Engine API를 사용하여 VM에서 프로젝트 SSH 키를 차단할 수 있습니다.

Console

Google Cloud Console을 사용하여 VM에서 프로젝트 메타데이터에 저장된 SSH 키의 연결을 허용하지 않도록 하려면 다음을 수행합니다.

  1. Google Cloud Console에서 메타데이터 페이지로 이동합니다.

    메타데이터로 이동

  2. 프로젝트 SSH 키를 차단하려는 VM의 이름을 클릭합니다.

  3. 수정을 클릭합니다.

  4. SSH 키 아래에서 프로젝트 전체 SSH 키 차단 체크박스를 선택합니다.

  5. SSH 키의 연결 설정 수정을 완료했으면 저장을 클릭합니다.

gcloud

gcloud CLI를 사용하여 VM에서 프로젝트 메타데이터에 저장된 SSH 키의 연결을 허용하지 않도록 하려면 다음 안내를 따르세요.

gcloud compute instances add-metadata 명령어를 실행합니다.

gcloud compute instances add-metadata VM_NAME --metadata block-project-ssh-keys=TRUE

VM_NAME을 프로젝트 전체 공개 SSH 키를 차단하려는 VM의 이름으로 바꿉니다.

REST

Compute Engine API를 사용하여 VM에서 프로젝트 메타데이터에 저장된 SSH 키의 연결을 허용하지 않도록 하려면 다음을 수행합니다.

  1. instances.get 메서드를 사용하여 메타데이터에서 fingerprint를 가져옵니다.

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME
    

    다음을 바꿉니다.

    • PROJECT_ID: 프로젝트 ID입니다.
    • ZONE: SSH 키를 추가할 VM의 영역입니다.
    • VM_NAME: SSH 키를 추가할 VM입니다.

    응답은 다음 예시와 유사합니다.

    ...
    "fingerprint": "utgYE_XWtE8="
    ...
    
  2. instances.setMetadata 메서드를 사용하여 block-project-ssh-keysTRUE로 설정합니다.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setMetadata
    
    {
    "items": [
     {
      "key": "block-project-ssh-keys",
      "value": TRUE
     }
    ]
    "fingerprint": "FINGERPRINT"
    }
    

    다음을 바꿉니다.

    • PROJECT_ID는 프로젝트 ID입니다.
    • ZONE은 인스턴스가 있는 영역입니다.
    • INSTANCE_NAME은 프로젝트 전체 키를 차단하려는 인스턴스입니다.
    • FINGERPRINT: instances.get 요청의 응답에서 fingerprint의 값입니다.

다음 단계