OS 로그인 문제해결


이 문서에서는 메타데이터 서버를 사용하여 OS 로그인 문제를 해결하는 방법을 설명합니다. OS 로그인 설정에 대한 자세한 내용 또는 단계별 안내는 OS 로그인 설정을 참조하세요.

가상 머신(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

일반적인 오류 메시지

다음은 OS 로그인을 사용할 때 발생할 수 있는 일반적인 오류의 예시입니다.

그룹 이름을 찾을 수 없음

OS 로그인을 사용하는 일부 VM에서는 연결이 설정된 후 다음과 같은 오류 메시지가 표시될 수 있습니다.

/usr/bin/id: cannot find name for group ID 123456789

이 오류 메시지는 무시하세요. 이 오류는 VM에 영향을 주지 않습니다.

그룹 가져오기 실패

VM을 만들 때 다음과 비슷한 로그가 표시될 수 있습니다.

Dec 10 22:31:05 instance-1 google_oslogin_nss_cache[381]: oslogin_cache_refresh[381]: Refreshing group entry cache
Dec 10 22:31:05 instance-1 google_oslogin_nss_cache[381]: oslogin_cache_refresh[381]: Failure getting groups, quitting

이러한 로그는 조직에 OS 로그인 Linux 그룹이 구성되어 있지 않음을 나타냅니다. 이러한 메시지는 무시하세요.

실패한 전제조건

SSH를 사용하여 VM에 연결할 때 다음과 비슷한 오류가 표시될 수 있습니다.

ERROR: (gcloud.compute.ssh) FAILED_PRECONDITION: The specified username or UID is not unique within given system ID.

이 오류는 OS 로그인이 조직 내에 이미 존재하는 사용자 이름을 생성하려고 할 때 발생합니다. 이는 사용자 계정이 삭제되고 바로 같은 이메일 주소를 가진 신규 사용자가 생성되는 경우에 일반적입니다. 사용자 계정이 삭제된 후 사용자의 POSIX 정보를 삭제하는 데 최대 48시간이 걸립니다.

이 문제를 해결하려면 다음 중 한 가지를 따르세요.

잘못된 인수

SSH를 사용하여 VM에 연결하거나 SCP를 사용하여 파일을 전송할 때 다음과 비슷한 오류가 표시될 수 있습니다.

ERROR: (gcloud.compute.ssh) INVALID_ARGUMENT: Login profile size exceeds 32 KiB. Delete profile values to make additional space.
ERROR: (gcloud.compute.scp) INVALID_ARGUMENT: Login profile size exceeds 32 KiB. Delete profile values to make additional space.

이 오류를 해결하려면 다음 안내를 따르세요.

  1. gcloud compute os-login describe-profile 명령어를 실행하여 OS 로그인 프로필을 확인합니다.

    gcloud compute os-login describe-profile
    

    결과는 다음과 유사합니다.

    name: '00000000000000'
    posixAccounts:
    ...
    sshPublicKeys:
     ...:
       fingerprint: ...
       key: |
         ssh-rsa AAAAB3NzaC1yc2...
       name: ...
     ...
    
  2. 출력을 검토하여 사용되지 않은 SSH 키를 식별합니다.

  3. gcloud compute os-login ssh-keys remove 명령어를 사용하여 출력에서 사용하지 않는 키를 삭제합니다.

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

    KEY를 키의 디지털 지문 또는 키 문자열로 바꿉니다.

향후 이 문제가 발생하지 않도록 하려면 SSH 키의 만료 시간을 추가합니다. 만료된 키는 만료 48시간 후 또는 프로필에 새 키를 추가할 때 로그인 프로필에서 자동으로 삭제됩니다.

HTTP 응답 코드: 503

SSH를 사용하여 VM에 연결하려고 하면 다음 오류가 표시될 수 있습니다.

Failed to validate organization user USERNAME has login permission, got HTTP response code: 503

이 문제는 메타데이터 서버 비율 제한이 가상 머신 인스턴스별로 초당 100개 쿼리 수로 인해 발생합니다. 이 한도는 조정할 수 없습니다. 이 문제를 해결하려면 몇 초 정도 기다린 후 연결을 다시 시도합니다.

향후 이 문제가 발생하지 않도록 하려면 다음을 시도해 보세요.

  • 애플리케이션 코드에서 재시도 메커니즘을 구현합니다. 자세한 내용은 다음을 참조하세요.
  • 기존 SSH 연결을 재사용합니다.
  • 명령어를 일괄적으로 전송하여 SSH 연결 및 OS 로그인 메타데이터 쿼리를 줄입니다.

기본 OS 로그인 메타데이터 항목

Compute Engine은 OS 로그인 정보를 제공하는 기본 메타데이터 항목의 집합을 정의합니다. 기본 메타데이터는 항상 서버에서 정의되고 설정됩니다. 기본 메타데이터 키는 대소문자를 구분합니다.

다음 표에는 쿼리할 수 있는 항목이 설명되어 있습니다.

http://metadata.google.internal/computeMetadata/v1/ 관련
메타데이터 항목 설명
project/attributes/enable-oslogin 현재 Google Cloud 프로젝트에서 OS 로그인이 사용 설정되어 있는지 확인합니다.
instance/attributes/enable-oslogin 현재 VM에서 OS 로그인이 사용 설정되어 있는지 확인합니다.
oslogin/users/ OS 로그인 사용자의 프로필 정보를 검색합니다. username, uid, pagesize, pagetoken과 같은 쿼리 매개변수를 전달할 수 있습니다.
oslogin/authorize/

OS 로그인 사용자의 로그인 또는 관리 수준 권한 설정값을 검색합니다.

권한을 확인하려면 policy 쿼리 매개변수를 지정해야 합니다. 정책 매개변수의 값은 login(로그인 권한 확인) 또는 adminLogin(sdo 액세스 확인)으로 설정해야 합니다.

OS 로그인이 구성 여부 확인

Google Cloud 콘솔이나 Google Cloud CLI를 사용하여 메타데이터를 쿼리해 OS 로그인이 사용 설정되었는지 확인합니다. 프로젝트 또는 인스턴스 메타데이터에서 enable-oslogin 메타데이터 키가 TRUE로 설정되었으면 OS 로그인이 사용 설정된 것입니다. 인스턴스 및 프로젝트 메타데이터가 모두 설정되었으면 인스턴스 메타데이터에 설정된 값이 우선 적용됩니다.

OS 로그인 사용자 보기

여러 사용자의 프로필 정보를 보려면 pagesizepagetoken 매개변수를 지정해야 합니다. pagesizepagetoken을 필요한 숫자 값으로 바꿉니다.

curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?pagesize=PAGE_SIZE&
pagetoken=PAGE_TOKEN" -H "Metadata-Flavor: Google"

예를 들어 pagesize1로 설정하고 pagetoken0으로 설정하려면 다음 명령어를 실행합니다.

curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?pagesize=1&pagetoken=0" -H "Metadata-Flavor: Google"

대부분의 배포판에서는 Unix 명령어 getent passwd를 실행하여 조직 사용자의 비밀번호 항목을 검색할 수도 있습니다.

특정 OS 로그인 사용자 보기

VM에서 특정 사용자의 프로필 정보를 보려면 다음 명령어를 실행합니다.

curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?username=USERNAME" -H "Metadata-Flavor: Google"

USERNAME을 쿼리할 사용자의 사용자 이름으로 바꿉니다.

예를 들어 사용자 user_example_com을 검색하는 요청을 수행할 수 있습니다. 다음 명령어 및 결과는 가독성을 높이기 위해 추가된 형식을 보여줍니다.

curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?username=user_example_com" -H "Metadata-Flavor: Google"

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

{
    "loginProfiles": [{
        "name": "12345678912345",
        "posixAccounts": [{
            "primary": true,
            "username": "user_example_com",
            "uid": "123451",
            "gid": "123451",
            "homeDirectory": "/home/user_example_com",
            "operatingSystemType": "LINUX"
        }],
        "sshPublicKeys": {
            "204c4b4fb...": {
                "key": "ssh-rsa AAAAB3Nz...",
                "fingerprint": "204c4b4fb..."
            }
        }
    }]
}

대부분의 배포판에서는 getent passwd username 또는 getent passwd uid와 같은 Unix 명령어를 실행하여 프로필 정보를 검색할 수도 있습니다.

사용자의 SSH 키를 검색하려면 /usr/bin/google_authorized_keys USERNAME을 실행하면 됩니다. 키가 반환되지 않으면 해당 사용자에게 VM에 로그인하는 데 필요한 권한이 없을 수 있습니다.

로그인 권한 확인

로그인 및 관리 수준 권한을 보려면 policy=login&email=LOGIN_NAME 쿼리 매개변수를 제공해야 합니다.

  1. 사용자 프로필을 쿼리하여 name 필드 값을 가져옵니다.

    curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?username=user_example_com" -H "Metadata-Flavor: Google"
  2. 결과에서 name을 기록해 둡니다.

  3. name 값을 사용하여 다음 login 명령어를 실행합니다.

    curl "http://metadata.google.internal/computeMetadata/v1/oslogin/authorize?policy=login&email=LOGIN_NAME" -H "Metadata-Flavor: Google"
    

예를 들어 이전 섹션에서 조회한 사용자 user_example_com의 로그인 권한을 쿼리할 수 있습니다.

curl "http://metadata.google.internal/computeMetadata/v1/oslogin/authorize?policy=login&email=12345678912345" -H "Metadata-Flavor: Google"

명령어 결과는 사용자가 VM에 로그인할 권한이 있음을 나타냅니다.

{"success":true}

VM에 서비스 계정이 있는지 확인

메타데이터 서버를 쿼리하여 VM과 연결된 서비스 계정을 찾을 수 있습니다. VM에서 다음 명령어를 실행합니다.

curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/" -H "Metadata-Flavor: Google"

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

12345-sa@developer.gserviceaccount.com/
default/

서비스 계정이 없으면 결과가 비어 있습니다.

다음 단계