Google Cloud Platform에 대한 액세스 취소

이 문서에서는 Google Cloud Platform 프로젝트에 대한 특정 사용자의 액세스를 취소하기 위한 권장사항을 다룹니다. 이 문서는 두 섹션으로 나뉩니다. 첫 번째 섹션에서는 액세스를 쉽게 취소할 수 있게 하는 방식으로 프로젝트를 설정하는 방법을 다룹니다. 두 번째 섹션에는 다양한 유형의 리소스에 대한 특정 사용자의 액세스를 취소하기 위한 단계별 절차가 나와 있습니다.

배경

Google Cloud Platform 리소스를 관리하다 보면 누군가의 액세스 권한을 삭제해야 할 때가 있습니다. 직원이 퇴사하거나, 도급업자와의 계약이 종료되거나, 함께 작업하던 사람이 다른 프로젝트 팀으로 옮길 때, 리소스에 대한 불필요한 액세스를 철저히 취소하기 위해 처리해야 하는 몇 가지 사항이 있습니다.

이러한 프로세스 중 일부는 선택사항입니다. 보안 요건, 사용 중인 제품, 액세스가 취소되는 사람에 대한 신뢰도에 따라 이러한 단계 중 어떤 것을 실행할지 결정해야 합니다. 이 문서를 참조하여 자신의 GCP 사용 방식에 맞는 정책과 절차를 마련하시기 바랍니다.

프로젝트 설정

설정 시점에 충분히 깊이 생각해서 선택함으로써 프로젝트에서 사용자 액세스 권한을 효율적이고 안전하게 취소할 수 있는 능력을 개선할 수 있습니다.

VM에 대한 액세스 제한

Google Compute Engine, Google Kubernetes Engine, App Engine 가변형 환경에서 사용하는 것과 같은 가상 머신은 공격에 취약할 가능성이 큽니다. 누군가 VM에 한 번이라도 액세스한 적이 있다면(특히 루트 또는 관리자 액세스 권한으로 액세스), 그런 사람이 VM을 수정하지 않았고 다음에도 자신의 액세스를 허용하려는 목적으로 백도어를 남기지 않았으리라고 보장하기는 극히 어려운 일입니다. 따라서 반드시 액세스해야 할 분명하고도 구체적인 필요가 있는 사람에게만 VM 액세스를 제한적으로 허용하세요. 참고로, 프로젝트 편집자와 소유자는 기본적으로 프로젝트의 모든 VM에 대한 관리자 액세스 권한이 있습니다.

개인에게 로그인 액세스 권한을 부여하기 전에, 이 개인이 해야 하는 작업에 과연 로그인 액세스 권한이 정말 필수인지 생각해보고 가능하다면 다른 방법으로 해결할 수는 없는지 잘 살펴보세요. 코드를 배포하기 위해 모든 개발자에게 로그인 액세스 권한을 부여하는 대신 Chef, Puppet, Salt와 같은 도구를 사용하여 배포를 관리하는 방안을 고려하세요.

사용자 인증 정보 순환 준비

프로젝트 수준에서 사용자 인증 정보를 중단 없이 수월하게 순환할 수 있도록 프로젝트와 리소스를 설계해야 합니다. 이러한 사용자 인증 정보는 서비스 계정 키, OAuth 클라이언트 보안 비밀, 애플리케이션별 암호(예: 데이터베이스 루트 비밀번호)와 같이 프로젝트 자체에 연계된 암호입니다. 지금 이를 위한 계획을 세우고 새 사용자 인증 정보를 필요로 하는 모든 애플리케이션에 이를 쉽게 배포할 수 있도록 하세요.

API 키 제한

API 키를 만들고 관리할 때, 이러한 키를 사용할 수 있는 웹사이트, IP 주소, 앱의 집합을 제한하세요. API 키는 모든 프로젝트 멤버에게 보이므로, 제한이 없는 키를 순환하거나 삭제하여 청구 액세스를 취소해야 합니다. API 키를 안전하게 사용하기 위한 권장사항에 대해 읽어보고 적절히 사용 계획을 세우세요.

액세스 취소

프로젝트 설정을 적절하게 했다면 다음 프로세스로 어떤 사람에게 주어진 액세스 권한을 효율적이고 안전하게 취소할 수 있습니다.

프로젝트 멤버십에서 계정 삭제

  1. Google Cloud Platform Console에서 IAM 권한 페이지로 이동합니다.

    IAM 권한

  2. 계정을 삭제하려는 프로젝트를 선택합니다.

  3. 멤버 목록에서 삭제하려는 계정이 포함된 행 옆에 있는 체크박스를 클릭한 후 삭제를 클릭합니다. 또는 삭제하려는 계정 옆에 있는 휴지통 아이콘을 클릭합니다.

프로젝트 사용자 인증 정보 순환

서비스 계정 키

서비스 계정은 기본적으로 연결된 프로젝트의 편집자로 간주하는 비사용자 계정입니다. 서비스 계정으로서의 역할을 할 수 있는 사람은 프로젝트 편집자가 할 수 있는 모든 일을 할 수 있습니다.

프로젝트 소유자만이 새로운 서비스 계정이나 기존 서비스 계정에 대한 키를 만들 수 있습니다. 액세스 권한이 취소되는 사람이 프로젝트 소유자라면 기존 서비스 계정 키를 순환해야 합니다. 그 사람이 프로젝트 소유자가 아니라면 이 단계를 건너뛰어도 됩니다. 하지만 그 사람이 소스 코드 저장소 또는 애플리케이션 구성과 같은 안전한 Google Cloud Platform 도구 외부의 어디선가 서비스 계정 키에 대한 액세스 권한을 가지고 있었을 수 있는지 생각해 보세요.

  1. Google Cloud Platform Console에서 API 사용자 인증 정보 페이지로 이동합니다.

    API 사용자 인증 정보

  2. 사용자 인증 정보 만들기를 클릭한 후 서비스 계정 키를 선택합니다.

  3. 서비스 계정 메뉴에서 대상 계정을 선택합니다.

  4. 만들려는 키 유형을 선택합니다. 대부분의 상황에서 JSON을 권장하지만, P12에 의존하는 코드가 있다면 이전 버전과의 호환성을 위해 P12를 사용할 수 있습니다.

  5. 만들기를 클릭합니다. 새 키를 포함한 파일이 브라우저를 통해 자동으로 다운로드됩니다. 이 키가 필요한 모든 애플리케이션에 키를 배포합니다.

  6. 새로운 키가 예상대로 작동하는지 확인한 후, 사용자 인증 정보 페이지로 돌아가고 해당 서비스 계정과 연결된 이전 키를 삭제합니다.

OAuth 클라이언트 ID 암호

OAuth 클라이언트 ID 암호로는 프로젝트에 직접 액세스할 수 없습니다. 하지만 공격자가 Google이 애플리케이션 사용자를 대신해 제공하는OAuth 갱신 토큰을 훔칠 수 있는 경우, 공격자는 클라이언트 ID 암호를 가지고 애플리케이션에서 원래 요청한 것과 같은 범위 내에서 사용자의 Google 계정에 액세스할 수 있습니다.

OAuth 클라이언트 ID 암호는 모든 프로젝트 소유자와 편집자가 볼 수 있지만, 뷰어는 볼 수 없습니다. 액세스 권한이 취소되는 사람이 소유자나 편집자가 아니라면 이 단계를 건너뛰어도 됩니다. 하지만 그 사람이 소스 코드 저장소 또는 애플리케이션 구성과 같은 안전한 Google Cloud Platform 도구 외부의 어디선가 클라이언트 ID 암호에 대한 액세스 권한을 가지고 있었을 수 있는지 생각해 보세요.

  1. Google Cloud Platform Console에서 API 사용자 인증 정보 페이지로 이동합니다.

    API 사용자 인증 정보

  2. 수정하려는 OAuth 2.0 클라이언트 ID의 이름을 클릭합니다. 그러면 선택한 ID에 관한 세부정보를 포함한 클라이언트 ID 페이지가 열립니다.

  3. 클라이언트 ID 페이지에서 비밀번호 재설정을 클릭합니다.

  4. 확인 대화상자에서 재설정을 클릭하여 이전 암호를 즉시 취소하고 새 암호를 설정합니다. 이에 따라 활성 사용자는 다음 요청 시 다시 인증해야 합니다.

  5. 새 암호가 필요한 애플리케이션에 새 암호를 배포합니다.

API 키

API 키로는 프로젝트 또는 사용자의 데이터에 액세스할 수 없지만, Google이 누구에게 API 요청 비용을 청구하는지를 관리할 수 있습니다. 프로젝트 멤버는 누구라도 프로젝트의 API 키를 볼 수 있습니다. 제한되지 않은 키가 있는 경우 프로젝트에 대한 어떤 사람의 액세스 권한을 취소할 때 이러한 키를 삭제하거나 다시 생성해야 합니다.

  1. Google Cloud Platform Console에서 API 사용자 인증 정보 페이지로 이동합니다.

    API 사용자 인증 정보

  2. 사용자 인증 정보 만들기를 클릭하고 API 키를 선택합니다.

  3. 대화상자에 새로 생성된 키가 표시됩니다. 바꾸고 싶은 키를 사용하는 모든 애플리케이션에 이 키를 배포합니다.

  4. 새로운 키로 애플리케이션이 예상대로 작동하는지 확인한 후, 사용자 인증 정보 페이지로 돌아가고 이전의 제한되지 않은 키를 삭제합니다.

VM에 대한 액세스 취소

액세스를 취소하려는 사람이 프로젝트 VM에 대한 로그인 액세스 권한이 없다면 이 단계를 건너뛰어도 됩니다.

  1. 그 사람이 액세스 권한을 가졌던 모든 프로젝트 수준 SSH 키를 삭제합니다.

  2. 그 사람이 SSH 액세스 권한을 가졌던 각각의 VM에서 모든 인스턴스 수준 키를 삭제합니다.

  3. 로그인 액세스 권한을 가졌던 모든 VM에서 그 사람의 계정을 삭제합니다.

  4. 그 사람이 VM에 대한 백도어 액세스를 제공하기 위해 설치했을 수 있는 의심스러운 애플리케이션이 있는지 확인합니다. VM에서 실행 중인 코드의 보안에 대해 확신할 수 없는 경우, 해당 코드를 다시 만들고 소스에서 필요한 애플리케이션을 다시 배포합니다.

  5. 계획하거나 예상한 구성에서 VM 방화벽 설정이 변경되지 않았는지 확인합니다.

  6. 커스텀 기본 이미지에서 새 VM을 만드는 경우 새로운 VM의 보안을 훼손하는 방식으로 기본 이미지가 수정되지는 않았는지 확인합니다.

Cloud SQL 데이터베이스에 대한 액세스 취소

프로젝트에서 Cloud SQL 리소스를 사용하지 않는 경우에는 이 단계를 건너뛰어도 됩니다.

  1. Google Cloud Platform Console에서 SQL 인스턴스 페이지로 이동합니다.

    SQL 인스턴스

  2. 액세스 권한을 취소하려는 데이터베이스의 인스턴스 ID를 클릭합니다.

  3. 액세스 제어를 클릭합니다. 이 탭에서 승인된 네트워크 아래의 IP 주소 목록과 App Engine 승인 아래의 앱 목록이 예상한 바와 일치하는지 확인합니다. 액세스 권한을 취소하려는 사람이 여기에 나열된 네트워크 또는 애플리케이션에 대한 액세스 권한을 가진 경우 그 사람은 이 데이터베이스에 액세스할 수 있습니다.

  4. 사용자를 클릭합니다. 이 탭에서 그 사람이 액세스 권한을 가졌던 모든 사용자 계정의 비밀번호를 삭제하거나 변경합니다. 이 사용자 계정에 의존하는 모든 애플리케이션을 반드시 업데이트해야 합니다.

App Engine 다시 배포

App Engine 앱은 연결된 프로젝트에서 편집자인 서비스 계정에 기본적으로 액세스할 수 있습니다. App Engine 요청 핸들러는 새로운 VM 만들기, Cloud Storage의 데이터 읽기 또는 수정과 같은 작업을 수행할 수 있습니다. App Engine에 코드를 배포할 수 있는 사람은 이 서비스 계정을 사용하여 프로젝트로의 백도어를 열 수 있습니다. 배포한 앱의 코드 무결성이 걱정될 경우 버전 제어 시스템에서 양호한 상태로 알려진 체크아웃으로 (모든 모듈을 포함하여) 앱을 다시 배포할 수도 있습니다.

다른 리소스에 대한 권한 확인

그 사람이 액세스 권한을 가졌을 수 있는 프로젝트의 다른 리소스를 생각해보고 그러한 객체에 대한 권한의 보안이 유지되는지 확인하세요. 확인할 리소스로는 다음과 같은 것들이 있습니다.

다음 단계

Google Cloud 보안 개요를 읽어보세요.

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

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