최종 사용자로 인증

대부분의 경우에는 GCP(Google Cloud Platform) API에 인증을 위해 서비스 계정을 사용하는 것이 좋습니다. 일부 경우에는 사용자가 직접 인증하도록 해야 할 수 있습니다. 예:

  • 애플리케이션의 최종 사용자를 대신해서 리소스에 액세스해야 합니다. 예를 들어 애플리케이션이 애플리케이션의 사용자에게 속하는 Google BigQuery 데이터 세트에 액세스해야 합니다.

  • 애플리케이션 대신 개발자가 직접 인증을 수행해야 합니다. 예를 들어 Cloud Resource Manager API는 특정 사용자가 소유하는 프로젝트를 만들고 관리할 수 있으므로, 해당 사용자를 대신해서 프로젝트를 만들려면 사용자로 인증을 수행해야 합니다.

이 가이드에서는 최종 사용자 인증 정보를 설명합니다. 개발자의 애플리케이션에 대해 사용자를 인증하는 과정에 대해서는 설명하지 않습니다. 해당 사용 사례에 대해서는 Firebase 인증을 참조하세요.

인증 흐름

애플리케이션이 사용자를 대신해서 리소스에 액세스해야 할 경우, 애플리케이션이 사용자에게 동의 화면을 표시합니다. 사용자가 수락하면 애플리케이션이 승인 서버에서 사용자 인증 정보를 요청합니다. 이 사용자 인증 정보를 사용해서 애플리케이션은 사용자를 대신해서 리소스에 액세스할 수 있습니다.

이 프로세스는 OAuth 2.0이라고 부르는 프로토콜입니다.

OAuth 2.0 흐름
사용자 동의
사용자 데이터

OAuth 2.0에 대해 자세히 알아보려면 OAuth 2.0을 참조하세요.

API 범위 지정

GCP API에 인증하기 위해 서비스 계정을 사용할 경우, GCP는 API에 대한 전체 액세스 권한으로 서비스 계정을 자동으로 인증합니다. 최종 사용자로 인증할 때는 OAuth 범위를 수동으로 지정해야 합니다. OAuth 범위는 애플리케이션이 최종 사용자를 대신해서 수행할 수 있는 작업을 제한합니다. 예를 들어 이러한 작업에는 Cloud Storage에서 파일 읽기 또는 GCP 프로젝트 관리가 포함될 수 있습니다.

사용 가능한 OAuth 범위에 대한 자세한 내용은 특정 API 페이지를 참조하세요. 예를 들어 Compute Engine API에 대해 disks.get() 메소드를 사용하려는 경우 이러한 OAuth 범위 중 하나를 설정해야 합니다. 사용 사례에 따라 필요한 최소 범위를 설정하세요.

프로젝트 리소스에 대한 액세스 권한 부여 및 제한

프로젝트 내에서 리소스에 액세스하기 위해 최종 사용자 인증 정보를 사용하는 경우, 해당 사용자에게 프로젝트 내의 리소스에 대한 액세스 권한을 부여해야 합니다. 이렇게 하려면 Google Cloud IAM(Identity and Access Management)에서 역할을 설정합니다.

사용자가 액세스할 수 있는 리소스를 제한해야 할 수 있습니다. 특히 개발자가 소유하는 프로젝트의 리소스에 사용자가 액세스하도록 허용할 때 이러한 제한이 필요합니다. 사용자에게 필요한 최소 권한에 따라 역할을 설정합니다.

각 서비스에는 Cloud IAM 역할 집합이 포함되며, 대신 커스텀 역할을 만들도록 선택할 수 있습니다. 자세한 내용은 역할 이해커스텀 역할 만들기 및 관리를 참조하세요.

최종 사용자 인증 예

최종 사용자의 사용자 인증 정보를 가져오려면 다음 섹션을 완료하세요. 다음 단계에서는 BigQuery API가 사용되지만, 클라이언트 라이브러리가 포함된 GCP API를 사용해서 이 프로세스를 복제할 수 있습니다.

프로젝트 설정

  1. Google 계정에 로그인합니다.

    아직 계정이 없으면 새 계정을 등록하세요.

  2. Google Cloud Platform 프로젝트를 선택하거나 만듭니다.

    리소스 관리 페이지로 이동

  3. Google Cloud Platform 프로젝트에 결제가 사용 설정되어 있는지 확인하세요.

    결제 사용 설정 방법 알아보기

  4. BigQuery API를 사용 설정합니다.

    API 사용 설정

  5. BigQuery 클라이언트 라이브러리를 설치합니다.
  6. Python 또는 Node.js를 사용하는 경우에는 추가적인 인증 라이브러리를 설치해야 합니다.

    Python

    Google Auth용 oauthlib 통합을 설치합니다.

    pip install --upgrade google-auth-oauthlib

클라이언트 사용자 인증 정보 만들기

Google Cloud Platform Console에서 클라이언트 사용자 인증 정보를 만듭니다.

  1. GCP Console의 OAuth 동의 화면 페이지로 이동합니다.

  2. 사용자 인증 정보 페이지에서 사용자 인증 정보 만들기 버튼을 선택한 후 OAuth 클라이언트 ID를 선택합니다.

  3. 기타를 선택한 후 만들기 버튼을 선택합니다. 성공 대화상자가 나타나면 확인 버튼을 선택합니다.

  4. 클라이언트 ID의 JSON 다운로드 버튼을 선택하여 사용자 인증 정보를 다운로드합니다.

    JSON 다운로드 버튼

  5. 사용자 인증 정보 파일을 client_secrets.json에 저장합니다. 이 파일을 애플리케이션과 함께 배포해야 합니다.

API 인증 및 호출

  1. 클라이언트 사용자 인증 정보를 사용하여 OAuth 2.0 흐름을 수행합니다.

    Python

    from google_auth_oauthlib import flow
    
    # TODO: Uncomment the line below to set the `launch_browser` variable.
    # launch_browser = True
    #
    # The `launch_browser` boolean variable indicates if a local server is used
    # as the callback URL in the auth flow. A value of `True` is recommended,
    # but a local server does not work if accessing the application remotely,
    # such as over SSH or from a remote Jupyter notebook.
    
    appflow = flow.InstalledAppFlow.from_client_secrets_file(
        'client_secrets.json',
        scopes=['https://www.googleapis.com/auth/bigquery'])
    
    if launch_browser:
        appflow.run_local_server()
    else:
        appflow.run_console()
    
    credentials = appflow.credentials

  2. 인증된 사용자 인증 정보를 사용하여 BigQuery API에 연결합니다.

    Python

    from google.cloud import bigquery
    
    # TODO: Uncomment the line below to set the `project` variable.
    # project = 'user-project-id'
    #
    # The `project` variable defines the project to be billed for query
    # processing. The user must have the bigquery.jobs.create permission on
    # this project to run a query. See:
    # https://cloud.google.com/bigquery/docs/access-control#permissions
    
    client = bigquery.Client(project=project, credentials=credentials)
    
    query_string = """SELECT name, SUM(number) as total
    FROM `bigquery-public-data.usa_names.usa_1910_current`
    WHERE name = 'William'
    GROUP BY name;
    """
    query_job = client.query(query_string)
    
    # Print the results.
    for row in query_job.result():  # Wait for the job to complete.
        print("{}: {}".format(row['name'], row['total']))

샘플 코드를 실행하면 코드가 브라우저를 시작하고 클라이언트 보안 비밀과 연결된 프로젝트에 대한 액세스 권한을 요청합니다. 샘플로 BigQuery 범위가 요청되었기 때문에 결과로 표시된 사용자 인증 정보를 사용해서 사용자의 BigQuery 리소스에 액세스할 수 있습니다.

다른 사용 사례에서는 사용자가 액세스할 수 있는 대상을 확인하기 위해 IAM 역할을 추가해야 할 수 있습니다.

다음 단계

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

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