게시글소개

(번역) Docker에서 GCP 인증하기 - Application Default Credentials (ADC)

CodePsy-2001,DevOpsDockerGCP

번역 원문: Authentication on GCP with Docker: Application Default Credentials

Google Cloud Platform을 이용해서 작업하다 보면, 다음과 같은 사항을 익히게 됩니다.

이 모든 것이 마법처럼 작동하고, 거의 모든 애플리케이션에 적용됩니다! 도대체 어떻게 이루어지는 걸까요? 만약 사용자 자격 증명(user credentials)을 사용해서 도커로 빌드한 응용 프로그램을 실행하려면 어떻게 해야 하는거죠? gcloud auth application-default login을 실행할 때, 대체 어떤 일이 벌어지는 걸까요?

이 글은 마법의 배후에 있는 공학을 밝혀냅니다. 또한 사용자 자격 증명을 사용해 도커로 빌드한 응용 프로그램을 실행하는 방법에 대해서도 설명합니다.

이 이야기를 쓰기 위해, 저는 파이썬 및 자바용 구글 인증 라이브러리를 잠깐 살펴보았습니다. 더 자세한 정보를 원하시면, 직접 코드를 한번 살펴보세요!

ADC: Application Default Credentials

위에서 설명한 “자동” 인증은 ADC(Application Default Credentials)라는 원리로 작동합니다.

ADC 흐름은 GCP 리소스와 상호작용하려는 응용 프로그램이 임시 IAM 액세스(bearer) 토큰을 얻기 위해 따라야 하는 일련의 단계입니다. ADC 흐름은 모든 Google Cloud의 클라이언트 라이브러리 및 인증 라이브러리에서 구현(이용)됩니다. 거의 모든 애플리케이션이 이러한 라이브러리를 사용하여 인증을 처리하기 때문에, GCP를 사용한 인증과 관련해 애플리케이션이 일관되게 동작하는 것이죠.

ADC 흐름

ADC 흐름은 다음과 같은 단계를 따릅니다:

참고로:

ADC 이름

컴퓨터 과학에는 두 가지 어려운 문제가 있습니다: 캐시 무효화, 이름 짓기, 그리고 배열을 1부터 세기.

ADC라는 이름은 다소 혼란스럽습니다. 그냥 자격 증명(credentials)이라고 부르면 안 되는 걸까요? 저의 의견은 다음과 같습니다:

저는 ADC 적용과 관련된 일련의 단계를 지칭하기 위해 **“ADC 흐름”**이라는 용어를 사용하는 것을 선호합니다.

Docker에서 ADC 사용하기

위의 내용을 알고 있으면, Docker에서 ADC 흐름을 작동시키는 것은 매우 쉽습니다! ADC는 애플리케이션 기본 자격 증명 파일을 컨테이너 내부에 볼륨으로 마운트하고, 환경변수 GOOGLE_APPLICATION_CRENTIES가 해당 파일을 가리킬 때 작동합니다. 따라서 기본 Unix 시스템의 Google Cloud SDK 구성 폴더가 표준 위치에 있다고 가정하면 명령은 다음과 같습니다:

docker run -v "$HOME/.config/gcloud/application_default_credentials.json":/gcp/creds.json:ro \
  --env GOOGLE_APPLICATION_CREDENTIALS=/gcp/creds.json \
  ...

Google Cloud SDK

그럼, 이게 다일까요? 그럴 수도 있고, 아닐 수도 있습니다. 기술적으로 위의 솔루션은 실행 중인 컨테이너에서 ADC를 사용할 수 있게 해주지만, ADC 흐름을 따르지 않는 중요한 애플리케이션 세트도 있습니다… 바로 Google Cloud SDK 자기 자신이죠! 여기에는 gcloud뿐만 아니라 bq나 gsutil과 같은 gcloud와 함께 쓰이는 도구도 포함됩니다. 도커 컨테이너 내에서 이러한 도구를 사용하려는 경우 위의 솔루션은 작동하지 않습니다.

어떻게 google cloud SDK 자기 자신을 인증할까?

Cloud SDK는 사용자 자격 증명, 서비스 계정 자격 증명 또는 메타데이터 서비스를 사용하여 다른 애플리케이션과 동일한 방식으로 자체 인증합니다. 그러나, 그들은 일반적인 위치(ADC 흐름에서 쓰이는 위치)에서 인증 파일들을 찾지 않습니다. 대신 SDK 도구는 로그인한 사용자 및 서비스 계정의 자격 증명을 로컬 데이터베이스에 저장하는데요. 사용자 프로필 사이를 쉽게 전환하기 위해 gcloud 명령을 사용할 수 있긴 하지만, 약간 유감스럽네요.

참고로:

ADC와 Cloud SDK가 Docker에서 함께 작동하도록 셋팅하기

Cloud SDK와 ADC를 모두 작동시키려면 컨테이너 내부에 전체 Cloud SDK 구성 디렉토리를 볼륨 마운트하는 것이 좋습니다. 다소 부담스럽지만, 강력한 솔루션이에요. 그런 다음 Cloud SDK에 마운트된 볼륨을 구성 디렉터리로 사용하도록 지시할 수 있습니다:

docker run -v "$HOME/.config/gcloud:/gcp/config:ro" \
  -v /gcp/config/logs \
  --env CLOUDSDK_CONFIG=/gcp/config \
  --env GOOGLE_APPLICATION_CREDENTIALS=/gcp/config/application_default_credentials.json \
  ...

이 코드 조각은 다음과 같이 작동합니다:


이게 다에요! ADC, Cloud SDK의 자체 인증 방법, Docker를 사용하여 인증 문제를 제거하고 원활한 개발 환경을 구축하는 방법에 대해 알아야 할 모든 사항을 확인해 봤습니다!

저는 벨기에 루벤에 본사를 둔 독립적인 데이터 엔지니어링 및 데이터 분석 컨설팅 회사인 Data Minded에서 근무하고 있습니다. 만약 GCP가 당신을 슬프게 한다면, 언제든지 연락해 주세요! (참고로, 저희는 AWS, Azure, Terraform, Spark 등에도 관심이 있습니다.)


댓글

© CodePsy-2001.