서비스 계정

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

시작하기 전에

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

서비스 계정은 사용자가 아닌 애플리케이션 또는 가상 머신(VM) 인스턴스에서 사용하는 특별한 유형의 계정입니다. 애플리케이션은 서비스 계정을 사용하여 승인된 API 호출을 만듭니다.

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

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

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

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

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

서비스 계정 키

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

Google 관리 키

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

사용자 관리 키

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

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

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

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

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

사용자 관리 키 방지

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

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

서비스 계정 유형

사용자 관리 서비스 계정

Cloud Console을 사용하여 새 Google Cloud 프로젝트를 만들면 프로젝트에 Compute Engine API가 사용 설정된 경우 기본적으로 Compute Engine 서비스 계정이 생성됩니다. 이는 다음 이메일을 사용하여 식별할 수 있습니다.

PROJECT_NUMBER-compute@developer.gserviceaccount.com

프로젝트에 App Engine 애플리케이션이 포함되어 있으면 프로젝트에 기본 App Engine 서비스 계정이 기본적으로 생성됩니다. 이는 다음 이메일을 사용하여 식별할 수 있습니다.

PROJECT_ID@appspot.gserviceaccount.com

프로젝트에서 서비스 계정을 만드는 경우 서비스 계정의 이름을 지정하면 다음과 같은 형식의 이메일이 할당됩니다.

SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

IAM API, Cloud Console, gcloud 명령줄 도구를 사용하여 프로젝트당 최대 100개의 서비스 계정(기본 Compute Engine 서비스 계정 및 App Engine 서비스 계정 포함)을 만들 수 있습니다. 이러한 기본 서비스 계정 및 명시적으로 만든 서비스 계정은 사용자 관리 서비스 계정입니다.

Google 관리 서비스 계정

사용자 관리 서비스 계정 외에도 프로젝트의 IAM 정책 또는 Cloud Console에 추가 서비스 계정이 표시될 수 있습니다. 이러한 서비스 계정은 Google에서 만들고 소유합니다. 이러한 계정은 여러 Google 서비스를 나타내며 각 계정에는 Google Cloud 프로젝트에 액세스할 수 있는 IAM 역할이 자동으로 부여됩니다.

Google API 서비스 계정

Google 관리 서비스 계정의 예시는 다음 이메일을 사용하여 확인할 수 있는 Google API 서비스 계정입니다.

PROJECT_NUMBER@cloudservices.gserviceaccount.com

Google API 서비스 계정은 특히 사용자를 대신하여 내부 Google 프로세스를 실행하도록 설계되었으며 Cloud Console의 서비스 계정 섹션에 나열되지 않습니다. 기본적으로 이 계정에는 프로젝트에 대한 프로젝트 편집자 역할이 자동으로 부여되며 계정은 Cloud Console의 IAM 섹션에 나열됩니다. 이 서비스 계정은 프로젝트가 삭제될 때만 삭제됩니다. Google 서비스는 프로젝트에 액세스할 수 있는 계정에 의존하므로 프로젝트에 대한 서비스 계정의 역할을 삭제하거나 변경해서는 안 됩니다.

서비스 계정 권한

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

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

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

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

서비스 계정 사용자 역할

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

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

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

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

서비스 계정에 대해 사용자 역할을 부여하는 방법에 대한 자세한 내용은 서비스 계정 소유권 및 액세스 구성을 참조하세요.

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

  • Cloud IAM API를 사용하여 서비스 계정, 키, 해당 서비스 계정의 정책을 감사합니다.
  • 서비스 계정에서 필요로 하지 않는 외부 키는 삭제합니다.
  • 사용자에게 서비스 계정을 관리하거나 사용할 권한이 없으면 해당 Cloud IAM 정책에서 서비스 계정을 삭제합니다.

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

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

이 역할을 사용하면 OAuth2 액세스 토큰, blob 서명 또는 JWT 서명을 만들 수 있는 서비스 계정을 가장할 수 있습니다.

서비스 계정 행위자 역할

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

액세스 범위

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

단기 서비스 계정 사용자 인증 정보

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

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

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

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

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

다음 단계

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

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