본문 바로가기
파이썬(Python)

Google Cloud Functions 사용하기 - 인증 호출으로 코드 실행하기

by 기계공학 주인장 2025. 1. 23.
반응형

이전 포스팅에서 Python 코드를 Cloud Functions에 업로드하는 작업을 했습니다.

 

https://android-developer.tistory.com/106

 

Google Cloud Functions 사용하기 - Python 코드 배포하기

이전 포스팅에서 Cloud Functions를 사용하기 위한 셋업을 진행했습니다. https://android-developer.tistory.com/105 Google Cloud Functions 사용하기 - 기초 Cloud CLI 셋업파이썬으로 정기적으로 스크립트를 실행하

android-developer.tistory.com

 

이번에는 업로드한 해당 코드를 호출해서 사용하는 방법에 대해 알아보겠습니다.

 


Cloud Functions를 인증 호출로 실행하기

Cloud Functions에 넣은 코드를 실행할 때는 "인중 호출"이라는 방법으로 호출해서 사용할 수 있습니다.

 

왜 인증 호출이냐?

 

이전 포스팅에서 인증된 사용자만 호출할 수 있게 설정했기 때문입니다.

 

 

그렇기 때문에 다음과 같은 방법으로 Cloud Functions에 업로드한 함수를 실행할 수 있습니다.

 

https://cloud.google.com/functions/docs/securing/authenticating?hl=ko

 

호출 인증  |  Cloud Run functions Documentation  |  Google Cloud

Cloud Functions 이름이 Cloud Run Functions로 변경되었습니다. 자세한 내용은 Cloud Run Functions 블로그 게시물을 참조하세요. 이 페이지는 Cloud Translation API를 통해 번역되었습니다. 의견 보내기 컬렉션을

cloud.google.com


1. 엑세스 가능한 인증된 사용자 선별하기

 

먼저 인증된 사용자를 누구로 할 것인가를 정할 수 있어야합니다.

 

(기본적으로 개발자는 프로젝트 관리자니 이런거 없어도 호출할 수 있지만....)

 

Cloud Functions에서는 IAM 승인을 통해 인증된 사용자를 정할 수 있습니다.

 

https://cloud.google.com/functions/docs/securing/managing-access-iam?hl=ko#adding_principals_and_granting_roles

 

IAM으로 액세스 승인  |  Cloud Run functions Documentation  |  Google Cloud

Cloud Functions 이름이 Cloud Run Functions로 변경되었습니다. 자세한 내용은 Cloud Run Functions 블로그 게시물을 참조하세요. 의견 보내기 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저

cloud.google.com

 

IAM 승인을 하는 방법에 대해서는 다른 포스팅에서 좀 더 자세히 설명하겠습니다.

 

이번 포스팅에서는 테스트 방법과 어떤 방법으로 인증된 사용자로써 함수를 호출할 수 있는지 알아보겠습니다.

 


 

2. 개발자 테스트로 인증 호출 해보기 = 커맨드로 함수 호출하기

 

먼저 개발자가 할 수 있는 인증 함수 호출 방법입니다.

 

개발자는 일반적으로 커맨드 라인을 통해 간단하게 호출하고 응답을 받을 수 있어야합니다.

 

https://cloud.google.com/functions/docs/securing/authenticating?hl=ko#example_1_authenticate_developer_testing

 

호출 인증  |  Cloud Run functions Documentation  |  Google Cloud

Cloud Functions 이름이 Cloud Run Functions로 변경되었습니다. 자세한 내용은 Cloud Run Functions 블로그 게시물을 참조하세요. 이 페이지는 Cloud Translation API를 통해 번역되었습니다. 의견 보내기 컬렉션을

cloud.google.com

 

그래서  다음과 같은 커맨드로 특정 함수를 간단히 호출할 수 있습니다.

 

curl  -H "Authorization: Bearer $(gcloud auth print-identity-token)" \
  https://FUNCTION_URL

 

  • FUNCTION_URL: 함수 URL

FUNCTION_URL은 그냥 콘솔에서 해당 함수에 들어간 뒤 얻을 수 있는 URL입니다.

 

콘솔에서 확인할 수 있는 URL

 

위 커맨들를 실행하면 다음과 같은 결과를 얻을 수 있습니다.

 

커맨드로 인증 호출 결과


3. google 계정의 OAuth2 토큰을 가져와서 인증 호출 사용하기

 

다음과 같은 방법을 통해 구글 계정의 OAuth2 토큰을 가져올 수 있습니다.

 

(하지만, 이 방법으로는 구글 계정 중에서 특정할 수 없습니다. 그렇기 때문에 구글에서는 추천하지 않는 방식입니다.)

 

import com.google.android.gms.auth.api.signin.GoogleSignIn
import com.google.android.gms.auth.api.signin.GoogleSignInAccount
import com.google.android.gms.tasks.Task

fun getIdToken(account: GoogleSignInAccount, clientId: String): String? {
    return account.getIdToken(clientId)
}

// GoogleSignInAccount 가져오기 예시
val account: GoogleSignInAccount? = GoogleSignIn.getLastSignedInAccount(context)
val token = account?.let { getIdToken(it, "YOUR_CLIENT_ID") }


위에서 얻은 토큰과 fucntions URL을 사용하여 다음과 같은 방법으로 호출할 수 있습니다.

 

val functionUrl = "https://asia-northeast1-salenavi-448312.cloudfunctions.net/python-http-function"
val token = "YOUR_ID_TOKEN"  // 인증 토큰

val cloudFunctionCaller = CloudFunctionCaller()
val response = cloudFunctionCaller.callFunction(functionUrl, token)

println("Response: $response")

 

더 나은 방법(=구글 공식 권장 방법)은 IAM 서비스로 권한을 부여 받은 사용자를 자동으로 추가하는 기능을 만들어서

 

해당 사용자들만 사용할 수 있게하는 것입니다.

 

https://cloud.google.com/functions/docs/securing/managing-access-iam?hl=ko#adding_principals_and_granting_roles

 

IAM으로 액세스 승인  |  Cloud Run functions Documentation  |  Google Cloud

Cloud Functions 이름이 Cloud Run Functions로 변경되었습니다. 자세한 내용은 Cloud Run Functions 블로그 게시물을 참조하세요. 의견 보내기 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저

cloud.google.com

 

 

이 부분은 다음 포스팅에서 알아보겠습니다.


Cloud Functions를 인증 호출로 실행하기 정리

  • IAM에서 인증된 사용자 선별하기
  • 개발자의 경우 curl 커맨드로 호출 가능
  • OAuth2 토큰을 사용해서 인증 호출 함수하기

 

다음 포스팅에서는 Cloud Scheduler를 사용해서 정해진 시간에 해당 함수를 호출하는 방법에 대해 설명하겠습니다. 

반응형


"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."


댓글