OS 로그인 문제 해결

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

가상 머신(VM) 인스턴스 내에서 메타데이터 서버를 쿼리할 수 있습니다. 자세한 내용은 인스턴스 메타데이터 저장 및 검색을 참조하세요.

시작하기 전에

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

Compute Engine은 OS 로그인 정보를 제공하는 기본 메타데이터 항목의 집합을 정의합니다. 기본 메타데이터는 항상 서버에서 정의되고 설정됩니다. 다음 표에는 쿼리할 수 있는 항목이 설명되어 있습니다.

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

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

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

OS 로그인이 구성 여부 확인

인스턴스 메타데이터와 프로젝트 메타데이터가 모두 설정된 경우 인스턴스 메타데이터가 우선합니다. VM에서 다음 명령어를 실행할 수 있습니다.

  1. 인스턴스 메타데이터에 OS 로그인이 구성되어 있는지 확인합니다.

    curl "http://metadata.google.internal/computeMetadata/v1/instance/attributes/enable-oslogin" -H "Metadata-Flavor: Google"
    

    인스턴스에 OS 로그인이 구성되어 있으면 출력은 TRUE입니다. 404 오류는 인스턴스 메타데이터에 OS 로그인이 구성되지 않았음을 나타냅니다.

  2. 인스턴스의 메타데이터 값이 구성되어 있지 않으면 프로젝트에 OS 로그인이 구성되었는지 확인할 수 있습니다.

    curl "http://metadata.google.internal/computeMetadata/v1/project/attributes/enable-oslogin" -H "Metadata-Flavor: Google"
    

    프로젝트에 OS 로그인이 구성된 경우 출력은 TRUE입니다. 404 오류는 프로젝트 메타데이터에 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/

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

다음 단계