액세스 제어

프로젝트 수준에서 역할을 사용하여 액세스 제어를 설정할 수 있습니다. 프로젝트 구성원 또는 서비스 계정에 역할을 부여하여 Google Cloud Platform 프로젝트 및 리소스에 대한 액세스 수준을 결정하세요. 기본적으로 모든 Google Cloud Platform 프로젝트에는 원래 프로젝트 생성자인 단일 사용자가 존재합니다. 사용자가 프로젝트팀 구성원으로 추가되기 전까지 다른 사용자는 프로젝트에 액세스할 수 없으며 따라서 함수에도 액세스할 수 없습니다.

사용자 액세스 제어

사용자를 프로젝트 구성원으로 추가하고 ID 및 액세스 관리(IAM)를 사용하여 역할을 부여할 수 있습니다.

Cloud Functions는 기본 역할 편집자, 소유자, 뷰어를 지원하며 이러한 역할에는 다음 권한이 부여됩니다.

  • 편집자소유자: 모든 함수 관련 리소스에 대한 읽기 및 쓰기 권한입니다. 사용자는 이를 통해 함수를 배포, 업데이트, 삭제할 수 있습니다. 프로젝트의 다른 리소스에 추가로 액세스할 수 있습니다.
  • 뷰어: 함수와 위치에 대한 읽기 전용 액세스 권한입니다. 사용자는 이를 통해 함수를 나열하고 세부정보를 볼 수 있지만 소스 코드를 볼 수는 없습니다. 프로젝트의 다른 리소스에 추가로 액세스할 수 있습니다.

또한 Cloud Functions는 Cloud Functions 선별 역할개발자뷰어를 지원하며, 이들 역할에는 다음 권한이 부여됩니다.

  • 개발자: 모든 함수 관련 리소스에 대한 읽기 및 쓰기 액세스 권한입니다. 사용자는 이를 통해 함수를 배포, 업데이트, 삭제할 수 있습니다. 프로젝트의 다른 리소스에는 액세스할 수 없습니다.
  • 뷰어: 함수와 위치에 대한 읽기 전용 액세스 권한입니다. 사용자는 이를 통해 함수를 나열하고 세부정보를 볼 수 있지만 소스 코드를 볼 수는 없습니다. 프로젝트의 다른 리소스에는 액세스할 수 없습니다.

서비스 계정에 대한 액세스 제어

서비스 계정은 특수한 유형의 Google 계정으로, 다양한 작업을 수행하고 데이터에 액세스하도록 승인되고 인증되어야 하는 사람이 아닌 사용자의 ID 역할을 합니다.

다음 서비스 계정은 모든 Cloud Functions 런타임에 사용됩니다.

이름 구성원 ID 역할
App Engine 기본 서비스 계정 PROJECT_ID@appspot.gserviceaccount.com 편집자
Google Cloud Functions 서비스 에이전트 service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com Cloud Functions 서비스 에이전트

또한 Node.js 8 및 Go 1.11을 제외한 모든 런타임에는 다음 서비스 계정이 필요합니다.

이름 구성원 ID 역할
PROJECT_NUMBER@cloudbuild.gserviceaccount.com Cloud Build 서비스 계정
Cloud Build 서비스 계정 service-PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com Cloud Build 서비스 에이전트
Google Container Registry 서비스 에이전트 service-PROJECT_NUMBER@containerregistry.iam.gserviceaccount.com Container Registry 서비스 에이전트

런타임 서비스 계정

런타임 환경에서 Cloud Functions는 기본적으로 프로젝트에서 편집자 역할을 수행하는 App Engine 기본 서비스 계정(PROJECT_ID@appspot.gserviceaccount.com)을 사용합니다. 이 서비스 계정의 역할을 변경하여 실행 중인 함수에 대한 권한을 제한하거나 확장할 수 있습니다. 함수별로 기본이 아닌 서비스 계정을 제공하여 사용되는 서비스 계정을 변경할 수도 있습니다.

서비스 계정에 대해 자세히 알아보려면 서비스 계정 문서를 참조하세요.

관리 서비스 계정

함수를 생성, 업데이트 또는 삭제하는 동안 프로젝트에서 관리 작업을 수행하려면 Cloud Functions의 모든 프로젝트에 Google Cloud Functions 서비스 에이전트 서비스 계정(service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com)이 필요합니다.

또한 Node.js 8 및 Go 1.11을 제외한 모든 런타임은 프로젝트 내에서 컨테이너 이미지 빌드와 스토리지를 수행합니다. 이 경우 다음을 프로비저닝해야 합니다.

이러한 서비스 계정에는 위의 에 나열된 역할이 있어야 합니다.

Google Cloud Functions 서비스 에이전트 서비스 계정

기본적으로 Google Cloud Functions 서비스 에이전트 서비스 계정(service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com)에는 프로젝트에 대한 cloudfunctions.serviceAgent 역할이 있습니다. 해당 계정의 권한을 변경하면 함수를 생성, 업데이트, 삭제하지 못할 수 있습니다.

cloudfunctions.serviceAgent 역할에는 다음과 같은 권한이 있습니다.

권한 설명
pubsub.subscriptions.* 사용자 프로젝트의 구독을 관리합니다.
pubsub.topics.create 함수가 배포되면 새로운 주제를 생성합니다.
pubsub.topics.attachSubscription 기존 주제에 구독을 첨부합니다.
pubsub.topics.get 함수가 트리거될 기존 주제를 가져옵니다.
pubsub.subscriptions.get 함수를 트리거하는 구독을 가져옵니다.
pubsub.topics.list Pub/Sub 주제의 존재 여부를 확인하는 데 필요합니다.
iam.serviceAccounts.{getAccessToken, signBlob} 런타임 서비스 계정 사용자 인증 정보를 가져옵니다.
iam.serviceAccounts.getOpenIdToken 에이전트가 사용자 지정 권한에 대한 OpenID 토큰을 가져오는 데 필요합니다. OpenID 토큰은 IAM이 사용 설정된 함수를 호출하는 데 사용됩니다.
resourcemanager.projects.get 프로젝트 세부정보를 가져옵니다.
resourcemanager.projects.getIamPolicy 함수의 출처를 파악합니다.
firebasedatabase.instances.{get, update} Firebase 실시간 데이터베이스에 의해 트리거된 함수를 생성합니다.
storage.buckets.{get, update} 함수를 트리거하는 GCS 버킷에서 알림을 구성합니다.
storage.buckets.create,
storage.objects.{delete, get, create, list}
사용자 프로젝트에 소스 코드를 저장하는 데 필요합니다.
clientauthconfig.clients.list IAM으로 보호되는 HTTP 함수에 대한 프로젝트의 OAuth 클라이언트를 나열합니다.
cloudfunctions.functions.invoke IAM으로 보호되는 HTTP 함수를 호출합니다.
compute.globalOperations.get,
compute.networks.access,
vpcaccess.connectors.{get, use}
소비자 프로젝트 VPC에 액세스할 수 있는 함수를 프로비저닝합니다.
cloudbuild.customworkers.builder Cloud Build 커스텀 작업자에서 빌드를 만듭니다.
cloudbuild.builds.editor,
serviceusage.services.use
사용자 프로젝트에서 빌드를 수행하기 위해 Cloud Build를 사용하는 데 필요합니다.

현재 사용하는 서비스 역할을 제거하고 Cloud Functions 서비스 에이전트 역할을 추가하여 이 서비스 계정을 기본 역할로 재설정할 수 있습니다.

gcloud projects add-iam-policy-binding PROJECT_ID \
  --member serviceAccount:service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com \
  --role roles/cloudfunctions.serviceAgent

권한 오류 문제해결

프로젝트에서 함수를 배포, 업데이트, 삭제 또는 실행 시에 권한 오류가 발생하면 다음 단계를 수행합니다.

  1. 프로젝트에 대한 편집자소유자 역할이 있는지 또는 Cloud Functions 개발자 역할을 사용하고 있는지 확인합니다.
    Cloud Functions 개발자 역할을 사용하고 있다면 사용자에게 IAM 서비스 계정 사용자 역할을 부여했는지 확인합니다.
  2. Cloud Functions 서비스 계정(service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com)에 프로젝트에 대한 cloudfunctions.serviceAgent 역할이 있는지 확인합니다.
  3. Pub/Sub 또는 Cloud Storage와 같은 트리거 소스에 대한 권한이 있는지 확인합니다.

함수 실행 시 '권한 부족' 오류가 발생하거나 다른 인증 문제가 발생하는 경우, 런타임 서비스 계정에 함수에서 필요한 리소스에 액세스할 수 있는 올바른 권한이 있는지 확인한 후 위의 2단계와 3단계를 수행합니다.

배포 중에 '서비스를 사용할 수 없음' 오류가 발생하면 런타임 서비스 계정 PROJECT_ID@appspot.gserviceaccount.com이 프로젝트에 있는지 확인합니다. 이 서비스 계정이 삭제된 경우 계정을 다시 만들려면 서비스 계정 삭제 취소를 참조하세요.

Cloud Functions 문제 해결도 참조하세요.