메타데이터에서 SSH 키 관리

이 가이드에서는 수동으로 SSH 키를 만들고 공개 SSH 키 메타데이터를 편집하여 Linux 인스턴스에 대한 액세스를 제어하는 방법을 보여줍니다.

또한 Compute Engine으로 키의 전체 수명 주기를 자동으로 관리하는 Google Cloud Platform Console을 사용하거나 Compute Engine으로 영구 SSH 키 메타데이터를 자동으로 구성하는 SDK의 gcloud 명령줄을 사용하여 인스턴스에 연결할 수도 있습니다.

고급 사용자가 SSH 키를 수동으로 관리해야 하는 경우에는 OS 로그인을 사용하여 인스턴스 액세스를 관리를 참조하세요. 인스턴스에서 OS 로그인을 사용하여 SSH 키를 관리하면 해당 인스턴스의 메타데이터 기반 SSH 키 구성이 사용 중지됩니다.

시작하기 전에

이 작업에 필요한 권한

이 작업을 수행하려면 다음 권한이 있어야 합니다.

  • 인스턴스에서 메타데이터를 설정하는 경우 인스턴스에 대한 compute.instances.setMetadata
  • 프로젝트 전체 메타데이터를 설정하는 경우 프로젝트에 대한 compute.projects.setCommonInstanceMetadata
  • 프로젝트 전체 메타데이터를 설정하는 경우 프로젝트에 대한 iam.serviceAccounts.actAs

수동 키 관리 위험

GCP Console, gcloud 명령줄 도구 또는 API를 통해 공개 SSH 키를 직접 만들고 관리하는 경우 권한이 없는 사용자가 액세스할 수 없도록 사용된 키를 추적하고 공개 SSH 키를 삭제해야 합니다. 예를 들어 팀원이 프로젝트를 그만둘 경우 인스턴스에 계속 액세스할 수 없도록 메타데이터에서 공개 SSH 키를 삭제하세요.

또한 gcloud 도구 또는 API 호출을 잘못 지정하면 프로젝트 또는 인스턴스에서 모든 공개 SSH 키가 삭제되어 프로젝트 구성원이 연결이 중단될 수 있습니다.

직접 키를 관리할 자신이 없다면 Compute Engine 도구를 사용하여 인스턴스에 연결하세요.

개요

SSH 키를 만들고 관리하면 사용자가 제3자 도구를 통해 Linux 인스턴스에 액세스하도록 허용할 수 있습니다.

SSH 키는 다음 파일들로 구성됩니다.

  • 공개 SSH 키 파일은 인스턴스 수준의 메타데이터 또는 프로젝트 전체 메타데이터에 적용됩니다.
  • 비공개 SSH 키 파일은 사용자가 자신의 로컬 장치에 저장하는 키 파일입니다.

사용자가 비공개 SSH 키를 제공하면 Google Cloud Platform 프로젝트의 구성원이 아니더라도 타사 도구를 사용하여 일치하는 공개 SSH 키 파일로 구성된 모든 인스턴스에 연결할 수 있습니다. 따라서 하나 이상의 인스턴스에 대해 공개 SSH 키 메타데이터를 변경하여 사용자가 액세스할 수 있는 인스턴스를 제어할 수 있습니다.

공개 SSH 키 메타데이터를 편집하려면 다음 안내를 따르세요.

  1. 메타데이터를 편집하기 위해 사용할 도구를 결정합니다.

  2. Linux 인스턴스에 사용자를 추가해야 하는 경우에는 다음 절차에 따라 공개 SSH 키를 준비합니다.

  3. 공개 SSH 키 메타데이터를 편집하여 Linux 인스턴스에서 사용자를 추가 또는 삭제합니다.

  4. 제3자 도구를 사용해서 Linux 인스턴스에 연결하여 각 공개 SSH 키가 올바르게 추가 또는 삭제되었는지 확인합니다. 사용자는 자신의 공개 SSH 키가 메타데이터 서버를 통해 인스턴스에 제공되었고 일치하는 비공개 SSH 키가 있는 경우에만 인스턴스에 연결할 수 있습니다.

새 SSH 키 만들기

기존의 비공개 SSH 키 파일과 일치하는 공개 SSH 키 파일을 사용할 수 없는 경우 새 SSH 키를 생성합니다. 기존 SSH 키를 사용하려면 공개 SSH 키 파일을 찾습니다.

Linux 및 macOS

Linux 또는 macOS 워크스테이션에서는 ssh-keygen 도구를 사용하여 키를 생성할 수 있습니다.

  1. 워크스테이션에서 터미널을 열고 ssh-keygen 명령어를 사용하여 새 키를 생성합니다. -C 플래그를 지정하여 사용자 이름에 주석을 추가합니다.

    ssh-keygen -t rsa -f ~/.ssh/[KEY_FILENAME] -C [USERNAME]
    

    각 항목의 의미는 다음과 같습니다.

    • [KEY_FILENAME]은 SSH 키 파일에 사용하려는 이름입니다. 예를 들어 파일 이름이 my-ssh-key이면 이름이 my-ssh-key인 비공개 키 파일을 생성하고 이름이 my-ssh-key.pub인 공개 키 파일을 생성합니다.
    • [USERNAME]은 인스턴스에 연결하는 사용자의 사용자 이름입니다.

    이 명령어는 다음 구조를 사용해서 비공개 SSH 키 파일 및 일치하는 공개 SSH 키를 생성합니다.

    ssh-rsa [KEY_VALUE] [USERNAME]
    

    각 항목의 의미는 다음과 같습니다.

    • [KEY_VALUE]는 생성한 키 값입니다.
    • [USERNAME]은 이 키가 적용되는 사용자입니다.
  2. 자신만 비공개 키를 읽을 수 있고 다른 사람은 여기에 쓸 수만 있도록 비공개 키에 대한 액세스 권한을 제한합니다.

    chmod 400 ~/.ssh/[KEY_FILENAME]
    

    여기서 [KEY_FILENAME]은 SSH 키 파일에 사용된 이름입니다.

새 키가 필요한 모든 사용자에 대해 이 절차를 반복합니다. 그런 다음 자신이 만든 공개 SSH 키 및 프로젝트 또는 인스턴스에 추가하려는 모든 기존 공개 SSH 키를 찾습니다.

Windows

Windows에는 SSH 키 생성 도구가 내장되어 있지 않으므로 Windows 워크스테이션에 있는 경우 타사 도구를 사용하여 SSH 키를 생성해야 합니다. PuTTYgen 도구를 사용하여 SSH 키를 생성하는 방법은 다음과 같습니다.

  1. puttygen.exe를 다운로드합니다.

  2. PuTTYgen을 실행합니다. 이 예에서는 단순히 사용자가 다운로드한 puttygen.exe 파일을 실행합니다. 키 생성 설정을 구성할 수 있는 창이 열립니다.

  3. Generate(생성)를 클릭하고 화면 안내에 따라 새 키를 생성합니다. 대부분의 경우에는 기본 매개변수를 사용하면 되지만, 최소 2048비트로 키를 생성해야 합니다. 키 생성이 완료되면 도구에 공개 키 값이 표시됩니다.

  4. Key comment(키 설명) 섹션에서 키를 적용하려는 사용자의 사용자 이름으로 기존 텍스트를 바꿉니다.

  5. 선택적으로 키 보호를 위해 Key passphrase(키 암호)를 입력할 수 있습니다.

  6. Save private key(비공개 키 저장)를 클릭하여 확장자가 .ppk인 파일에 비공개 키를 기록합니다.

  7. Save public key(공개 키 저장)를 클릭하여 나중에 사용할 수 있도록 공개 키를 파일에 기록합니다. 지금은 PuTTYgen 창을 연 상태로 둡니다.

    올바른 형식의 공개 키는 PuTTYgen 화면 위에서 확인할 수 있습니다.

    PuTTYgen 공개 키 스크린샷

    이 공개 키의 구조는 다음과 같습니다.

    ssh-rsa [KEY_VALUE] [USERNAME]
    

    각 항목의 의미는 다음과 같습니다.

    • [KEY_VALUE]는 생성한 키 값입니다.
    • [USERNAME]은 이 키가 적용되는 사용자입니다.

키를 만들어야 하는 모든 사용자에 대해 이 절차를 반복합니다. 그런 다음 프로젝트 또는 인스턴스에 추가하려는 사용자에 대해 다른 공개 SSH 키가 있는 경우, 지금 해당 공개 SSH 키를 찾아야 합니다. 그렇지 않으면 만든 공개 SSH 키의 형식을 지정합니다.

SSH 키 찾기

SSH 키를 찾아야 할 이유는 여러 가지가 있습니다. 예를 들어 사용자의 공개 SSH 키를 프로젝트 또는 인스턴스에 추가해야 할 경우 해당 키의 공개 키 파일에 액세스해야 합니다. 또는 Linux 인스턴스에 연결하기 위해 자신의 비공개 SSH 키 파일을 찾아야 할 수 있습니다.

SSH 키는 생성될 때 기본 위치에 저장됩니다. 공개 및 비공개 SSH 키 파일의 기본 위치와 이름은 해당 키를 만들기 위해 사용된 도구에 따라 달라집니다.

Linux 및 macOS

ssh-keygen 도구를 사용하여 Linux 또는 macOS 워크스테이션에서 키를 만든 경우, 해당 키가 다음 위치에 저장됩니다.

  • 공개 키 파일: ~/.ssh/[KEY_FILENAME].pub
  • 비공개 키 파일: ~/.ssh/[KEY_FILENAME]

여기서 [KEY_FILENAME]은 키가 생성될 때 설정된 SSH 키의 파일 이름입니다.

프로젝트 또는 인스턴스 메타데이터에서 공개 SSH 키를 추가하거나 삭제해야 할 경우에는 공개 SSH 키 파일의 형식을 지정합니다.

Windows

PuTTYgen 도구를 사용하여 Windows 워크스테이션에서 키를 만든 경우, 다음 형식으로 사용자가 지정한 위치에 공개 키 파일 및 비공개 키 파일이 저장되어 있습니다.

  • 공개 키: [PUBLIC_KEY_FILENAME]
  • 비공개 키: [PRIVATE_KEY_FILENAME].ppk

여기서 [PUBLIC_KEY_FILENAME][PRIVATE_KEY_FILENAME]은 키를 처음 저장할 때 설정된 공개 및 비공개 SSH 키의 파일 이름입니다.

PuTTYgen으로 생성된 기본 공개 SSH 키의 형식은 다음과 같습니다.

ssh-rsa [KEY_VALUE] [USERNAME]

각 항목의 의미는 다음과 같습니다.

  • [KEY_VALUE]는 공개 SSH 키 값입니다.
  • [USERNAME]은 키를 적용한 인스턴스의 사용자입니다.

올바른 형식으로 PuTTYgen 공개 SSH 키를 보려면 다음 안내를 따르세요.

  1. PuTTYgen을 실행합니다. PuTTYgen이 없으면 puttygen.exe를 다운로드하여 실행합니다.

  2. Load(로드)를 클릭하여 공개 SSH 키 파일을 선택하고 엽니다.

  3. 공개 키 파일이 로드된 다음 올바르게 형식이 지정된 공개 SSH 키 값이 PuTTYgen 화면 상단에 표시됩니다.

    PuTTYgen 공개 키 스크린샷

프로젝트 또는 인스턴스 메타데이터에서 공개 SSH 키를 추가하거나 삭제해야 할 경우에는 공개 SSH 키 파일의 형식을 지정합니다.

gcloud

이미 gcloud 도구를 통해 인스턴스에 연결했다면 키가 이미 생성되어 프로젝트 또는 인스턴스에 적용된 상태입니다. 키 파일은 다음 위치에서 찾을 수 있습니다.

  • Linux 및 macOS
    • 공개 키: $HOME/.ssh/google_compute_engine.pub
    • 비공개 키: $HOME/.ssh/google_compute_engine
  • Windows:
    • 공개 키: C:\Users\[USERNAME]\.ssh\google_compute_engine.pub
    • 비공개 키: C:\Users\[USERNAME]\.ssh\google_compute_engine

여기에서 [USERNAME]은 로컬 워크스테이션에서의 사용자 이름입니다.

공개 SSH 키가 적용된 위치를 보려면 프로젝트 메타데이터인스턴스 메타데이터에서 공개 키를 찾습니다. 프로젝트 또는 인스턴스 메타데이터에서 공개 SSH 키를 추가하거나 삭제해야 할 경우에는 먼저 공개 SSH 키 파일의 형식을 지정합니다.

공개 SSH 키 파일 형식 지정

공개 SSH 키를 프로젝트 또는 인스턴스 메타데이터에 업로드하려면 먼저 추가하려는 각 공개 SSH 키 파일의 형식을 확인해야 합니다.

메타데이터를 편집하는 데 사용할 도구에 따라 GCP Console, gcloud 명령줄 도구 또는 API 메서드에서 사용할 수 있는 키 형식을 지정하세요. 원하는 경우 공개 SSH 키를 변경하여 만료 시간을 추가, 편집 또는 삭제할 수도 있습니다.

Console

공개 SSH 키의 형식을 확인하려면 다음 안내를 따르세요.

  1. 공개 SSH 키 파일을 찾아서 엽니다.

  2. 공개 SSH 키 파일의 형식을 확인합니다.

    • 공개 SSH 키에 만료 시간이 있는 경우 다음 형식이어야 합니다.

      ssh-rsa [KEY_VALUE] google-ssh {"userName":"[USERNAME]","expireOn":"[EXPIRE_TIME]"}

      각 항목의 의미는 다음과 같습니다.

      • [KEY_VALUE]는 공개 SSH 키 값입니다.
      • [USERNAME]은 키가 생성될 때 지정된 이 SSH 키의 사용자입니다.
      • [EXPIRE_TIME]ISO 8601 형식의 값입니다. 예: 2018-12-04T20:12:00+0000.
    • 그렇지 않으면 공개 SSH 키가 다음 형식이어야 합니다.

      ssh-rsa [KEY_VALUE] [USERNAME]

      각 항목의 의미는 다음과 같습니다.

      • [KEY_VALUE]는 공개 SSH 키 값입니다.
      • [USERNAME]은 키가 생성될 때 지정된 이 SSH 키의 사용자입니다.
  3. 키가 위의 형식 중 하나와 일치하지 않거나 만료 시간을 추가, 편집 또는 삭제하려면 아래 지침에 따라 공개 SSH 키의 형식을 지정합니다. 그렇지 않으면 파일을 연 상태로 두고 프로젝트 또는 인스턴스 메타데이터에 공개 SSH 키를 추가합니다.

콘솔용으로 공개 SSH 키 형식을 지정하려면 다음 안내를 따르세요.

  1. 공개 키 파일의 사본을 만듭니다. 사본을 Compute Engine에서 사용하고 다른 SSH 구성에서 사용할 수 있도록 원래 파일을 보존합니다.

  2. 공개 키 파일의 사본을 엽니다.

  3. 공개 키 파일을 다음 형식으로 수정합니다.

    ssh-rsa [KEY_VALUE] [USERNAME]

    각 항목의 의미는 다음과 같습니다.

    • [KEY_VALUE]는 공개 SSH 키 값입니다.
    • [USERNAME]은 키가 생성될 때 지정된 이 SSH 키의 사용자입니다.

    또는 공개 SSH 키에 만료 시간을 설정하려는 경우 파일을 다음 형식으로 수정합니다.

    ssh-rsa [KEY_VALUE] google-ssh {"userName":"[USERNAME]","expireOn":"[EXPIRE_TIME]"}

    각 항목의 의미는 다음과 같습니다.

    • [KEY_VALUE]는 공개 SSH 키 값입니다.
    • [USERNAME]은 키가 생성될 때 지정된 이 SSH 키의 사용자입니다.
    • [EXPIRE_TIME]ISO 8601 형식의 값입니다. 예: 2018-12-04T20:12:00+0000.
  4. 변경한 내용을 저장하고 파일을 연 상태로 둡니다.

이제 공개 SSH 키를 프로젝트 또는 인스턴스 메타데이터에 추가할 수 있습니다.

gcloud 또는 API

공개 SSH 키의 형식을 확인하려면 다음 안내를 따르세요.

  1. 공개 SSH 키 파일을 찾아서 엽니다.

  2. 공개 SSH 키 파일의 형식을 확인합니다.

    • 공개 SSH 키에 만료 시간이 있는 경우 다음 형식이어야 합니다.

      [USERNAME]:ssh-rsa [KEY_VALUE] google-ssh {"userName":"[USERNAME]","expireOn":"[EXPIRE_TIME]"}

      각 항목의 의미는 다음과 같습니다.

      • [USERNAME]은 키가 생성될 때 지정된 이 SSH 키의 사용자입니다.
      • [KEY_VALUE]는 공개 SSH 키 값입니다.
      • [EXPIRE_TIME]ISO 8601 형식의 값입니다. 예: 2018-12-04T20:12:00+0000.
    • 그렇지 않으면 공개 SSH 키가 다음 형식이어야 합니다.

      [USERNAME]:ssh-rsa [KEY_VALUE] [USERNAME]

      각 항목의 의미는 다음과 같습니다.

      • [USERNAME]은 키가 생성될 때 지정된 이 SSH 키의 사용자입니다.
      • [KEY_VALUE]는 공개 SSH 키 값입니다.
  3. 키가 위의 형식 중 하나와 일치하지 않거나 만료 시간을 추가, 편집 또는 삭제하려면 아래 지침에 따라 공개 SSH 키의 형식을 지정합니다. 그렇지 않으면 파일을 연 상태로 두고 프로젝트 또는 인스턴스 메타데이터에 공개 SSH 키를 추가합니다.

gcloud 도구 또는 API에 맞게 공개 SSH 키의 형식을 지정하려면 다음 안내를 따르세요.

  1. 공개 키 파일의 사본을 만듭니다. 사본을 Compute Engine에서 사용하고 다른 SSH 구성에서 사용할 수 있도록 원래 파일을 보존합니다.

  2. 공개 키 파일의 사본을 엽니다. 기본적으로 이 파일은 형식이 다음과 같습니다.

    ssh-rsa [KEY_VALUE] [USERNAME]

    각 항목의 의미는 다음과 같습니다.

    • [KEY_VALUE]는 공개 SSH 키 값입니다.
    • [USERNAME]은 키가 생성될 때 지정된 이 SSH 키의 사용자입니다.
  3. 파일 끝에 있는 사용자 이름을 복사하고 파일 시작 부분에 붙여넣고 그 뒤에 콜론을 추가합니다. 이 공개 SSH 키 파일은 이제 형식이 다음과 같습니다.

    [USERNAME]:ssh-rsa [KEY_VALUE] [USERNAME]

    각 항목의 의미는 다음과 같습니다.

    • [USERNAME]은 키가 생성될 때 지정된 이 SSH 키의 사용자입니다.
    • [KEY_VALUE]는 공개 SSH 키 값입니다.
  4. 선택적으로 두 번째 [USERNAME]을 삭제하고 키 파일의 끝에 google-ssh를 붙여넣은 다음 JSON 형식으로 userNameexpireOn 필드를 뒤에 추가해 키의 만료 시간을 설정할 수 있습니다.

    [USERNAME]:ssh-rsa [KEY_VALUE] google-ssh {"userName":"[USERNAME]","expireOn":"[EXPIRE_TIME]"}

    각 항목의 의미는 다음과 같습니다.

    • [USERNAME]은 키가 생성될 때 지정된 이 SSH 키의 사용자입니다.
    • [KEY_VALUE]는 공개 SSH 키 값입니다.
    • [EXPIRE_TIME]ISO 8601 형식의 값입니다. 예: 2018-12-04T20:12:00+0000.
  5. 변경한 내용을 저장하고 파일을 연 상태로 둡니다.

이제 공개 SSH 키를 프로젝트 또는 인스턴스 메타데이터에 추가할 수 있습니다.

공개 SSH 키 메타데이터 편집

제3자 도구를 통한 Linux 인스턴스에 대한 사용자 액세스는 해당 인스턴스에 제공되는 공개 SSH 키에 따라 결정됩니다. 공개 SSH 키 및 관련 정보가 저장되는 위치인 메타데이터를 편집하여 Linux 인스턴스에 제공되는 공개 SSH 키를 제어할 수 있습니다. 공개 SSH 키의 메타데이터는 다음 세 가지 유형이 있습니다.

  • 프로젝트 전체 공개 SSH 키: 이 메타데이터를 사용하면 프로젝트에 있는 대부분의 인스턴스에 연결할 수 있는 기능인, 일반적인 액세스 권한을 사용자에게 제공할 수 있습니다.
  • 프로젝트 전체 공개 SSH 키 허용 또는 차단: 이 메타데이터를 사용하면 특정 인스턴스에서 프로젝트 전체 공개 SSH 키를 차단하거나 허용할 수 있습니다. 기본적으로 인스턴스는 모든 프로젝트 전체 공개 SSH 키를 수락합니다. 인스턴스 수준의 공개 SSH 키가 있는 사용자로만 인스턴스를 제한하려는 경우 프로젝트 전체 공개 SSH 키를 차단합니다.
  • 인스턴스 수준의 공개 SSH 키: 이 메타데이터를 사용하면 프로젝트 전체 공개 SSH 키가 차단되더라도 프로젝트에서 특정 인스턴스에 연결할 수 있는 기능인 특수한 액세스 권한을 사용자에게 제공할 수 있습니다.

프로젝트 전체 공개 SSH 키 추가 또는 삭제

프로젝트 전체 공개 SSH 키를 사용하면 Linux 인스턴스에 대한 일반 액세스 권한을 사용자에게 제공할 수 있습니다. 프로젝트 전체 공개 SSH 키는 프로젝트에서 프로젝트 전체 공개 SSH 키를 허용하는 모든 Linux 인스턴스에 대한 액세스 권한을 사용자에게 제공합니다. 인스턴스에서 프로젝트 전체 공개 SSH 키를 차단하는 경우 사용자가 자신의 프로젝트 전체 공개 SSH 키를 사용해서 인스턴스에 연결하기 위해서는 인스턴스 메타데이터에도 동일한 공개 SSH 키가 추가되어 있어야 합니다.

Console

GCP Console에서 프로젝트 전체 공개 SSH 키를 추가하거나 삭제하려면 다음 안내를 따르세요.

  1. Google Cloud Platform Console에서 프로젝트의 메타데이터 페이지로 이동합니다.

    메타데이터 페이지로 이동

  2. SSH 키 아래에서 편집을 클릭합니다.

  3. 프로젝트 전체 공개 SSH 키를 수정합니다.

    • 공개 SSH 키를 추가하기 위해 항목 추가를 클릭합니다. 텍스트 상자가 열립니다.
    • 공개 SSH 키 파일의 내용을 복사하여 텍스트 상자에 붙여넣습니다.

      추가하려는 공개 SSH 키마다 이 절차를 반복합니다.

    • 공개 SSH 키를 삭제하려면 그 옆에 있는 삭제 버튼을 클릭합니다.

      PuTTYgen 공개 키 스크린샷

      삭제하려는 각 공개 SSH 키마다 이 절차를 반복합니다.

  4. SSH 키 편집을 완료했으면 저장을 클릭합니다.

gcloud

gcloud 도구를 사용하여 프로젝트 전체 공개 SSH 키를 추가 또는 삭제하려면 다음 안내를 따르세요.

  1. 프로젝트에 프로젝트 전체 공개 SSH 키가 이미 있으면 메타데이터에서 이 공개 SSH 키를 가져옵니다.

    1. 프로젝트에 대한 기존 메타데이터를 가져옵니다.

      gcloud compute project-info describe
      
    2. 출력에서 ssh-keys 메타데이터 값을 찾습니다.

      ...
      metadata:
        fingerprint: QCofVTHlggs=
        items:
        - key: ssh-keys
          value: |-
            [USERNAME_1]:ssh-rsa [EXISTING_KEY_VALUE_1] [USERNAME_1]
            [USERNAME_2]:ssh-rsa [EXISTING_KEY_VALUE_2] [USERNAME_2]
      ...
      

      각 항목의 의미는 다음과 같습니다.

      • [USERNAME_1][USERNAME_2]는 기존 키의 사용자 이름입니다.
      • [EXISTING_KEY_VALUE_1][EXISTING_KEY_VALUE_2]는 프로젝트에 이미 적용된 공개 키 값입니다.
    3. 공개 SSH 키를 복사합니다.

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

  3. 파일에서 프로젝트 메타데이터에서 추가하거나 보존하려는 모든 공개 SSH 키의 목록을 만듭니다. 기존 프로젝트 전체 키가 있는 경우 목록에 포함되지 않은 키는 삭제됩니다.

    예를 들어 아래 샘플 목록은 해당 SSH 키가 생략되었기 때문에 [USERNAME_1]의 키를 삭제합니다. 또한 [USERNAME_2]의 SSH 키와 [USERNAME_3]의 SSH 키는 목록에 포함되어 있으므로 각각 보존되고 추가됩니다.

    [USERNAME_2]:ssh-rsa [EXISTING_KEY_VALUE_2] [USERNAME_2]
    [USERNAME_3]:ssh-rsa [NEW_KEY_VALUE] [USERNAME_3]
    

    각 항목의 의미는 다음과 같습니다.

    • [USERNAME_1],[USERNAME_2], [USERNAME_3]은 공개 SSH 키의 사용자 이름입니다.
    • [EXISTING_KEY_VALUE_1]은 삭제하려는 SSH 키의 공개 키 값입니다.
    • [EXISTING_KEY_VALUE_2]는 보존하려는 SSH 키의 공개 키 값입니다.
    • [NEW_KEY_VALUE]는 추가하려는 SSH 키의 공개 키 값입니다.
  4. 저장하고 파일을 닫습니다.

  5. 명령어 프롬프트에서 compute project-info add-metadata 명령어를 사용하여 프로젝트 전체 ssh-keys 값을 설정합니다. --metadata-from-file 플래그를 포함시키고 목록 파일에 대한 경로를 지정합니다.

    gcloud compute project-info add-metadata --metadata-from-file ssh-keys=[LIST_PATH]
    

    여기서 [LIST_PATH]는 공개 SSH 키 목록에 대한 경로입니다.

API

instances.setMetadata 메서드를 사용하여 프로젝트 전체 공개 키를 추가하거나 삭제합니다.

  1. projects.get 메서드를 사용하여 메타데이터 fingerprint 값을 가져옵니다. 기존 프로젝트 전체 키를 보존하려면 기존 ssh-keys 값을 가져옵니다.

    GET https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]
    
    ...
    "fingerprint": "[FINGERPRINT]",
    "items": [
     {
      "key": "ssh-keys",
      "value": "[USERNAME_1]:ssh-rsa [EXISTING_KEY_VALUE_1] [USERNAME_1]\n[USERNAME_2]:ssh-rsa [EXISTING_KEY_VALUE_2] [USERNAME_2]"
     }
    ]
    ...

    각 항목의 의미는 다음과 같습니다.

    • [PROJECT_ID]는 고유한 프로젝트 ID입니다.
    • [FINGERPRINT]는 동시 변경사항을 실수로 덮어쓰지 못하도록 방지하는 특정 메타데이터 구성에 대한 고유한 ID입니다.
    • [USERNAME_1][USERNAME_2]는 기존 키의 사용자 이름입니다.
    • [EXISTING_KEY_VALUE_1][EXISTING_KEY_VALUE_2]는 프로젝트에 이미 적용된 공개 키 값입니다.
  2. 프로젝트 전체 메타데이터에서 추가하거나 보존하려는 모든 공개 SSH 키의 목록을 만듭니다. 현재 프로젝트 전체 메타데이터에 공개 SSH 키가 있는 경우 목록에 포함되지 않은 키는 삭제됩니다.

    이 예시에서 파일에는 이전 단계에서 가져온 기존 키 값 중 하나가 새로운 [KEY_VALUE]와 함께 포함됩니다. [EXISTING_KEY_VALUE_1]은 포함되지 않았으므로, 다음 단계에 인스턴스에서 삭제됩니다. 각 키 값을 구분하려면 \n 문자를 사용합니다.

    [USERNAME_3]:ssh-rsa [NEW_KEY_VALUE] [USERNAME_3]\n[USERNAME_2]:ssh-rsa [EXISTING_KEY_VALUE_2] [USERNAME_2]
    

    각 항목의 의미는 다음과 같습니다.

    • [USERNAME_1], [USERNAME_2], [USERNAME_3]은 키의 사용자 이름입니다.
    • [EXISTING_KEY_VALUE_1]은 삭제하려는 SSH 키의 공개 키 값입니다.
    • [EXISTING_KEY_VALUE_2]는 보존하려는 SSH 키의 공개 키 값입니다.
    • [NEW_KEY_VALUE]는 추가하려는 SSH 키의 공개 키 값입니다.
  3. projects.setcommoninstancemetadata 메서드를 사용하여 프로젝트 전체 ssh-keys 값을 설정합니다. 이 메타데이터 값에 대한 동시 변경사항을 덮어쓰지 않도록 fingerprint 값을 포함합니다.

    POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/setCommonInstanceMetadata
    
    {
     "items": [
      {
       "key": "ssh-keys",
       "value": "[USERNAME_3]:ssh-rsa [NEW_KEY_VALUE] [USERNAME_3]\n[USERNAME_2]:ssh-rsa [EXISTING_KEY_VALUE_2] [USERNAME_2]"
      }
     ]
     "fingerprint": "[FINGERPRINT]"
    }
    

    각 항목의 의미는 다음과 같습니다.

    • [PROJECT_ID]는 고유한 프로젝트 ID입니다.
    • [USERNAME_1], [USERNAME_2], [USERNAME_3]은 키의 사용자 이름입니다.
    • [EXISTING_KEY_VALUE_1]은 삭제하려는 SSH 키의 공개 키 값입니다.
    • [EXISTING_KEY_VALUE_2]는 보존하려는 SSH 키의 공개 키 값입니다.
    • [NEW_KEY_VALUE]는 추가하려는 SSH 키의 공개 키 값입니다.
    • [FINGERPRINT]projects.get 메서드를 사용하여 이전에 가져온 디지털 지문입니다.

SSH 키 편집이 완료되었으면 타사 도구를 사용해서 Linux 인스턴스에 연결을 시도하여 변경사항을 테스트합니다.

문제가 발생하면 연결하려는 인스턴스의 메타데이터를 확인합니다. 인스턴스 수준의 메타데이터가 프로젝트 전체 SSH 키를 차단하도록 설정되었거나 더 이상 사용되지 않는 인스턴스 전용 sshKeys 값을 포함하는 경우, 인스턴스에서 모든 프로젝트 전체 SSH 키가 무시됩니다. 인스턴스에 프로젝트 전체 키를 적용하려면 해당 인스턴스에서 프로젝트 전체 공개 SSH 키가 허용되는지 확인하고, 인스턴스 메타데이터에서 지원 중단된 인스턴스 전용 sshKeys 값(있는 경우)을 삭제합니다.

Linux 인스턴스에서 프로젝트 전체 공개 SSH 키 허용 또는 차단

인스턴스가 프로젝트 전체 공개 SSH 키를 무시하고 인스턴스 수준 키만 사용하도록 해야 할 경우에는 인스턴스에서 프로젝트 전체 공개 SSH 키를 차단할 수 있습니다. 이렇게 하면 해당 공개 SSH 키가 인스턴스 수준 메타데이터에 저장된 사용자만 인스턴스에 액세스할 수 있습니다. 인스턴스에 프로젝트 전체 및 인스턴스 수준 공개 SSH 키가 모두 사용되도록 하려면 프로젝트 전체 SSH 키를 허용하도록 인스턴스 메타데이터를 설정합니다. 이렇게 하면 해당 공개 SSH 키가 프로젝트 전체 또는 인스턴스 수준 메타데이터에 저장된 모든 사용자가 인스턴스에 액세스할 수 있습니다.

Console

GCP Console에서 프로젝트 전체 공개 SSH 키를 허용하거나 차단하려면 다음 안내를 따르세요.

  1. Google Cloud Platform Console에서 VM 인스턴스 페이지로 이동합니다.

    인스턴스 페이지로 이동

  2. 수정하려는 인스턴스의 이름을 클릭합니다.

  3. 툴바에서 수정을 클릭합니다.

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

    • 프로젝트 전체 SSH 키를 가진 사용자가 이 인스턴스에 연결하지 못하도록 차단하려면 프로젝트 전체 SSH 키 차단을 선택합니다.
    • 프로젝트 전체 SSH 키를 가진 사용자가 이 인스턴스에 연결할 수 있게 하려면 프로젝트 전체 SSH 키 차단을 선택해제합니다.
  5. SSH 키의 연결 설정 편집을 완료했으면 저장을 클릭합니다.

gcloud

Linux 인스턴스에서 프로젝트 전체 공개 SSH 키를 허용하거나 차단하려면 인스턴스에 block-project-ssh-keys 메타데이터를 추가합니다.

  • 프로젝트 전체 공개 SSH 키를 차단하려면 메타데이터 값을 TRUE로 설정합니다.

    gcloud compute instances add-metadata [INSTANCE_NAME] --metadata block-project-ssh-keys=TRUE
    

    여기서 [INSTANCE_NAME]은 프로젝트 전체 공개 SSH 키를 차단하려는 인스턴스의 이름입니다.

  • 프로젝트 전체 공개 SSH 키를 허용하려면 메타데이터 값을 FALSE로 설정합니다.

    gcloud compute instances add-metadata [INSTANCE_NAME] --metadata block-project-ssh-keys=FALSE
    

    여기서 [INSTANCE_NAME]은 프로젝트 전체 공개 SSH 키를 허용하려는 인스턴스의 이름입니다.

API

Linux 인스턴스에서 프로젝트 전체 공개 SSH 키를 차단하거나 허용하려면 다음 안내를 따르세요.

  • 프로젝트 전체 공개 SSH 키를 차단하려면 인스턴스에 block-project-ssh-keys 메타데이터 값을 추가하고 TRUE로 설정합니다. 이 메타데이터 값은 이 인스턴스에서 모든 프로젝트 전체 키가 작동하지 못하도록 차단하고 인스턴스 수준 키만 작동하도록 허용합니다.

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

    각 항목의 의미는 다음과 같습니다.

    • [PROJECT_ID]는 고유한 프로젝트 ID입니다.
    • [ZONE]은 인스턴스가 있는 영역입니다.
    • [INSTANCE_NAME]은 프로젝트 전체 키를 차단하려는 인스턴스입니다.
    • [FINGERPRINT]는 동시 변경사항을 실수로 덮어쓰지 못하도록 방지하는 특정 메타데이터 구성에 대한 고유한 ID입니다.
  • 프로젝트 전체 공개 SSH 키를 허용하려면 인스턴스에 block-project-ssh-keys 메타데이터 값을 추가하고 FALSE로 설정합니다. 이 메타데이터 값은 모든 프로젝트 전체 키(인스턴스 수준 키 포함)가 이 인스턴스에서 작동하도록 허용합니다.

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

    각 항목의 의미는 다음과 같습니다.

    • [PROJECT_ID]는 고유한 프로젝트 ID입니다.
    • [ZONE]은 인스턴스가 있는 영역입니다.
    • [INSTANCE_NAME]은 프로젝트 전체 키를 허용하려는 인스턴스입니다.
    • [FINGERPRINT]는 동시 변경사항을 실수로 덮어쓰지 못하도록 방지하는 특정 메타데이터 구성에 대한 고유한 ID입니다.

완료되었으면 제3자 도구를 사용해서 Linux 인스턴스에 연결을 시도하여 변경사항을 테스트합니다.

인스턴스 수준 공개 SSH 키 추가 또는 삭제

인스턴스 수준 공개 SSH 키를 사용하면 특정 Linux 인스턴스에 액세스할 수 있습니다. 인스턴스 수준 공개 SSH 키를 가진 사용자는 프로젝트 전체 공개 SSH 키가 차단되더라도 Linux 인스턴스에 액세스할 수 있습니다.

Console

GCP Console에서 인스턴스 수준 공개 SSH 키를 추가하거나 삭제하려면 다음 안내를 따르세요.

  1. Google Cloud Platform Console에서 VM 인스턴스 페이지로 이동합니다.

    인스턴스 페이지로 이동

  2. 수정하려는 인스턴스의 이름을 클릭합니다.

  3. 툴바에서 수정을 클릭합니다.

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

  5. 인스턴스 수준 공개 SSH 키를 수정합니다.

    • 공개 SSH 키를 추가하기 위해 항목 추가를 클릭합니다. 텍스트 상자가 열립니다.
    • 공개 SSH 키 파일의 내용을 복사하여 텍스트 상자에 붙여넣습니다.

      추가하려는 공개 SSH 키마다 이 절차를 반복합니다.

    • 공개 SSH 키를 삭제하려면 그 옆에 있는 삭제 버튼을 클릭합니다.

      PuTTYgen 공개 키 스크린샷

      삭제하려는 각 공개 SSH 키마다 이 절차를 반복합니다.

  6. SSH 키 편집을 완료했으면 저장을 클릭합니다.

gcloud

gcloud 도구를 사용하여 인스턴스 수준 공개 SSH 키를 추가하거나 삭제하려면 다음 안내를 따르세요.

  1. 인스턴스에 이미 인스턴스 수준 공개 SSH 키가 있는 경우, 메타데이터에서 공개 SSH 키를 가져옵니다.

    1. 인스턴스에 대한 기존 메타데이터를 가져옵니다.

       gcloud compute instances describe [INSTANCE_NAME]
       

      여기서 [INSTANCE_NAME]은 공개 SSH 키를 추가하거나 삭제해야 하는 인스턴스의 이름입니다.

    2. 출력에서 ssh-keys 메타데이터 값을 찾습니다.

       ...
       metadata:
         fingerprint: QCofVTHlggs=
         items:
         ...
         - key: ssh-keys
           value: |-
             [USERNAME_1]:ssh-rsa [EXISTING_KEY_VALUE_1] [USERNAME_1]
             [USERNAME_2]:ssh-rsa [EXISTING_KEY_VALUE_2] [USERNAME_2]
       ...
      

      각 항목의 의미는 다음과 같습니다.

      • [USERNAME_1][USERNAME_2]는 기존 키의 사용자 이름입니다.
      • [EXISTING_KEY_VALUE_1][EXISTING_KEY_VALUE_2]는 인스턴스에 이미 적용된 공개 키 값입니다.

    3. ssh-keys 메타데이터 값 아래에서 공개 SSH 키를 복사합니다.

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

  3. 파일에서 인스턴스 수준 메타데이터에서 추가하거나 보존하려는 모든 공개 SSH 키의 목록을 만듭니다. 현재 인스턴스 수준 메타데이터에 공개 SSH 키가 있는 경우 목록에 포함되지 않은 키는 삭제됩니다.

    예를 들어 아래 샘플 목록은 해당 SSH 키가 생략되었기 때문에 [USERNAME_1]의 키를 삭제합니다. 또한 [USERNAME_2]의 SSH 키와 [USERNAME_3]의 SSH 키는 목록에 포함되어 있으므로 각각 보존되고 추가됩니다.

    [USERNAME_2]:ssh-rsa [EXISTING_KEY_VALUE_2] [USERNAME_2]
    [USERNAME_3]:ssh-rsa [NEW_KEY_VALUE] [USERNAME_3]
    

    각 항목의 의미는 다음과 같습니다.

    • [USERNAME_1],[USERNAME_2], [USERNAME_3]은 공개 SSH 키의 사용자 이름입니다.
    • [EXISTING_KEY_VALUE_1]은 삭제하려는 SSH 키의 공개 키 값입니다.
    • [EXISTING_KEY_VALUE_2]는 보존하려는 SSH 키의 공개 키 값입니다.
    • [NEW_KEY_VALUE]는 추가하려는 SSH 키의 공개 키 값입니다.
  4. 저장하고 파일을 닫습니다.

  5. 명령어 프롬프트에서 compute instances add-metadata 명령어를 사용하여 인스턴스 전용 ssh-key 값을 설정합니다. --metadata-from-file 플래그를 포함하고 사용자가 만든 공개 키 파일 목록에 대한 경로를 지정합니다.

    gcloud compute instances add-metadata [INSTANCE_NAME] --metadata-from-file ssh-keys=[LIST_PATH]
    

    각 항목의 의미는 다음과 같습니다.

    • [INSTANCE_NAME]은 공개 SSH 키 파일을 적용하려는 인스턴스의 이름입니다.
    • [LIST_PATH]는 공개 SSH 키 목록에 대한 경로입니다.

API

instances.setMetadata 메서드를 사용하여 메타데이터에서 인스턴스 전용 ssh-keys 값을 추가할 수 있습니다.

  1. instances.get 메서드를 사용하여 요청에 사용할 메타데이터 fingerprint 값을 가져옵니다. 기존 인스턴스 수준 키를 보존하려면 기존 ssh-keys 값을 가져옵니다.

    GET https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE_NAME]
    

    서버가 다음과 같은 응답을 반환합니다.

    ...
    "fingerprint": "[FINGERPRINT]",
    "items": [
     {
      "key": "ssh-keys",
      "value": "[USERNAME_1]:ssh-rsa [EXISTING_KEY_VALUE_1] [USERNAME_1]\n[USERNAME_2]:ssh-rsa [EXISTING_KEY_VALUE_2] [USERNAME_2]"
     }
    ]
    ...
    

    각 항목의 의미는 다음과 같습니다.

    • [PROJECT_ID]는 고유한 프로젝트 ID입니다.
    • [ZONE]은 인스턴스가 있는 영역입니다.
    • [INSTANCE_NAME]은 인스턴스 수준 공개 SSH 키를 편집할 인스턴스입니다.
    • [FINGERPRINT]는 동시 변경사항을 실수로 덮어쓰지 못하도록 방지하는 특정 메타데이터 구성에 대한 고유한 ID입니다.
    • [USERNAME_1][USERNAME_2]는 기존 키의 사용자 이름입니다.
    • [EXISTING_KEY_VALUE_1][EXISTING_KEY_VALUE_2]는 인스턴스에 이미 적용된 공개 키 값입니다.
  2. 인스턴스 수준 메타데이터에서 추가하거나 보존하려는 모든 공개 SSH 키의 목록을 만듭니다. 현재 인스턴스 수준 메타데이터에 공개 SSH 키가 있는 경우 목록에 포함되지 않은 키는 삭제됩니다.

    이 예시에서 파일에는 이전 단계에서 가져온 기존 키 값 중 하나가 새로운 [KEY_VALUE]와 함께 포함됩니다. [EXISTING_KEY_VALUE_1]은 포함되지 않았으므로, 다음 단계에 인스턴스에서 삭제됩니다. 각 키 값을 구분하려면 \n 문자를 사용합니다.

    [USERNAME_3]:ssh-rsa [NEW_KEY_VALUE] [USERNAME_3]\n[USERNAME_2]:ssh-rsa [EXISTING_KEY_VALUE_2] [USERNAME_2]
    

    각 항목의 의미는 다음과 같습니다.

    • [USERNAME_1], [USERNAME_2], [USERNAME_3]은 키의 사용자 이름입니다.
    • [EXISTING_KEY_VALUE_1]은 삭제하려는 SSH 키의 공개 키 값입니다.
    • [EXISTING_KEY_VALUE_2]는 보존하려는 SSH 키의 공개 키 값입니다.
    • [NEW_KEY_VALUE]는 추가하려는 SSH 키의 공개 키 값입니다.
  3. instances.setMetadata 메서드를 사용하여 인스턴스 전용 ssh-keys 값을 설정합니다. 이 메타데이터 값에 대한 동시 변경사항을 덮어쓰지 않도록 fingerprint 값을 포함합니다.

    POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE_NAME]/setMetadata
    
    {
     "items": [
      {
       "key": "ssh-keys",
       "value": "[USERNAME_3]:ssh-rsa [NEW_KEY_VALUE] [USERNAME_3]\n[USERNAME_2]:ssh-rsa [EXISTING_KEY_VALUE_2] [USERNAME_2]"
      }
     ]
     "fingerprint": "[FINGERPRINT]"
    }
    

    각 항목의 의미는 다음과 같습니다.

    • [PROJECT_ID]는 고유한 프로젝트 ID입니다.
    • [ZONE]은 인스턴스가 있는 영역입니다.
    • [INSTANCE_NAME]은 인스턴스 수준 공개 SSH 키를 편집할 인스턴스입니다.
    • [USERNAME_1], [USERNAME_2], [USERNAME_3]은 키의 사용자 이름입니다.
    • [EXISTING_KEY_VALUE_1]은 삭제하려는 SSH 키의 공개 키 값입니다.
    • [EXISTING_KEY_VALUE_2]는 보존하려는 SSH 키의 공개 키 값입니다.
    • [NEW_KEY_VALUE]는 추가하려는 SSH 키의 공개 키 값입니다.
    • [FINGERPRINT]는 동시 변경사항을 실수로 덮어쓰지 못하도록 방지하는 특정 메타데이터 구성에 대한 고유한 ID입니다.

SSH 키 편집이 완료되었으면 타사 도구를 사용해서 Linux 인스턴스에 연결을 시도하여 변경사항을 테스트합니다.

다음 단계

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...

Compute Engine 문서