서비스 계정 가장

사용자 또는 다른 서비스 계정과 같은 인증된 주 구성원이 서비스 계정의 권한을 얻기 위해 서비스 계정으로 인증될 때 이를 서비스 계정을 가장한다고 부릅니다. 서비스 계정을 가장하면 서비스 계정이 액세스할 수 있는 무엇이든 인증된 주 구성원이 액세스할 수 있습니다. 적절한 권한을 사용해서 인증된 주 구성원만 서비스 계정을 가장할 수 있습니다.

가장은 Identity and Access Management(IAM) 정책을 변경하지 않고 사용자 권한을 변경하려고 할 때 유용합니다. 예를 들어 가장을 사용하면 사용자에게 승격된 액세스 권한을 일시적으로 부여하거나 어떤 태스크에 대해 특정 권한 집합이 충분한지 여부를 테스트해볼 수 있습니다. 또한 가장을 사용해서 서비스 계정으로만 실행 가능한 애플리케이션을 로컬로 개발하거나 Google Cloud 외부에서 실행되는 애플리케이션을 인증할 수도 있습니다.

Google Cloud 서비스 계정 가장은 AssumeRole과 같은 Amazon Web Services(AWS) 보안 토큰 서비스 API 메서드와 비슷합니다.

서비스 계정 가장 작동 방식

서비스 계정 가장에는 항상 두 가지 요소가 포함됩니다. 하나는 인증된 주 구성원이고 다른 하나는 주 구성원이 가장하는 서비스 계정입니다. 서비스 계정을 가장하기 위해 인증된 주 구성원은 서비스 계정에 대한 토큰을 가져온 후 이 토큰을 사용해서 서비스 계정으로 인증을 수행합니다.

서비스 계정을 가장하는 데에는 여러 방법이 있습니다.

  • Google Cloud CLI 명령어를 실행할 때 --impersonate-service-account 플래그 또는 impersonate-service-account 속성을 설정합니다. 이 설정으로 gcloud CLI 명령어를 실행할 때 gcloud CLI는 서비스 계정에 대한 단기 사용자 인증 정보를 만들고 해당 사용자 인증 정보를 사용해서 명령어를 실행합니다.

    또한 애플리케이션 기본 사용자 인증 정보 파일을 설정할 때 --impersonate-service-account 플래그를 사용할 수 있습니다. 이 설정은 가장을 지원하는 클라이언트 라이브러리가 서비스 계정을 자동으로 가장할 수 있게 해줍니다.

  • Service Account Credentials API를 사용해서 단기 사용자 인증 정보를 만들고 나서 이러한 사용자 인증 정보를 사용하여 API 요청을 인증합니다.

    단기 사용자 인증 정보는 수명이 몇 시간 이내로 제한되며, 자동으로 새로고침되지 않습니다. 또한 서비스 계정 키와 같은 장기 사용자 인증 정보보다 위험도가 낮습니다.

  • 사용자 인증 정보 구성 파일을 사용해서 외부 애플리케이션이 서비스 계정을 가장하도록 구성합니다. 이 옵션은 워크로드 아이덴티티 제휴를 사용하는 애플리케이션에만 사용할 수 있습니다.

    애플리케이션이 사용자 인증 정보 구성 파일을 사용해서 Google Cloud에 액세스할 때는 먼저 환경 관련 사용자 인증 정보를 사용해서 지정된 서비스 계정에 대한 단기 사용자 인증 정보를 가져옵니다. 그런 후 이러한 단기 사용자 인증 정보를 사용해서 Google Cloud에 인증합니다.

주 구성원이 서비스 계정을 가장하는 동안 리소스에 액세스하면 대부분의 감사 로그에는 ID와 가장하려는 서비스 계정 ID가 모두 포함됩니다. 자세한 내용은 감사 로그 해석을 참조하세요.

Google Cloud 콘솔을 사용할 때는 항상 사용자 인증 정보를 사용해서 인증을 수행합니다. Google Cloud 콘솔에서는 서비스 계정을 가장하여 리소스에 액세스할 수 없습니다.

가장 없이 인증

서비스 계정을 가장하지 않아도 워크로드나 사용자가 서비스 계정으로 인증을 받을 수 있는 다양한 방법이 있습니다.

  • 워크로드는 연결된 서비스 계정을 사용하여 Google API에 인증합니다. 이 경우 연결된 서비스 계정은 워크로드 ID로 작동하며 요청에 포함된 유일한 인증된 ID입니다.

    워크로드가 Google Cloud에 인증하는 방법은 워크로드 ID를 참조하세요.

  • 주 구성원은 서비스 계정 키를 사용해서 서비스 계정으로 인증됩니다. 서비스 계정 키를 사용하여 서비스 계정으로 인증할 때는 서비스 계정의 인증된 ID 하나만 필요합니다. ID가 하나만 있기 때문에 키를 사용하는 것은 서비스 계정 가장이 아닙니다.

이러한 경우에 감사 로그는 서비스 계정의 ID만 기록합니다. 워크로드에서 코드를 실행한 사용자의 ID와 같은 다른 ID 또는 인증을 위해 서비스 계정 키를 사용한 사용자의 ID는 기록하지 않습니다. 따라서 서비스 계정 키를 사용하거나 개발자에게 권한이 있는 리소스(예: VM 인스턴스에 대한 SSH 세션)에서 코드를 실행할 수 있는 권한을 부여하면 권한 에스컬레이션 및 부인 방지 위험이 발생할 수 있습니다.

필수 권한

서비스 계정을 가장하려면 iam.serviceAccounts.getAccessToken 권한이 필요합니다. 이 권한은 서비스 계정 토큰 생성자 역할(roles/iam.serviceAccountTokenCreator)과 같은 역할에 포함됩니다.

가장에 필요한 역할에 대한 자세한 내용은 서비스 계정 인증 역할을 참조하세요.

서비스 계정 가장의 사용 사례

서비스 계정 가장은 다음과 같은 태스크를 수행할 때 유용합니다.

  • 사용자에게 임시 승격된 액세스 부여
  • 어떤 태스크에 대해 특정 권한 집합이 충분한지 여부 테스트
  • 서비스 계정으로만 실행될 수 있는 애플리케이션 로컬 개발
  • 외부 애플리케이션 인증

임시 승격 액세스 부여

경우에 따라 사용자가 특정 리소스에 임시로 액세스하도록 허용해야 할 수 있습니다. 예를 들어 다른 사용자가 문제를 해결할 수 있도록 추가 액세스 권한을 부여하거나 정당한 근거를 제시한 후 제한된 시간 동안 민감한 정보에 액세스하도록 허용할 수 있습니다.

서비스 계정 가장은 이렇게 임시로 승격된 액세스 권한을 사용자에게 부여할 수 있는 방법 중 하나입니다. 서비스 계정을 사용해서 사용자에게 승격된 액세스 권한을 일시적으로 부여하려면 서비스 계정에 원하는 IAM 역할을 할당하는 것부터 시작합니다. 그런 후 서비스 계정 가장 권한을 부여하거나 토큰 브로커를 사용해서 서비스 계정에 대해 단기 사용자 인증 정보를 발행하여 사용자가 서비스 계정을 가장할 수 있도록 허용합니다.

사용자에게 승격된 액세스 권한을 일시적으로 부여하는 방법은 임시로 승격된 액세스 권한 개요를 참조하세요.

권한 테스트

경우에 따라 어떤 태스크에 대해 특정 권한 집합이 충분한지 여부를 확인해야 할 수 있습니다. 예를 들어 어떤 과도한 권한을 삭제해도 서비스 계정이 애플리케이션을 계속 실행할 수 있는지 확인해야 할 수 있습니다. 또는 현재 IAM 역할을 사용해서 사용자가 태스크 문제를 해결하고 특정 명령어를 실행할 수 있는지 확인해야 할 수 있습니다.

서비스 계정 가장을 사용해서 특정 권한 집합을 테스트할 수 있습니다. 먼저 서비스 계정을 만들고 여기에 테스트하려는 권한이 포함된 하나 이상의 IAM 역할을 부여할 수 있습니다. 그런 후 서비스 계정을 가장하고 태스크를 시도합니다. 이 방법을 사용하면 테스트 사용자 계정을 만들거나 자체 IAM 권한을 수정할 필요 없이 권한을 테스트할 수 있습니다.

서비스 계정을 가장하는 방법은 서비스 계정 가장 사용을 참조하세요.

로컬로 애플리케이션 개발

로컬로 애플리케이션을 개발할 때는 일반적으로 사용자 인증 정보를 사용해서 인증할 수 있습니다. 하지만 사용자가 일반적으로 구성할 수 없는 커스텀 대상이 있는 토큰이 필요한 서비스를 인증하려는 경우와 같이 상황에 따라 인증이 불가능할 수도 있습니다. 이러한 경우에는 사용자 인증 정보로 인증하는 대신 서비스 계정으로 인증해야 합니다.

이러한 상황에서는 서비스 계정 가장을 사용하는 것이 좋습니다. 서비스 계정 가장을 사용하면 추가적인 보안 위험을 초래할 수 있는 서비스 계정 키 사용을 방지할 수 있습니다.

서비스 계정을 가장하여 애플리케이션을 개발하는 방법은 서비스 계정 가장을 참조하세요.

외부 애플리케이션 인증

Google Cloud 리소스에 액세스하려면 Google Cloud 외부에서 실행되는 애플리케이션이 Google Cloud에 인증되어야 합니다. 이러한 애플리케이션을 인증하는 한 가지 방법은 서비스 계정 가장을 사용하는 것입니다.

애플리케이션이 서비스 계정을 가장하도록 하려면 먼저 애플리케이션에 대해 인증된 ID를 제공하는 워크로드 아이덴티티 제휴를 설정해야 합니다. 그런 후 사용자 인증 정보 구성 파일을 사용하여 서비스 계정을 가장하도록 애플리케이션을 구성할 수 있습니다.

서비스 계정 키를 사용하여 외부 애플리케이션을 가장할 수도 있지만 가능한 한 이렇게 하지 않는 것이 좋습니다. 서비스 계정 키는 추가적인 보안 위험을 초래하므로 가능한 한 피하는 것이 좋습니다.

다음 단계