서비스 계정은 ID 및 리소스입니다. 서비스 계정은 허용 정책을 수락하는 리소스이므로 다른 주 구성원이 서비스 계정에 역할을 부여하여 서비스 계정에 액세스하도록 할 수 있습니다.
이 페이지에는 서비스 계정을 생성, 관리 또는 가장하도록 주 구성원에게 부여할 수 있는 역할이 나와 있습니다. 서비스 계정 관리에는 서비스 계정 보기, 업데이트, 삭제, 사용 중지, 사용 설정, 나열 및 IAM 정책 관리 등의 작업이 포함됩니다. 서비스 계정 가장은 사용자가 서비스 계정으로 인증하기 위해 단기 사용자 인증 정보를 사용하는 경우를 말합니다. 일반적으로 임시로 승격된 액세스 권한을 얻는 데 사용됩니다. 서비스 계정 가장에 대한 자세한 내용은 서비스 계정 가장을 참조하세요.
이 페이지에서는 특정 일반적인 시나리오에서 서비스 계정으로 작업하는 데 필요한 권한도 설명합니다.
서비스 계정 역할
다음 역할을 주 구성원에게 부여하여 서비스 계정을 관리하거나 가장할 수 있습니다.
사용자에게 이러한 역할을 부여하는 방법은 다음을 참조하세요.
- 사용자가 단일 서비스 계정을 관리하거나 가장할 수 있는 방법을 알아보려면 서비스 계정 액세스 관리를 참조하세요.
- 사용자가 프로젝트의 모든 서비스 계정을 관리하거나 가장하도록 허용하는 방법을 알아보려면 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.
서비스 계정 사용자 역할
서비스 계정 사용자 역할(roles/iam.serviceAccountUser
)에는 주 구성원이 서비스 계정에서 액세스할 수 있는 모든 리소스에 간접적으로 액세스할 수 있게 해주는 iam.serviceAccounts.actAs
권한이 포함되어 있습니다. 예를 들어 주 구성원에게 서비스 계정에 대한 서비스 계정 사용자 역할이 있고 서비스 계정에 프로젝트에 대한 Cloud SQL 관리자 역할(roles/cloudsql.admin
)이 있으면 주 구성원이 서비스 계정을 가장하여 Cloud SQL 인스턴스를 만들 수 있습니다.
이 역할을 통해 주 구성원이 리소스에 서비스 계정을 연결할 수도 있습니다.
이 역할을 사용하면 주 구성원이 서비스 계정의 단기 사용자 인증 정보를 만들거나 Google Cloud CLI에 --impersonate-service-account
플래그를 사용할 수 없습니다. 이러한 태스크를 완료하려면 서비스 계정 토큰 생성자 역할도 필요합니다.
서비스 계정 토큰 생성자 역할
이 역할을 통해 주 구성원이 서비스 계정을 가장하여 다음 작업을 수행할 수 있습니다.
- Google API로 인증하는 데 사용할 수 있는 OAuth 2.0 액세스 토큰 만들기
- OpenID Connect(OIDC) ID 토큰 만들기
- 인증에 사용할 수 있도록 JSON 웹 토큰(JWT) 및 바이너리 blob 서명
자세한 내용은 단기 서비스 계정 사용자 인증 정보 만들기를 참조하세요.
역할의 권한은 다음과 같습니다.
iam.serviceAccounts.getAccessToken
: OAuth 2.0 액세스 토큰을 만들 수 있도록 합니다.iam.serviceAccounts.getOpenIdToken
: OpenID Connect(OIDC) ID 토큰을 만들 수 있도록 합니다.iam.serviceAccounts.implicitDelegation
: 서비스 계정이 위임 체인의 토큰을 가져오도록 허용합니다.iam.serviceAccounts.signBlob
: 바이너리 blob에 서명할 수 있습니다.iam.serviceAccounts.signJwt
: JWT에 서명할 수 있도록 합니다.
워크로드 아이덴티티 사용자 역할
이 역할을 통해 주 구성원이 GKE 워크로드에서 서비스 계정을 가장할 수 있습니다.
역할의 권한은 다음과 같습니다.
iam.serviceAccounts.getAccessToken
: OAuth 2.0 액세스 토큰을 만들 수 있도록 합니다.iam.serviceAccounts.getOpenIdToken
: OpenID Connect(OIDC) ID 토큰을 만들 수 있도록 합니다.
일반적인 시나리오에 대한 서비스 계정 권한
서비스 계정은 다양한 시나리오에서 사용할 수 있으며 각 계정에는 특정 권한이 필요합니다. 이 섹션에서는 일반적인 시나리오와 필요한 권한을 설명합니다.
리소스에 서비스 계정 연결
서비스 계정으로 인증하는 장기 실행 작업을 시작하려면 작업을 실행할 리소스에 서비스 계정을 연결해야 합니다.
권한:
- 리소스를 만들 수 있는 권한
iam.serviceAccounts.actAs
이러한 권한이 포함된 역할을 확인하려면 역할 목록에서 권한을 검색합니다.
장기 실행 작업을 서비스 계정으로 실행할 수 있는 몇 가지 Google Cloud 리소스가 있습니다. 다음은 이러한 리소스의 몇 가지 예시입니다.
- Compute Engine VM
- App Engine 앱
- Cloud Functions
이러한 리소스를 만들 때 서비스 계정을 연결할 수 있습니다. 이 서비스 계정은 리소스의 ID 역할을 합니다.
리소스를 만들고 서비스 계정을 연결하려면 리소스를 만들 수 있는 권한과 리소스에 연결할 서비스 계정을 가장할 수 있는 권한이 필요합니다. iam.serviceAccounts.actAs
권한이 포함된 모든 역할에서 서비스 계정을 가장할 수 있는 권한을 제공합니다.
리소스를 만들고 서비스 계정을 여기에 연결한 후에는 리소스에서 장기 실행 작업을 시작할 수 있습니다. 작업은 리소스에 연결된 서비스 계정으로 실행되고 이 서비스 계정을 사용하여 Google Cloud API에 대한 요청을 승인합니다.
서비스 계정을 리소스에 연결하는 방법에 대한 자세한 내용은 리소스에 서비스 계정 연결을 참조하세요.
직접 서비스 계정 가장하기
권한:
iam.serviceAccounts.getAccessToken
iam.serviceAccounts.signBlob
iam.serviceAccounts.signJwt
iam.serviceAccounts.implicitDelegation
역할:
roles/iam.serviceAccountTokenCreator
(서비스 계정 토큰 생성자)
필요한 권한이 부여되면 사용자 또는 서비스가 몇 가지 일반적인 시나리오에 서비스 계정의 ID를 직접 가장하거나 어설션을 만들 수 있습니다.
먼저 사용자는 iam.serviceAccounts.getAccessToken
권한을 부여하고 generateAccessToken()
메서드를 호출하여 서비스 계정에 대한 단기 사용자 인증 정보를 가져올 수 있습니다. 사용자는 단기 사용자 인증 정보를 사용하여 Google Cloud에 명령어를 실행하고 서비스 계정이 액세스한 모든 리소스에 액세스할 수 있습니다. 예를 들어 이 흐름을 사용하면 다운로드한 외부 서비스 계정 키를 사용하지 않고도 gcloud --impersonate-service-account
플래그를 사용하여 서비스 계정을 가장할 수 있습니다.
두 번째로 사용자는 iam.serviceAccounts.signBlob
권한을 사용하고 signBlob()
또는 signJwt()
메서드를 호출하여 서비스 계정의 Google 관리 비공개 키로 서명된 아티팩트를 가져올 수 있습니다.
Google 관리 비공개 키는 항상 에스크로에 보관되며 직접 노출되지 않습니다. signBlob()
은 임의 페이로드의 서명(예: Cloud Storage 서명 URL)을 허용하고, signJwt()
는 올바르게 구성된 JWT의 서명만 허용합니다.
마지막으로 사용자는 서비스 계정의 사용자 인증 정보를 가져오지 않고 서비스 계정을 가장하거나 어설션을 만들 수 있습니다. 이 고급 사용 사례는 generateAccessToken()
메서드를 사용하여 프로그래매틱 액세스의 경우에만 지원됩니다. A, B, C 등 최소 3개의 서비스 계정이 있는 시나리오에서 서비스 계정 A에 B에 대한 iam.serviceAccounts.implicitDelegation
권한이 부여되고 B에 C에 대한 iam.serviceAccounts.getAccessToken
권한이 부여되면 서비스 계정 A는 서비스 계정 C의 액세스 토큰을 가져올 수 있습니다.
OpenID Connect(OIDC) ID 토큰 생성
권한:
iam.serviceAccounts.getOpenIdToken
역할:
roles/iam.serviceAccountTokenCreator
(서비스 계정 토큰 생성자)
사용자 또는 서비스는 iam.serviceAccounts.getOpenIdToken
권한을 사용하여 서비스 계정 ID를 나타내며 Google OIDC 제공업체가 서명한 OpenID Connect(OIDC) 호환 JWT 토큰(accounts.google.com)을 생성할 수 있습니다.
조직에서 Google에 액세스 권한을 부여하기 위해 추가 ID 제휴를 배포하지 않으면 이러한 토큰은 대부분의 Google API에서 직접 허용되지 않습니다. 사용자 실행 애플리케이션에 OIDC 기반 액세스를 허용하는 IAP(Identity-Aware Proxy)와 같은 경우는 예외입니다.
외부 비공개 키 생성
권한:
iam.serviceAccountKeys.create
역할:
roles/editor
(편집자)roles/iam.serviceAccountKeyAdmin
(서비스 계정 키 관리자)
사용자 또는 서비스는 Google을 서비스 계정으로 직접 인증하는 데 사용할 수 있는 외부 비공개 키 자료(RSA)를 생성할 수 있습니다. 그런 다음 이 키 자료를 애플리케이션 기본 사용자 인증 정보(ADC) 라이브러리 또는 gcloud auth
activate-service-account
명령어와 함께 사용할 수 있습니다. 그러면 키 자료에 대한 액세스 권한을 가진 모든 사용자가 서비스 계정이 액세스한 모든 리소스에 대한 전체 액세스 권한을 갖게 됩니다. 이러한 비공개 키 자료는 가장 중요한 문제로 취급되어야 하며 자료가 더 오래 존재할수록 보안 수준이 낮은 것으로 간주되어야 합니다. 따라서 강력한 보안을 유지하려면 비공개 키 자료를 순환하는 것이 중요합니다.
서비스 계정에 역할을 부여하기 위한 권장사항
서비스 계정에 상위 권한의 작업을 수행할 수 있는 권한이 부여된 경우 서비스 계정 사용자에게 서비스 계정 사용자 역할을 부여할 때는 주의해야 합니다.
서비스 계정은 서비스 수준의 보안을 나타냅니다. 서비스의 보안을 결정하는 요인은 서비스 계정을 관리하고 사용하는 IAM 역할이 부여된 사람과 해당 서비스 계정에 대한 서비스 계정 키를 보유한 사람입니다. 보안을 위한 권장사항은 다음과 같습니다.
- IAM API를 사용하여 서비스 계정, 키, 해당 서비스 계정의 허용 정책을 감사합니다.
- 서비스 계정에 서비스 계정 키가 필요하지 않으면 이를 사용 중지하거나 삭제합니다.
- 사용자에게 서비스 계정 관리 또는 사용 권한이 필요하지 않으면 해당 허용 정책에서 삭제합니다.
- 서비스 계정에 권한이 최소한의 권한만 갖는지 확인합니다. 기본 서비스 계정은 프로젝트에 대한 편집자(
roles/editor
) 역할이 자동으로 부여되므로 주의해서 사용해야 합니다.
권장사항에 대한 자세한 내용은 서비스 계정 작업 권장사항을 참조하세요.
직접 사용해 보기
Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
무료로 시작하기