함수 ID

런타임 서비스 계정

함수를 실행하는 동안 Cloud Functions는 서비스 계정 PROJECT_ID@appspot.gserviceaccount.com을 ID로 사용합니다. 예를 들어 Google Cloud 클라이언트 라이브러리를 사용하여 Google Cloud Platform 서비스에 대해 요청을 실행할 때 Cloud Functions는 토큰을 자동으로 가져와 이 ID에 사용할 권한이 있는 서비스에 권한을 부여할 수 있습니다.

기본 권한 변경

기본적으로 런타임 서비스 계정에는 편집자 역할이 있으므로 여러 GCP 서비스에 액세스할 수 있습니다. 이 방법이 함수를 개발하는 가장 빠른 방법이기는 하지만 프로덕션 환경에서 함수에 필요 이상으로 과도한 권한을 줄 수 있으므로 최소한의 권한으로 액세스하도록 구성해야 합니다.

Console

  1. Google Cloud Console로 이동합니다.

    Google Cloud Console로 이동

  2. 테이블에서 App Engine 기본 서비스 계정(PROJECT_ID@appspot.gserviceaccount.com)을 선택합니다.

  3. 행 오른쪽에 있는 연필을 클릭하여 권한 수정 탭을 표시합니다.

  4. 최소한의 액세스 권한을 제공하도록 역할 드롭다운에서 역할을 추가 또는 삭제합니다.

  5. 저장을 클릭합니다.

GCloud

편집자 역할을 삭제한 다음 gcloud projects add-iam-policy-binding 명령어를 사용하여 새 역할을 추가합니다.

# Remove the Editor role
gcloud projects remove-iam-policy-binding PROJECT_ID \
  --member="PROJECT_ID@appspot.gserviceaccount.com"
  --role="roles/editor"

# Add the desired role
gcloud projects add-iam-policy-binding PROJECT_ID \
  --member="PROJECT_ID@appspot.gserviceaccount.com"
  --role="ROLE"

여기서 PROJECT_ID는 사용 중인 프로젝트의 ID이고 ROLE은 런타임 서비스 계정에 할당할 새 역할입니다.

함수별 ID

다른 리소스에 모두 액세스하는 함수가 여러 개 있는 경우에 각 함수에 고유한 ID를 부여해야 할 수 있습니다. 올바른 역할을 가진 명명된 서비스 계정으로 함수를 배포하여 이 작업을 수행할 수 있습니다. 배포되는 서비스 계정은 연결된 함수와 동일한 프로젝트에서 만들어져 있어야 합니다.

기본이 아닌 ID를 사용하는 데 필요한 권한

기본이 아닌 서비스 계정으로 함수를 배포하려면 배포되는 서비스 계정에 대한 iam.serviceAccounts.actAs 권한이 배포자에게 있어야 합니다.

사용자가 서비스 계정을 만들면 해당 사용자에게 자동으로 이 권한이 부여됩니다. 그렇지 않으면 올바른 권한을 가진 사용자가 배포자에게 서비스 계정에 대한 이 권한을 부여해야만 사용자가 함수를 배포할 수 있습니다.

기본이 아닌 ID로 새 함수 배포

새 ID로 함수를 배포하기 전에 사용할 서비스 계정이 이미 만들어져 있는지 확인합니다. 그렇지 않으면 서비스 계정 생성 및 관리 방법에 대해 알아보세요.

Console

  1. Google Cloud Console로 이동합니다.

    Google Cloud Console로 이동

  2. 원하는 대로 함수를 구성합니다.

  3. 추가 설정을 표시하려면 환경 변수, 네트워킹, 제한 시간 등을 클릭합니다.

  4. 서비스 계정 드롭다운을 클릭하고 원하는 서비스 계정을 선택합니다.

  5. 만들기를 클릭합니다.

GCloud

gcloud functions deploy를 사용하여 함수를 배포할 때 --service-account 플래그를 추가합니다. 예를 들면 다음과 같습니다.

gcloud functions deploy FUNCTION_NAME --service-account SERVICE_ACCOUNT_EMAIL

여기서 FUNCTION_NAME은 함수 이름이고 SERVICE_ACCOUNT_EMAIL은 새 ID와 연결된 서비스 계정입니다.

기존 함수의 ID 업데이트

기존 함수를 업데이트하여 새 런타임 서비스 계정으로 사용할 수도 있습니다.

Console

  1. Google Cloud Console로 이동합니다.

    Google Cloud Console로 이동

  2. 원하는 함수 이름을 클릭하여 세부정보 페이지로 이동합니다.

  3. 세부정보 페이지의 맨 위에 있는 수정 연필을 클릭하여 함수를 편집합니다.

  4. 추가 설정을 표시하려면 환경 변수, 네트워킹, 제한 시간 등을 클릭합니다.

  5. 서비스 계정 드롭다운을 클릭하고 원하는 서비스 계정을 선택합니다.

  6. 배포를 클릭합니다.

GCloud

gcloud functions deploy를 사용하여 함수를 배포할 때 --service-account 플래그를 추가합니다.

gcloud functions deploy FUNCTION_NAME --service-account SERVICE_ACCOUNT_EMAIL

여기서 FUNCTION_NAME은 함수 이름이고 SERVICE_ACCOUNT_EMAIL은 새 ID와 연결된 서비스 계정입니다.

ID 및 액세스 토큰 가져오기

Compute 메타데이터 서버를 사용하여 ID 토큰과 액세스 토큰을 가져올 수 있으며 로컬 컴퓨터에서 직접 메타데이터 서버를 쿼리할 수 없습니다.

ID 토큰

다른 Cloud Functions나 ID 토큰을 검증할 수 있는 다른 서비스를 호출할 때 ID 토큰을 사용합니다.

다음과 같이 Compute 메타데이터 서버를 사용하여 특정 대상이 있는 ID 토큰을 가져올 수 있습니다.

curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/identity?audience=AUDIENCE" \
  -H "Metadata-Flavor: Google"

여기서 AUDIENCE는 요청된 JWT 대상입니다. 예를 들어 https://service.domain.com과 같은 호출 중인 서비스의 URL 또는 1234567890.apps.googleusercontent.com과 같은 IAP 보호 리소스의 OAuth 클라이언트 ID입니다.

액세스 토큰

Google API를 호출할 때 액세스 토큰을 사용합니다.

기본적으로 액세스 토큰에는 cloud-platform 범위가 있으며, IAM에서도 액세스를 허용한다면 모든 Google Cloud Platform API에 액세스할 수 있습니다. 다른 Google 또는 Google Cloud APIs에 액세스하려면 해당 범위의 액세스 토큰을 가져와야 합니다.

Compute 메타데이터 서버를 사용하여 액세스 토큰을 가져올 수 있습니다.

특정 범위의 액세스 토큰이 필요하면 다음과 같이 액세스 토큰을 생성할 수 있습니다.

curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token?scopes=SCOPES" \
  -H "Metadata-Flavor: Google"

여기서 SCOPES는 요청된 OAuth 범위를 쉼표로 구분한 목록입니다. 예를 들면 다음과 같습니다. https://www.googleapis.com/auth/drive,https://www.googleapis.com/auth/spreadsheets

필요한 범위를 찾으려면 Google OAuth 범위의 전체 목록을 참조하세요.

다음 단계

함수에 대한 액세스를 관리하거나 안전하게 개발자, 함수, 최종 사용자를 인증하는 방법 알아보기