애플리케이션 개발자를 위한 GCP 에서의 인증

요약

OS 에서 환경설정 또는 gcloud 설정 또는 VM에서 실행을 하고 애플리케이션 코드에서는 credentials를 지정하지 않도록 구성을 함.

애플리케이션에서는  Google Cloud 클라이언트 라이브러리 를 이용하면 애플리케이션 기본 사용자 인증 정보(ADC)를 이용하여 필요한 사용자 인증 정보를 자동으로 찾아 애플리케이션을 인증할 수 있음.

그렇게 해야 로컬PC 및 GCP VM에서도 동일한 코드로 프로그램 실행을 할 수 있다.

  • 로컬PC에서 애플리케이션 테스팅을 할 때는 gcloud auth application-default login

  • GCP VM에서 애플리케이션 테스팅을 할 때는 서비스 계정에 role 할당을 해서 처리

인증 개요

https://cloud.google.com/docs/authentication

주 구성원. 리소스에 대한 액세스 권한을 부여받을 수 있는 항목(ID라고도 함)입니다. 

  • 사용자 계정

  • 서비스 계정

Google Cloud APIs는 서로 다른 런타임 환경에서 다양한 인증 흐름을 지원합니다. 최상의 개발자 환경을 위해 Google Cloud API에 Google Cloud 클라이언트 라이브러리를 사용하는 것이 좋습니다. Google Cloud API는 다양한 인증 흐름과 런타임 환경을 지원하는 Google에서 제공하는 인증 라이브러리를 사용합니다.

인증 시작하기

https://cloud.google.com/docs/authentication/getting-started

서비스 계정 만들고 키를 만들어서 환경변수 설정하는 내용이 나옴.

https://cloud.google.com/docs/authentication/getting-started#verifying_authentication 인증 확인 문서에서 각종 언어별로 예제를 보여주고 있음.

https://github.com/GoogleCloudPlatform/python-docs-samples/blob/HEAD/auth/cloud-client/snippets.py → 이 예제를 보면 암묵적으로 사용자 인증 정보 확인, 명시적으로 service account credentials 를 지정하기, 명시적으로 Compute Engine credentials 지정하기의 내용이 나옴.

결론은 OS 에서 환경설정 또는 gcloud 설정 또는 VM에서 실행을 하고 애플리케이션 코드에서는 credentials를 지정하지 않도록 구성을 함. 그렇게 해야 로컬PC 및 GCP VM에서도 동일한 코드로 프로그램 실행을 할 수 있다.

def implicit(): from google.cloud import storage # If you don't specify credentials when constructing the client, the # client library will look for credentials in the environment. storage_client = storage.Client() # Make an authenticated API request buckets = list(storage_client.list_buckets()) print(buckets)

애플리케이션 인증 방법 선택

https://cloud.google.com/docs/authentication/best-practices-applications

로컬PC에서 테스팅을 할때 (사전에 gcloud 설정을 해야 함)

  • 인터랙티브하게 작업을 하는 경우에는 gcloud auth login

  • 코드에서 API call을 하고 Application Default Credentials(ADC)를 쓰는 경우에는 gcloud auth application-default login

프로그래밍 방식으로 GCP를 사용할 경우 GOOGLE_APPLICATION_CREDENTIALS 환경 변수를 사용하는 것이 다른 방법 보다 우선순위가 높기 때문에, ADC 사용 시 GOOGLE_APPLICATION_CREDENTIALS 환경 변수를 설정하지 않아야 합니다.

GCP에서 개발을 할 때

  • 서버리스나 Compute (VM)에서 애플리케이션을 실행할 경우 default credentials 과 Application Default Credentials(ADC) 을 쓰면 자동으로 보안 토큰을 가져오고 인증을 하게 됨.

 

Unknown Attachment

 

Application Default Credentials(ADC)

https://google.aip.dev/auth/4110

ADC에서 지원하는 Credential Types

  • Gcloud Credential

  • Service Account Key

  • OAuth Client ID

환경변수 지원

  • GOOGLE_APPLICATION_CREDENTIALS

  • GOOGLE_API_USE_CLIENT_CERTIFICATE

 

Expected Behavior 에 ADC의 순서가 나와있다.

GOOGLE_APPLICATION_CREDENTIALS 환경변수를 찾는다 → gcloud 설정, 서비스 계정 json 파일 등을 찾아서 credentials 불러온다 → VM에서 credentials 찾는다 → auth 흐름을 판단해서 auth 흐름 실행

  1. Check Environment Variables

  2. Load Credentials

  3. Check Virtual Machine Credentials

  4. Determine Auth Flows

  5. Execute Auth Flows

 

인증정보 자동으로 찾기

https://cloud.google.com/docs/authentication/production#automatically

환경 변수 GOOGLE_APPLICATION_CREDENTIALS가 설정된 경우 ADC는 변수가 가리키는 서비스 계정 키 또는 구성 파일을 사용하고 없으면 리소스에 연결된 서비스 계정을 사용함.