서비스 계정 인증 역할

주 구성원은 서비스 계정을 사용하여 몇 가지 다른 방법으로 인증할 수 있습니다. 각 인증 유형을 사용하려면 주 구성원에게 서비스 계정에 대한 특정 Identity and Access Management(IAM) 권한이 있어야 합니다.

이 페이지에서는 서비스 계정을 가장하거나 서비스 계정을 리소스에 연결하기 위해 주 구성원에 부여할 수 있는 역할을 설명합니다. 또한 일반적인 시나리오에서 필요한 권한에 대해 설명합니다.

서비스 계정으로 인증하는 여러 가지 방법은 서비스 계정 사용자 인증 정보서비스 계정 가장을 참조하세요.

서비스 계정 역할

이 섹션에서는 주 구성원이 서비스 계정으로 인증할 수 있는 역할을 설명합니다. 이러한 역할을 부여하고 취소하는 방법은 서비스 계정에 대한 액세스 관리를 참조하세요.

서비스 계정 사용자 역할

서비스 계정 사용자 역할(roles/iam.serviceAccountUser)을 받은 주 구성원은 서비스 계정을 리소스에 연결할 수 있습니다. 해당 리소스에서 실행 중인 코드를 인증해야 할 경우 연결된 서비스 계정의 사용자 인증 정보를 가져올 수 있습니다.

이 역할을 사용하면 주 구성원이 서비스 계정의 단기 사용자 인증 정보를 만들거나 Google Cloud CLI에 --impersonate-service-account 플래그를 사용할 수 없습니다. 이러한 태스크를 완료하려면 서비스 계정에 대한 서비스 계정 토큰 생성자 역할이 필요합니다.

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

서비스 계정 토큰 생성자 역할(roles/iam.serviceAccountTokenCreator)을 받은 주 구성원은 서비스 계정의 단기 사용자 인증 정보를 만들 수 있습니다.

서비스 계정 토큰 생성자 역할을 통해 다음과 같은 유형의 단기 사용자 인증 정보를 만들 수 있습니다.

  • Google API로 인증하는 데 사용할 수 있는 OAuth 2.0 액세스 토큰
  • OpenID Connect(OIDC) ID 토큰
  • 서명된 JSON 웹 토큰(JWT) 및 바이너리 blob

또한 서비스 계정 토큰 생성자 역할을 사용하면 주 구성원이 gcloud CLI에 --impersonate-service-account 플래그를 사용할 수 있습니다. 이 플래그를 사용하면 gcloud CLI가 서비스 계정에 대한 단기 사용자 인증 정보를 자동으로 만듭니다.

역할의 권한은 다음과 같습니다.

  • iam.serviceAccounts.getAccessToken: OAuth 2.0 액세스 토큰을 만들 수 있도록 합니다.
  • iam.serviceAccounts.getOpenIdToken: OpenID Connect(OIDC) ID 토큰을 만들 수 있도록 합니다.
  • iam.serviceAccounts.implicitDelegation: 서비스 계정이 위임 체인의 토큰을 가져오도록 허용합니다.
  • iam.serviceAccounts.signBlob: 바이너리 blob에 서명할 수 있습니다.
  • iam.serviceAccounts.signJwt: JWT에 서명할 수 있도록 합니다.

서비스 계정 OpenID Connect ID 토큰 생성자

서비스 계정 OpenID Connect ID 토큰 생성자 역할(roles/iam.serviceAccountOpenIdTokenCreator)을 통해 주 구성원이 단기 OIDC ID 토큰을 만들 수 있습니다. OIDC ID 토큰만 만들면 되는 경우 이 역할을 사용합니다. 다른 유형의 토큰을 만들어야 하는 경우에는 서비스 계정 토큰 생성자 역할을 대신 사용하세요.

이 역할에는 OIDC ID 토큰을 만들 수 있는 iam.serviceAccounts.getOpenIdToken 권한이 포함됩니다.

워크로드 아이덴티티 사용자 역할

워크로드 아이덴티티 사용자 역할(roles/iam.workloadIdentityUser)을 통해 주 구성원이 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 역할을 합니다.

리소스를 만들고 서비스 계정을 연결하려면 리소스 만들기 권한과 리소스에 서비스 계정 연결 권한이 필요합니다. 서비스 계정 사용자 역할(roles/iam.serviceAccountUser)과 같이 iam.serviceAccounts.actAs 권한을 포함하는 모든 역할에서 제공되는 리소스에 서비스 계정을 연결할 수 있는 권한입니다.

리소스를 만들고 서비스 계정을 여기에 연결한 후에는 리소스에서 장기 실행 작업을 시작할 수 있습니다. 작업은 리소스에 연결된 서비스 계정으로 실행되고 이 서비스 계정을 사용하여 Google Cloud API에 대한 요청을 승인합니다.

서비스 계정을 리소스에 연결하는 방법에 대한 자세한 내용은 리소스에 서비스 계정 연결을 참조하세요.

서비스 계정 가장

권한:

  • iam.serviceAccounts.getAccessToken
  • iam.serviceAccounts.signBlob
  • iam.serviceAccounts.signJwt
  • iam.serviceAccounts.implicitDelegation

역할:

  • roles/iam.serviceAccountTokenCreator(서비스 계정 토큰 생성자)

필요한 권한이 부여되면 사용자(또는 다른 서비스 계정)가 몇 가지 일반적인 시나리오에서 서비스 계정을 가장할 수 있습니다.

먼저 사용자가 서비스 계정으로 인증할 수 있습니다. 예를 들어 iam.serviceAccounts.getAccessToken 권한을 사용하고 generateAccessToken() 메서드를 호출해서 서비스 계정에 대해 단기 사용자 인증 정보를 얻을 수 있습니다. 또는 gcloud CLI에 대한 --impersonate-service-account 플래그를 사용해서 서비스 계정을 가장할 수 있습니다. 사용자가 서비스 계정으로 인증할 때는 Google Cloud에 명령을 실행하여 서비스 계정이 액세스할 수 있는 모든 리소스에 액세스할 수 있습니다.

두 번째로 사용자는 iam.serviceAccounts.signBlob 권한을 사용하고 signBlob() 또는 signJwt() 메서드를 호출하여 서비스 계정의 Google 관리 비공개 키로 서명된 아티팩트를 가져올 수 있습니다. Google 관리 비공개 키는 항상 에스크로에 보관되며 직접 노출되지 않습니다. signBlob()은 임의 페이로드의 서명(예: Cloud Storage 서명 URL)을 허용하고, signJwt()는 올바르게 구성된 JWT의 서명만 허용합니다.

마지막으로 사용자는 서비스 계정의 사용자 인증 정보를 가져오지 않고 서비스 계정을 가장할 수 있습니다. 이 고급 사용 사례는 generateAccessToken() 메서드를 사용하여 프로그래매틱 액세스의 경우에만 지원됩니다. A, B, C 등 최소 3개의 서비스 계정이 있는 시나리오에서 서비스 계정 AB에 대한 iam.serviceAccounts.implicitDelegation 권한이 부여되고 BC에 대한 iam.serviceAccounts.getAccessToken 권한이 부여되면 서비스 계정 A는 서비스 계정 C의 액세스 토큰을 가져올 수 있습니다.

OpenID Connect(OIDC) ID 토큰 생성

권한:

  • iam.serviceAccounts.getOpenIdToken

역할:

  • roles/iam.serviceAccountOpenIdTokenCreator(서비스 계정 OpenID Connect ID 토큰 생성자)

사용자 또는 서비스는 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의 무료 크레딧이 제공됩니다.

무료로 시작하기