서비스 계정

이 페이지에서는 서비스 계정, 서비스 계정 유형, 서비스 계정에서 사용할 수 있는 IAM 역할을 설명합니다.

시작하기 전에

  • IAM의 기본 개념 이해

서비스 계정이란 무엇인가요?

서비스 계정은 사용자가 아닌 애플리케이션 또는 가상 머신(VM) 인스턴스에서 사용하는 특별한 유형의 계정입니다. 애플리케이션은 서비스 계정 자체 또는 G Suite로 승인되거나, 도메인 전체 위임을 통해 Cloud ID 사용자로 승인된 승인된 API 호출을 수행하기 위해 서비스 계정을 사용합니다.

예를 들어 Compute Engine VM을 서비스 계정으로 실행할 수 있으며 해당 계정에 필요한 리소스에 대한 액세스 권한을 부여할 수 있습니다. 이렇게 하면 서비스 계정은 서비스의 ID가 되며 서비스 계정의 권한은 서비스가 액세스할 수 있는 리소스를 제어합니다.

서비스 계정은 계정 고유의 이메일 주소로 식별됩니다.

서비스 계정과 사용자 계정의 차이점

서비스 계정은 사용자 계정과 다음과 같은 몇 가지 주요 차이점이 있습니다.

  • 서비스 계정에는 비밀번호가 없으며 브라우저나 쿠키를 통해 로그인할 수 없습니다.
  • 서비스 계정은 Google을 인증하는 데 사용되는 비공개/공개 RSA 키-쌍과 연결되어 있습니다.
  • IAM 권한을 부여하여 다른 사용자(또는 다른 서비스 계정)가 서비스 계정을 가장하도록 허용할 수 있습니다.
  • 서비스 계정은 사용자 계정과 달리 G Suite 도메인의 구성원이 아닙니다. 예를 들어 G Suite 도메인의 모든 구성원과 애셋을 공유하면 서비스 계정과 공유되지 않습니다. 마찬가지로 서비스 계정에서 만든 애셋은 G Suite 또는 Cloud ID 관리자가 소유하거나 관리할 수 없습니다. 도메인 전체 위임은 서비스 계정 자체가 아니라 가장된 사용자로 승인되므로 도메인 전체 위임을 사용하는 경우에는 적용되지 않습니다.

서비스 계정 키

각 서비스 계정은 Google을 인증하는 데 사용되는 두 가지 공개/비공개 RSA 키 쌍 조합인 Google 관리 키 및 사용자 관리 키와 연결되어 있습니다.

Google 관리 키

Google 관리 키 쌍은 Google에서 키의 공개 부분과 비공개 부분을 모두 저장하고 정기적으로 순환시키며(최대 2주까지 각 키를 사용하여 서명할 수 있음) 비공개 키가 항상 에스크로에 보관되며 직접 액세스할 수 없다는 것을 의미합니다. IAM은 이 키를 사용하여 서비스 계정 대신 서명하기 위한 API를 제공합니다. 자세한 내용은 단기 서비스 계정 사용자 인증 정보 만들기를 참조하세요.

사용자 관리 키

사용자 관리 키 쌍은 키 쌍의 공개 부분과 비공개 부분을 모두 소유한다는 것을 의미합니다. Google Cloud 외부에서 사용할 수 있는 하나 이상의 사용자 관리 키 쌍('외부' 키라고도 함)을 만들 수 있습니다. Google에서는 사용자 관리 키의 공개 부분만 저장합니다.

공개 키를 적절한 형식으로 만들고 Google에 업로드할 수도 있으며, 이 경우 지정된 서비스 계정에 영구적으로 연결됩니다. 서비스 계정 키를 만들 때처럼 서비스 계정 대신 서명 작업을 수행해야 하는 경우 업로드된 공개 키가 사용됩니다.

사용자 관리 키 쌍의 비공개 부분은 애플리케이션 기본 사용자 인증 정보에서 가장 일반적으로 사용됩니다. 그런 다음 비공개 키를 사용하여 서버 간 애플리케이션을 인증합니다.

사용자 관리 키에서 비공개 키의 보안 및 키 순환과 같은 다른 관리 작업의 책임은 사용자에게 있습니다. 사용자 관리 키는 IAM API, gcloud 명령줄 도구, Google Cloud Console의 서비스 계정 페이지에서 관리될 수 있습니다. 원활한 키 순환을 위해 서비스 계정당 최대 10개의 서비스 계정 키를 만들 수 있습니다.

키를 안전하게 관리하기 위해 Cloud Key Management Service(Cloud KMS)를 사용하는 것이 좋습니다.

사용자 관리 키 방지

사용자 관리 키는 매우 강력한 사용자 인증 정보이며 제대로 관리하지 않을 경우 보안상 위험할 수 있습니다.

사용을 제한하려면 constraints/iam.disableServiceAccountKeyCreation 조직 정책 제약조건을 프로젝트, 폴더 또는 조직 전체에 적용할 수 있습니다. 제약조건을 적용한 후에는 잘 관리되는 위치에서 사용자 관리 키를 사용하여 관리되지 않는 키로 인한 잠재적 위험을 최소화할 수 있습니다.

서비스 계정 유형

사용자 관리 서비스 계정

IAM API, Cloud Console, gcloud 명령줄 도구를 사용하여 프로젝트에 사용자 관리 서비스 계정을 만들 수 있습니다. 이러한 계정을 관리하고 보호해야 합니다.

기본적으로 프로젝트에서 최대 100개의 사용자 관리 서비스 계정을 만들 수 있습니다. 이 할당량이 요구사항을 충족하지 않으면 Cloud Console을 사용하여 할당량 증가를 요청할 수 있습니다. 이 페이지에 설명된 기본 서비스 계정은 이 할당량에 포함되지 않습니다.

프로젝트에서 사용자 관리 서비스 계정을 만들 때 서비스 계정의 이름을 선택합니다. 이 이름은 서비스 계정을 식별하는 이메일 주소에 표시되며 다음 형식을 사용합니다.

service-account-name@project-id.iam.gserviceaccount.com

기본 서비스 계정

일부 Google Cloud 서비스를 사용하면 다른 Google Cloud 리소스에 액세스하는 작업을 서비스가 배포할 수 있도록 하는 사용자 관리 서비스 계정이 생성됩니다. 이러한 계정을 기본 서비스 계정이라고 합니다.

기본 서비스 계정을 사용하면 Google Cloud 서비스를 시작할 수 있습니다. 프로덕션 워크로드의 경우 나만의 사용자 관리 서비스 계정을 만들고 각 서비스 계정에 적절한 역할을 부여하는 것이 좋습니다.

기본 서비스 계정이 생성되면 프로젝트에 대한 편집자 역할(roles/editor)이 자동으로 부여됩니다. 이 역할에는 매우 많은 권한이 포함됩니다. 최소 권한 원칙을 따르려면 조직 정책에 제약조건을 추가하거나 편집자 역할을 수동으로 취소하여 자동 역할 부여를 사용 중지하는 것이 좋습니다. 역할 부여를 사용 중지하거나 취소하는 경우 기본 서비스 계정에 부여할 역할을 결정해야 합니다.

다음 표에는 기본 서비스 계정을 만드는 서비스가 나와 있습니다.

서비스 서비스 계정 이름 이메일 주소
App Engine 및 App Engine을 사용하는 모든 Google Cloud 서비스 App Engine 기본 서비스 계정 project-id@appspot.gserviceaccount.com
Compute Engine 및 Compute Engine을 사용하는 모든 Google Cloud 서비스 Compute Engine 기본 서비스 계정 project-number-compute@developer.gserviceaccount.com

Google 관리 서비스 계정

사용자 관리 서비스 계정과 기본 서비스 계정 외에도 프로젝트의 IAM 정책, Cloud Console, 감사 로그에 다른 서비스 계정이 표시될 수 있습니다. 이러한 서비스 계정은 Google에서 생성 및 관리되며, Google 서비스에 사용됩니다.

대부분의 Google 관리 서비스 계정의 표시 이름은 'Service Agent' 또는 'Service Account'로 끝납니다. 이러한 서비스 계정은 일부는 확인 가능하며, 일부는 숨겨져 있습니다.

예를 들면 다음과 같습니다.

  • Google API 서비스 에이전트. 프로젝트에는 project-number@cloudservices.gserviceaccount.com 형식을 사용하는 이메일 주소가 포함된 Google API 서비스 에이전트라는 서비스 계정이 포함될 수 있습니다.

    이 서비스 계정은 사용자 대신 내부 Google 프로세스를 실행합니다. 여기에는 프로젝트에 대한 편집자 역할(roles/editor)이 자동으로 부여됩니다.

  • Google 관리 서비스 계정의 역할 관리자. IAM의 감사 로그는 서비스 계정 one-platform-tenant-manager@system.gserviceaccount.com을 참조할 수 있습니다.

    이 서비스 계정은 다른 Google 관리 서비스 계정에 부여된 역할을 관리합니다. 감사 로그에서만 볼 수 있습니다.

    예를 들어 새로운 API를 사용하는 경우 Google은 자동으로 새 Google 관리 서비스 계정을 만들고 프로젝트의 서비스 계정에 역할을 부여할 수 있습니다. 이러한 역할을 부여하면 one-platform-tenant-manager@system.gserviceaccount.com이 프로젝트의 IAM 정책을 설정했음을 나타내는 감사 로그 항목이 생성됩니다.

  • 다른 Google 관리 서비스 계정. 역할은 프로젝트의 다른 Google 관리 서비스 계정에 자동으로 부여될 수 있습니다. 이러한 역할의 이름은 일반적으로 serviceAgent로 끝납니다.

다음 표에는 Google API 서비스 에이전트 및 역할 관리자 외에 프로젝트에 존재할 수 있는 일부 Google 관리 서비스 계정이 나와 있습니다. 또한 이러한 각 서비스 계정의 이메일 주소 형식을 보여줍니다. project-number를 프로젝트 번호로 바꿉니다. 프로젝트의 Cloud Console 대시보드에서 프로젝트 번호를 찾을 수 있습니다.

Google 관리 서비스 계정
Artifact Registry 서비스 계정 service-project-number@gcp-sa-artifactregistry.iam.gserviceaccount.com
BigQuery Data Transfer Service 에이전트 service-project-number@gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com
Cloud AI Platform Notebooks 서비스 계정 service-project-number@gcp-sa-notebooks.iam.gserviceaccount.com
Cloud Composer 서비스 에이전트 service-project-number@cloudcomposer-accounts.iam.gserviceaccount.com
Cloud Data Fusion 서비스 계정 service-project-number@gcp-sa-datafusion.iam.gserviceaccount.com
Cloud Dataflow 서비스 계정 service-project-number@dataflow-service-producer-prod.iam.gserviceaccount.com
Cloud Life Sciences 서비스 계정 service-project-number@gcp-sa-lifesciences.iam.gserviceaccount.com
Cloud Pub/Sub 서비스 계정 service-project-number@gcp-sa-pubsub.iam.gserviceaccount.com
Cloud Scheduler 서비스 계정 service-project-number@gcp-sa-cloudscheduler.iam.gserviceaccount.com
Cloud Source Repositories 서비스 에이전트 service-project-number@sourcerepo-service-accounts.iam.gserviceaccount.com
Compute Engine 서비스 에이전트 service-project-number@compute-system.iam.gserviceaccount.com
Google Cloud Dataproc 서비스 에이전트 service-project-number@dataproc-accounts.iam.gserviceaccount.com
Google Cloud Functions 서비스 에이전트 service-project-number@gcf-admin-robot.iam.gserviceaccount.com
Google Cloud ML Engine 서비스 에이전트 service-project-number@cloud-ml.google.com.iam.gserviceaccount.com
Google Cloud Run 서비스 에이전트 service-project-number@serverless-robot-prod.iam.gserviceaccount.com
Kubernetes Engine 서비스 에이전트 service-project-number@container-engine-robot.iam.gserviceaccount.com
TPU 서비스 에이전트 service-project-number@cloud-tpu.iam.gserviceaccount.com

서비스 계정 권한

서비스 계정은 ID일 뿐만 아니라 IAM 정책이 연결된 리소스입니다. 이러한 정책은 서비스 계정 사용 권한을 가진 사용자를 결정합니다.

예를 들어 Alice는 서비스 계정에 대해 편집자 역할을 가질 수 있고 Bob은 서비스 계정에 대해 뷰어 역할을 가질 수 있습니다. 이는 마치 다른 Google Cloud 리소스에 대한 역할을 부여하는 것과 같습니다.

기본 Compute Engine 및 App Engine 서비스 계정이 생성될 때 해당 계정은 프로젝트에 대한 편집자 역할을 부여받으므로 애플리케이션 또는 가상 머신 인스턴스에서 실행되는 코드에는 필요한 권한이 포함되어 있습니다. 이 경우 서비스 계정은 리소스(프로젝트)에 대해 편집자 역할이 부여되는 ID입니다.

애플리케이션이 Cloud Storage 버킷에 액세스할 수 있게 하려면 애플리케이션이 사용하는 서비스 계정에 Cloud Storage 버킷을 읽을 수 있는 권한을 부여합니다. 이 경우 서비스 계정은 다른 리소스(Cloud Storage 버킷)에 대한 권한을 부여받는 ID입니다.

서비스 계정 사용자 역할

프로젝트 수준 또는 서비스 계정 수준에서 프로젝트의 모든 서비스 계정에 대해 서비스 계정 사용자 역할(roles/iam.serviceAccountUser)을 부여할 수 있습니다.

  • 프로젝트에서 서비스 계정 사용자 역할이 부여된 사용자는 향후 생성될 수 있는 서비스 계정을 비롯한 프로젝트의 모든 서비스 계정에 액세스할 수 있습니다.

  • 특정 서비스 계정에서 서비스 계정 사용자 역할이 부여된 사용자는 이 서비스 계정에만 액세스할 수 있습니다.

서비스 계정에 대해 서비스 계정 사용자 역할이 부여된 사용자는 서비스 계정에서 액세스한 모든 리소스에 간접적으로 액세스할 수 있습니다. 예를 들어 서비스 계정에 Compute 관리자 역할(roles/compute.admin)이 부여된 경우, 해당 서비스 계정에 대해 서비스 계정 역할(roles/iam.serviceAccountUser)이 부여된 사용자는 서비스 계정의 역할을 수행하여 Compute Engine 인스턴스를 시작할 수 있습니다. 이 흐름에서 사용자는 부여된 역할과 권한을 사용하여 작업을 수행하기 위해 서비스 계정을 가장합니다.

서비스 계정에 사용자 역할을 부여하는 방법에 대한 자세한 내용은 서비스 계정 가장 관리를 참조하세요.

서비스 계정은 서비스 수준의 보안을 나타냅니다. 서비스의 보안을 결정하는 요인은 서비스 계정을 관리하고 사용하는 IAM 역할이 부여된 사람과 해당 서비스 계정에 대한 비공개 외부 키를 보유한 사람입니다. 보안을 위한 권장사항은 다음과 같습니다.

  • IAM API를 사용하여 서비스 계정, 키, 해당 서비스 계정의 정책을 감사합니다.
  • 서비스 계정에서 필요로 하지 않는 외부 키는 삭제합니다.
  • 사용자에게 서비스 계정 관리 또는 사용 권한이 필요하지 않으면 해당 IAM 정책에서 삭제합니다.
  • 서비스 계정에 권한이 최소한의 권한만 갖는지 확인합니다. 기본 서비스 계정은 프로젝트에 대한 편집자(roles/editor) 역할이 자동으로 부여되므로 주의해서 사용해야 합니다.

권장사항에 대한 자세한 내용은 서비스 계정 이해를 참조하세요.

서비스 계정 토큰 생성자 역할

이 역할은 서비스 계정 명의로 OAuth2 액세스 토큰, blob 서명, JWT 서명을 만듭니다.

서비스 계정 행위자 역할

이 역할은 지원 중단되었습니다. 서비스 계정으로 작업을 실행해야 하는 경우 서비스 계정 사용자 역할을 사용하세요. 서비스 계정 행위자와 동일한 권한을 효과적으로 제공하려면 서비스 계정 토큰 생성자 권한도 부여해야 합니다.

액세스 범위

액세스 범위는 VM에 권한을 지정하는 기존 방법입니다. IAM 역할 이전에는 액세스 범위가 서비스 계정에 권한을 부여하기 위한 유일한 방법이었습니다. 이는 현재 권한을 부여하는 주된 방법은 아니지만 서비스 계정으로 인스턴스를 실행하도록 구성하려면 여전히 액세스 범위를 설정해야 합니다. 액세스 범위에 대한 자세한 내용은 Google Compute Engine 문서를 참조하세요.

임시 서비스 계정 사용자 인증 정보

Google Cloud 서비스 계정의 ID를 사용할 수 있는 임시 사용자 인증 정보를 만들 수 있습니다. 이러한 사용자 인증 정보를 사용하여 Google Cloud API 또는 기타 Google 이외의 API에 대한 호출을 인증할 수 있습니다.

이러한 사용자 인증 정보의 가장 일반적인 사용 사례는 다른 프로젝트, 조직, 계정에서 Google Cloud 리소스에 대한 액세스를 일시적으로 위임하는 것입니다. 예를 들어 외부 호출자에게는 대부분 권한이 부여된 서비스 계정의 영구 사용자 인증 정보를 제공하지 않고 긴급할 때 일시적으로 액세스할 수 있는 권한이 부여됩니다. 또한 보다 제한적인 권한으로 위임된 서비스 계정은 외부 호출자가 강력한 권한이 부여된 서비스 계정의 사용자 인증 정보를 요청할 필요 없이 가장하여 사용할 수 있습니다.

자세한 내용은 단기 서비스 계정 사용자 인증 정보 만들기를 참조하세요.

워크로드 아이덴티티 제휴

Amazon Web Services(AWS) 또는 Microsoft Azure와 같이 Google Cloud 외부에서 실행되는 워크로드의 ID 즉, 서비스 계정을 가장할 수 있는 기능을 부여할 수 있습니다. 이렇게 하면 서비스 계정 키를 사용하는 대신 단기 사용자 인증 정보를 사용하여 리소스에 직접 액세스할 수 있습니다.

자세한 내용은 워크로드 아이덴티티 제휴를 참조하세요.

애플리케이션 기본 사용자 인증 정보

애플리케이션 기본 사용자 인증 정보는 Google Cloud 내부 및 외부와 여러 Google Cloud 프로젝트에 걸쳐 작업을 실행할 때 서비스 계정을 쉽게 사용할 수 있도록 해주는 메커니즘입니다. 가장 일반적인 사용 사례는 로컬 머신에서 코드를 테스트한 후 이를 Google Cloud의 개발 프로젝트로 옮긴 후 다시 Google Cloud의 프로덕션 프로젝트로 옮기는 것입니다. 애플리케이션 기본 사용자 인증 정보를 사용하면 서비스 계정이 원활히 작동합니다. 즉 로컬 머신에서 테스트할 때는 로컬에 저장된 서비스 계정 키를 사용하지만 Compute Engine에서 실행할 때는 프로젝트의 기본 Compute Engine 서비스 계정을 사용합니다. 자세한 내용은 애플리케이션 기본 사용자 인증 정보를 참조하세요.

다음 단계

서비스 계정 사용에 관한 권장사항은 서비스 계정 이해를 참조하세요.

다음 방법을 알아보려면 해당 가이드를 참조하세요.