서비스 계정

이 페이지에서는 서비스 계정, 액세스 범위, 서비스 계정에 적용되는 IAM(ID 및 액세스 관리) 역할을 설명합니다. 서비스 계정을 만들고 사용하는 방법을 알아보려면 인스턴스의 서비스 계정 만들기 및 사용 설정 문서를 읽어보세요.

서비스 계정은 다른 Google Cloud Platform API와 상호작용하기 위해 Compute Engine 인스턴스에서 실행되는 서비스 및 애플리케이션에서 사용할 수 있는 특별한 계정입니다. 애플리케이션은 서비스 계정 사용자 인증 정보를 사용하여 여러 API 액세스를 승인하고 서비스 계정 및 가상 머신 인스턴스에 부여된 권한 내에서 작업을 수행할 수 있습니다. 또한 각 인스턴스에 연결한 서비스 계정에 따라 인스턴스와 주고받는 트래픽을 허용하거나 거부하는 방화벽 규칙을 만들 수 있습니다.

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

서비스 계정은 인스턴스나 애플리케이션이 사용자를 대신하여 API 요청을 실행할 때 사용할 수 있는 ID입니다. 이 ID는 다른 Google Cloud Platform 서비스가 가상 머신 인스턴스에서 실행되는 애플리케이션을 식별하는 데 사용됩니다. 예를 들어, Google Cloud Storage에 파일을 읽고 쓰는 애플리케이션을 작성할 경우, 애플리케이션은 우선 Google Cloud Storage API에 인증해야 합니다. 서비스 계정을 만들어서 이 서비스 계정에 Cloud Storage API에 액세스할 수 있는 권한을 부여할 수 있습니다. 그 다음, 서비스 계정 사용자 인증 정보를 Cloud Storage API에 전달하도록 애플리케이션 코드를 업데이트하면 됩니다. 애플리케이션은 인스턴스, 이미지, 애플리케이션 코드에 비밀번호 키나 사용자 인증 정보를 삽입하지 않고도 API에 원활하게 인증됩니다.

필요한 IAM 권한이 있는 서비스 계정은 인스턴스와 기타 리소스를 만들고 관리할 수 있습니다. 프로젝트 또는 리소스 수준에서 필요한 IAM 권한을 서비스 계정에 부여하는 경우에만 서비스 계정이 리소스를 수정하거나 삭제할 수 있습니다. 인스턴스에 연결되는 서비스 계정을 변경할 수도 있습니다.

인스턴스에는 하나의 서비스 계정만 있을 수 있으며, 서비스 계정은 인스턴스와 동일한 프로젝트에서 생성된 계정이어야 합니다.

Compute Engine 인스턴스에서는 다음 두 가지 유형의 서비스 계정을 사용할 수 있습니다.

  • 사용자 관리 서비스 계정
  • Google 관리 서비스 계정

사용자 관리 서비스 계정

사용자 관리 서비스 계정에는 사용자가 명시적으로 만드는 신규 서비스 계정과 Compute Engine 기본 서비스 계정이 포함됩니다.

신규 서비스 계정

Google ID 및 액세스 관리를 사용하여 서비스 계정을 만들고 관리할 수 있습니다. 계정을 만든 후 계정에 IAM 역할을 부여하고, 서비스 계정으로 실행되도록 인스턴스를 설정합니다. 서비스 계정이 사용 설정된 인스턴스에서 실행되는 애플리케이션은 해당 계정의 사용자 인증 정보를 사용하여 다른 Google API에 요청을 수행할 수 있습니다.

새 서비스 계정을 만들고 설정하려면 인스턴스의 서비스 계정 만들기 및 사용 설정을 참조하세요.

Compute Engine 기본 서비스 계정

새로 만든 프로젝트에는 다음 이메일을 사용하여 식별할 수 있는 Compute Engine 기본 서비스 계정이 제공됩니다.

[PROJECT_NUMBER]-compute@developer.gserviceaccount.com

기본 서비스 계정은 Google에서 만들고 사용자의 계정에 자동으로 추가되지만 사용자가 모든 것을 제어할 수 있습니다.

gcloud 명령줄 도구나 Google Cloud Platform Console을 사용하여 인스턴스를 만들면 인스턴스가 다음 액세스 범위에 따라 기본 서비스 계정으로 실행되도록 자동으로 사용 설정됩니다.

  • Google Cloud Storage에 대한 읽기 전용 액세스:
    https://www.googleapis.com/auth/devstorage.read_only
  • Compute Engine 로그를 작성할 수 있는 쓰기 액세스:
    https://www.googleapis.com/auth/logging.write
  • Google Cloud 프로젝트에 통계 데이터를 게시할 수 있는 쓰기 액세스:
    https://www.googleapis.com/auth/monitoring.write
  • Google Cloud Endpoints(알파)에 필요한 서비스 관리 기능에 대한 읽기 전용 액세스:
    https://www.googleapis.com/auth/service.management.readonly
  • Google Cloud Endpoints(알파)에 필요한 서비스 제어 기능에 대한 읽기/쓰기 액세스:
    https://www.googleapis.com/auth/servicecontrol

기본 서비스 계정은 Google Cloud Platform Console에서 변경할 수 있습니다.

gcloud 명령줄 도구나 Google Cloud Platform 콘솔을 사용하지 않고 직접 API에 요청하여 인스턴스를 만들 경우, 기본 서비스 계정이 인스턴스에 사용 설정되지 않습니다. 그러나 기본 서비스 계정을 요청 페이로드의 일부로 명시적으로 지정하면 기본 서비스 계정을 사용 설정할 수 있습니다.

이 서비스 계정을 프로젝트에서 삭제할 수 있으나 이렇게 하면 해당 서비스 계정의 사용자 인증 정보에 의존하는 모든 애플리케이션이 실패할 수 있습니다. 실수로 기본 서비스 계정을 삭제할 경우, Compute Engine팀에 문의해서 해당 계정을 다시 프로젝트에 추가할 수 있습니다.

기본 서비스 계정의 속성을 요약하면 다음과 같습니다.

  • Google Cloud Platform Console 프로젝트에 의해 자동으로 생성되며 이름과 이메일 주소가 자동으로 생성됩니다.
  • 프로젝트에 프로젝트 편집자로 자동으로 추가됩니다.
  • gcloud 명령줄 도구와 GCP Console에서 생성된 모든 인스턴스에서 특정 권한 집합으로 사용 설정됩니다. 인스턴스를 만들 때 다른 서비스 계정을 지정하거나 인스턴스의 서비스 계정을 명시적으로 사용 중지함으로써 이를 재정의할 수 있습니다.

Google 관리 서비스 계정

이 서비스 계정은 Google에서 만들고 관리하며 사용자의 프로젝트에 자동으로 할당됩니다. 이 계정은 여러 Google 서비스를 나타내며 각 계정은 Google Cloud Platform 프로젝트에 대한 일정 수준의 액세스 권한을 보유합니다.

Google API 서비스 계정

기본 서비스 계정과는 별도로, Compute Engine으로 사용 설정된 모든 프로젝트에는 다음 이메일로 식별 가능한 Google API 서비스 계정이 제공됩니다.

[PROJECT_NUMBER]@cloudservices.gserviceaccount.com

이 서비스 계정은 사용자를 대신하여 내부 Google 프로세스를 실행하도록 특별히 설계되었습니다. 이 계정은 Google이 소유하므로 GCP 콘솔의 서비스 계정 섹션에 나열되지 않습니다. 기본적으로 이 계정에는 프로젝트에 대한 프로젝트 편집자 역할이 자동으로 부여되며 계정은 GCP 콘솔의 IAM 섹션에 나열됩니다. 이 서비스 계정은 프로젝트가 삭제될 때만 삭제됩니다. 그러나 이 계정에 부여된 역할을 변경할 수 있으며 프로젝트에 대한 모든 액세스 권한을 취소할 수 있습니다.

일부 리소스는 이 서비스 계정과 이 서비스 계정에 부여된 기본 편집자 권한에 의존합니다. 예를 들어, 관리형 인스턴스 그룹과 자동 확장은 이 계정의 사용자 인증 정보를 사용하여 인스턴스를 만들고 삭제하고 관리합니다. 서비스 계정의 권한을 취소하거나 인스턴스 생성 권한을 부여하지 않도록 권한을 수정할 경우, 관리되는 인스턴스 그룹과 자동 확장이 작동을 멈추게 됩니다.

따라서 이 서비스 계정의 역할을 수정하지 않는 것이 좋습니다.

Compute Engine 시스템 서비스 계정

Compute Engine API를 사용 설정한 모든 프로젝트에는 다음 주소를 사용하여 식별할 수 있는 Compute Engine 시스템 서비스 계정이 있습니다.

service-[PROJECT_NUMBER]@compute-system.iam.gserviceaccount.com

이 서비스 계정은 Google Compute Engine이 프로젝트에서 서비스 업무를 수행하도록 특별히 설계되었습니다. 이 계정은 Google Cloud 프로젝트에 부여되는 서비스 에이전트 IAM 정책에 의존합니다. 또한 이 계정은 Compute Engine이 VM 인스턴스에서 고객이 소유한 서비스 계정에 액세스할 때 사용하는 서비스 계정이기도 합니다. 이 계정은 Google이 소유하지만 사용자의 프로젝트를 위한 계정이므로 GCP 콘솔의 서비스 계정 및 IAM 섹션에 나열됩니다. 기본적으로 이 계정은 프로젝트에서 compute.serviceAgent 역할을 자동으로 부여받습니다.

이 서비스 계정은 프로젝트를 삭제할 때만 삭제됩니다. 이 계정에 부여된 역할을 변경할 수 있으며 프로젝트에 대한 계정의 모든 액세스 권한을 취소할 수 있습니다. 이 서비스 계정의 권한을 취소하거나 변경하면 Compute Engine이 VM에서 사용자 서비스 계정의 ID에 액세스하지 못하게 되며 VM 내부에서 실행되는 소프트웨어가 중단될 수 있습니다.

따라서 이 서비스 계정의 역할을 수정하지 않는 것이 좋습니다.

서비스 계정 권한

서비스 계정으로 실행되도록 인스턴스를 설정하면 인스턴스에 부여된 액세스 범위와 해당 서비스 계정에 부여된 IAM 역할의 조합에 따라 서비스 계정의 액세스 수준이 결정됩니다. 서비스 계정으로 실행되도록 인스턴스를 올바르게 설정하려면 액세스 범위와 IAM 역할을 모두 구성해야 합니다. 기본적으로,

  • 액세스 범위는 API 메소드에 대한 인스턴스의 잠재적 액세스 권한을 승인합니다.
  • IAM은 서비스 계정에 부여된 역할에 대한 액세스를 제한합니다.

액세스 범위와 IAM 역할에 대한 자세한 내용이 아래의 섹션에 설명되어 있습니다.

여러 가지 액세스 범위에서 선택할 수 있지만 모든 Cloud Platform 서비스에 대한 액세스를 승인하는 cloud-platform 액세스 범위를 설정한 후 IAM 역할을 부여하여 해당 액세스를 제한할 수도 있습니다.

https://www.googleapis.com/auth/cloud-platform

예를 들어, 인스턴스에 cloud-platform 액세스 범위를 사용 설정한 후에 다음 IAM 역할을 부여할 경우,

  • roles/compute.instanceAdmin.v1
  • roles/storage.objectViewer
  • roles/compute.networkAdmin

서비스 계정은 위의 세 가지 IAM 역할에서 부여한 권한만 가집니다. 이 계정은 Cloud Platform 액세스 범위에 관계없이 이 세 가지 역할 이외의 작업을 수행할 수 없습니다.

이와 반대로, Cloud Storage 읽기 전용 범위(https://www.googleapis.com/auth/devstorage.read_only)와 같은 더 제한적인 범위를 부여한 다음 서비스 계정에서 roles/storage.objectAdmin 역할을 설정할 경우, roles/storage.ObjectAdmin 역할을 부여했을지라도 인스턴스가 Google Cloud Storage 객체를 관리할 수 없을 것입니다. 이는 Cloud Storage 읽기 전용 범위가 인스턴스의 Cloud Storage 데이터 조작을 승인하지 않기 때문입니다.

일반적으로 모든 API 메소드 문서에도 해당 메소드에 필요한 범위가 나열되어 있습니다. 예를 들어 instances.insert 메소드는 승인 섹션에 유효한 범위의 목록을 제공합니다.

액세스 범위

액세스 범위는 인스턴스에 권한을 지정하는 기존의 방법입니다. IAM 역할이 존재하기 전에는 서비스 계정에 권한을 부여하는 유일한 메커니즘이 액세스 범위였습니다. 현재는 액세스 범위가 권한을 부여하는 주된 방법은 아니지만 서비스 계정으로 실행되도록 인스턴스를 구성하려면 여전히 액세스 범위를 설정해야 합니다.

액세스 범위는 인스턴스별로 적용됩니다. 즉, 인스턴스를 만들 때 액세스 범위를 설정하면 인스턴스의 수명 기간에만 액세스 범위가 지속됩니다. 액세스 범위는 프로젝트에서 서비스 계정이 속해 있는 해당 API를 사용 설정했을 경우에만 작동합니다. 예를 들어, 가상 머신 인스턴스에서 Google Cloud Storage에 액세스 범위를 부여하면 프로젝트에서 Cloud Storage API를 사용 설정한 경우에만 인스턴스가 Cloud Storage API를 호출할 수 있습니다. 프로젝트에서 API가 사용 설정되지 않은 경우, 액세스 범위는 아무런 영향도 미치지 못합니다.

액세스 범위의 예는 다음과 같습니다.

  • https://www.googleapis.com/auth/cloud-platform - 모든 Google Cloud Platform 리소스에 대한 전체 액세스 권한.
  • https://www.googleapis.com/auth/compute - Google Compute Engine 메소드에 대한 전체 제어 액세스 권한.
  • https://www.googleapis.com/auth/compute.readonly - Google Compute Engine 메소드에 대한 읽기 전용 액세스 권한.
  • https://www.googleapis.com/auth/devstorage.read_only - Google Cloud Storage에 대한 읽기 전용 액세스 권한.
  • https://www.googleapis.com/auth/logging.write - Google Compute Engine 로그에 대한 쓰기 액세스 권한.

IAM 역할

액세스 범위 설정 이외에, 계정이 보유하는 액세스 수준을 결정하려면 서비스 계정에 올바른 IAM 역할을 부여해야 합니다. 예를 들어 서비스 계정에 Google Cloud Storage 객체를 관리하는 IAM 역할이나 Google Cloud Storage 버킷을 관리하는 IAM 역할 또는 둘 다를 부여하여 이러한 역할에서 부여하는 권한으로 해당 계정을 제한할 수 있습니다.

IAM 역할은 계정별로 부여됩니다. 즉, 서비스 계정에 IAM 역할을 부여하고 나면 해당 서비스 계정으로 실행되는 모든 인스턴스가 해당 역할을 사용할 수 있습니다. 다음 사항도 유의하세요.

  • 일부 IAM 역할은 현재 베타 버전입니다.

    원하는 액세스 수준에 맞는 IAM 역할이 없는 경우, 기본 역할 중 하나(예: 프로젝트 편집자)를 부여해도 됩니다.

  • 액세스를 승인하려면 인스턴스에 액세스 범위를 설정해야 합니다.

    가상 머신 인스턴스를 만들 때 서비스 계정에 IAM 역할만 설정하고 액세스 범위를 생략하면 안 됩니다. 서비스 계정이 보유하는 액세스 수준은 액세스 범위와 IAM 역할의 조합에 의해 결정되므로 서비스 계정이 제대로 작동하려면 액세스 범위와 IAM 역할을 모두 구성해야 합니다.

다음 단계

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...

Compute Engine 문서