Google Cloud의 ID 및 액세스 거버넌스 패턴과 방식

Last reviewed 2022-09-27 UTC

조직에서 Google Cloud에서 실행되는 애플리케이션 및 워크로드에 대한 ID 거버넌스 및 액세스 관리 방식을 개발할 때 사용할 수 있는 다양한 Google Cloud 제품 및 서비스가 있습니다. 이 문서는 고객 팀에서 일하는 보안 관리자, 운영 관리자, 엔터프라이즈 아키텍트와 이러한 도구 및 제어의 사용 방법을 알고자 하는 사용자를 대상으로 합니다.

이 문서에서는 다음 항목이 있다고 가정합니다.

  • Google Cloud 프로젝트
  • Cloud ID 그룹 및 사용자를 관리할 수 있는 관리 액세스 권한이 있는 사용자 계정. 이 문서의 절차 예시를 실행하려면 이 액세스 권한이 필요합니다.
  • Cloud ID 그룹 및 사용자를 관리할 수 있는 관리 액세스 권한이 없는 사용자 계정. 이 문서의 절차 예시에서 설정한 일부 제어를 테스트하려면 이 계정이 필요합니다.

    Google Cloud 프로젝트에 대한 액세스 권한이 없고 Cloud ID에 대한 관리 액세스 권한이 없는 경우 Google Cloud 프로젝트 만들기Cloud ID 설정을 참조하세요.

사용하지 않는 계정 및 권한 찾기

사용되지 않은(분리된) 사용자 계정과 서비스 계정이 보안 위험을 초래할 수 있으므로 더 이상 필요하지 않은 사용자 계정을 삭제하는 것이 좋습니다. 다음과 같은 방법으로 기업에서 위험을 이해하고 위험을 줄이는 데 도움이 되는 Google Cloud Policy Intelligence를 사용할 수 있습니다.

  • 회사의 직원이 퇴사하거나 역할이 변경되는 등의 이유로 더 이상 사용하지 않는 계정 및 권한을 조직의 관리자가 검색할 수 있도록 지원합니다.
  • 작업 완료 후에 폐기된 서비스 계정을 식별하는 데 도움이 됩니다.

IAM 권장사항 확인 및 적용

IAM 추천자는 Policy Intelligence 도구 및 서비스 모음의 일부입니다. 머신러닝(ML)을 사용하여 Google Cloud 리소스에 대한 액세스 권한이 필요 없는 계정을 식별하는 데 도움이 되는 스마트한 액세스 제어 권장사항을 제공합니다. 그런 다음 권장사항을 검토하고 적용 여부를 결정할 수 있습니다. 또한 IAM 추천자는 조직의 모든 구성원에게 최소 권한의 원칙을 유지하는 데 도움이 됩니다. 추천자 서비스는 권장사항을 제공하는 것 외에도 ML을 사용하여 자세한 통계를 제공합니다. 통계는 리소스 사용량에서 눈에 띄는 패턴을 강조표시한 발견 항목입니다. 예를 들어 프로젝트에서 권한 사용에 대한 추가 정보를 수집하고 더 이상 사용하지 않고 더 이상 필요하지 않은 권한을 식별하며 사용하지 않는 서비스 계정을 식별할 수 있습니다.

엔터프라이즈급 규모의 Google Cloud Console에서 IAM 권장사항을 확인하고 적용할 수 있습니다. 다음 절차 예시에서는 BigQuery를 사용하여 조직의 액세스 권한을 검토하고 적절하게 조정합니다. BigQuery 통합을 설정하려면 IAM 추천자의 권장사항을 BigQuery 데이터 세트로 내보내도록 구성합니다. 그런 다음 Looker StudioLooker와 같은 시각화 도구를 사용하여 이 데이터를 쿼리하고 검토할 수 있습니다.

구현

  1. Google Cloud 콘솔의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 만들거나 선택합니다.

  2. BigQuery는 새 프로젝트에서 자동으로 사용 설정됩니다. 기존 프로젝트에서 BigQuery를 활성화하려면 BigQuery API를 사용 설정합니다.

    API 사용 설정

  3. IAM 추천자에서 데이터를 가져오도록 BigQuery Data Transfer Service를 구성합니다. 자세한 내용은 BigQuery로 권장사항 내보내기를 참조하세요.

  4. BigQuery 페이지로 이동합니다.

    BigQuery로 이동

  5. 다음 쿼리를 복사하여 편집자 필드에 붙여넣습니다.

    SELECT
       recommendation_details
    FROM PROJECT_ID.DATASET.TABLE_NAME
    WHERE recommender = "google.iam.policy.Recommender"
    AND recommender_subtype = "REMOVE_ROLE"
    

    다음을 바꿉니다.

    • PROJECT_ID: 이 예시를 실행하기 위해 사용 중인 Google Cloud 프로젝트 ID입니다.
    • DATASET: BigQuery Data Transfer Service 작업을 설정할 때 선택한 데이터 세트의 이름입니다.
    • TABLE_NAME: BigQuery Data Transfer Service 작업에서 만든 테이블의 이름입니다.

    이 쿼리를 실행하여 IAM 추천자 REMOVE_ROLE 추천의 recommender_subtype 하위유형을 식별합니다.

  6. 실행을 클릭합니다. 쿼리 결과를 사용하여 미사용 역할 및 알맞은 크기의 IAM 역할 binding을 식별합니다.

    쿼리 결과를 Sheets에 저장할 수 있습니다. 자세한 내용은 Sheets에 쿼리 결과 저장을 참조하세요.

사용자에게 리소스 액세스 권한 요청 기능 제공

기업 관리자는 사용자가 리소스에 대한 액세스를 요청할 수 있는 기능이 필요합니다. 일반적으로 이러한 요청은 지정된 승인 담당자 또는 승인자 담당자 그룹이 액세스 권한을 부여하기 전에 요청을 승인해야 하는 승인 프로세스를 거칩니다. Google 그룹스를 사용하면 사용자 컬렉션에 액세스 정책을 적용하여 그룹 멤버십에 따라 리소스에 대한 액세스 권한을 부여하는 정책 관리 권장사항을 따를 수 있습니다. 이 방식은 그룹 멤버십 변경을 통해 발생하는 가입, 이동, 탈퇴 이벤트와 관련된 정책을 유지합니다.

개별 사용자 또는 서비스 계정에 대해 한 번에 하나씩 액세스 제어 권한을 부여하거나 변경하는 대신 Google 그룹스를 사용하여 전체 그룹에 액세스 제어 권한을 부여하고 변경할 수 있습니다. 또한 사용자를 추가하거나 삭제하도록 IAM 정책을 업데이트하는 대신 Google 그룹에서 구성원을 쉽게 추가하거나 삭제할 수 있습니다.

Google 그룹스를 사용하여 리소스 액세스 설정

Cloud ID를 사용하여 Google 그룹을 만들고 관리할 수 있습니다. Cloud ID는 사용자와 그룹을 관리하는 IDaaS(Identity as a Service) 솔루션입니다. 또한 Active DirectoryAzure Active Directory 같은 다른 ID 공급업체와 Google 간의 ID를 제휴하도록 Cloud ID를 구성할 수도 있습니다. Google 그룹스를 사용하면 사용자가 그룹에 대한 멤버십을 요청할 수도 있습니다. 이 요청은 요청을 승인하거나 거부할 수 있는 그룹 관리자에게 라우팅됩니다. 자세한 내용은 그룹 만들기 및 그룹 설정 선택을 참조하세요.

Google 그룹을 만들고 관리하여 Google Cloud 리소스에 대한 액세스 권한을 부여할 때는 선택한 설정이 미치는 영향을 고려해야 합니다. 그룹을 관리할 수 있는 사용자 수를 최소화하는 것이 좋지만 그룹에 항상 액세스할 수 있도록 그룹 관리자를 둘 이상 설정하는 것이 좋습니다. 또한 그룹 멤버십을 조직의 사용자로 제한하는 것이 좋습니다.

구현

이 절차 예시에서는 Google 그룹을 만들고 뷰어 그룹에 샘플 Google Cloud 프로젝트에 대한 액세스 권한을 부여합니다. 이 그룹에 추가한 구성원(또는 요청 시 액세스 권한을 부여하는 구성원)은 샘플 Google Cloud 프로젝트를 볼 수 있습니다.

샘플 Google 그룹 만들기

다음 단계에서는 Cloud ID가 구성되어 있다고 가정합니다. 자세한 내용은 Cloud ID 설정을 참조하세요. 그룹을 관리하는 데 필요한 권한이 있는지 확인합니다.

  1. Google Cloud Console에서 그룹 페이지로 이동합니다.

    그룹스로 이동합니다.

  2. 만들기를 클릭합니다.

  3. 그룹의 세부정보를 입력합니다.

    그룹에 구성원을 추가하려면 구성원 추가를 클릭한 후 구성원의 이메일 주소를 입력하고 Google 그룹스 역할을 선택합니다.

    완료되면 제출을 클릭하여 그룹을 만듭니다.

    그룹 설정은 Google 그룹스 내에서만 관리할 수 있습니다. Google 그룹스에서 이 그룹 관리를 클릭하여 그룹 설정을 구성합니다. 그룹에 가입할 수 있는 사용자를 선택하려면 그룹에 가입할 수 있는 사용자 메뉴에서 조직 사용자만을 선택합니다.

  4. 그룹 만들기를 클릭합니다.

그룹에 Google Cloud 프로젝트에 대한 액세스 권한 부여

  1. Google Cloud 콘솔의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 만들거나 선택합니다.
  2. Cloud Shell을 엽니다.

    Cloud Shell로 이동

  3. 다음 명령어를 실행하여 그룹에 프로젝트에 대한 뷰어 액세스 권한을 부여합니다.

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=group:GROUP_EMAIL --role=roles/viewer
    

    다음을 바꿉니다.

    • GROUP_EMAIL: 만든 그룹의 이메일 주소입니다.
    • PROJECT_ID: Google Cloud 프로젝트의 ID

조직 내 사용자의 사용자 액세스 요청 프로세스 테스트

다음 절차에서는 테스트 사용자 계정을 사용하여 조직의 사용자가 Google 그룹에 대한 액세스 권한을 요청하는 데 사용하는 단계를 보여줍니다.

  1. 관리자가 아닌 사용자로 Google 그룹스에 로그인합니다. 샘플 Google 그룹 만들기에서 만든 그룹이 모든 그룹 아래에 표시됩니다. 그룹이 표시되지 않으면 검색을 사용하여 찾습니다.
  2. 그룹에 대한 액세스를 요청하려면 그룹 가입 요청을 클릭합니다.

    액세스 권한이 부여되면 요청을 생성할 때 사용한 관리자가 아닌 사용자 계정으로 그룹이 뷰어 권한을 갖는 Google Cloud PROJECT_ID 프로젝트를 볼 수 있어야 합니다.

Google Cloud 리소스에 대한 시간 제한 액세스 권한 부여

기업의 사용자에게 Google Cloud 리소스에 대한 일시적인 단기 액세스 권한이 필요한 경우가 있을 수 있습니다. 단기 액세스는 개발자가 특정 작업을 수행하기 위해 Google Cloud 리소스에 임시로 액세스해야 하는 경우에 유용합니다. 또한 단기 액세스는 다음과 같은 이점이 있습니다.

  • 관리 오버헤드를 줄입니다.
  • 최소 권한의 원칙과 적절한 시기에 액세스를 보장합니다.

이러한 유형의 액세스 권한을 부여할 수 있으면 사용자가 신속하고 직접적인 개입이 필요한 비상 상황에서 리소스에 액세스해야 할 때 관리자에게 유용합니다. 그러나 단기 액세스 권한을 수동으로 추적하고 적시에 삭제되도록 하는 것은 어려울 수 있습니다. Identity and Access Management(IAM) 조건부 액세스 정책을 사용하면 조건부 역할 결합을 사용하여 Google Cloud 리소스에 임시(만료되는) 액세스 권한을 설정할 수 있으므로 관리자의 오버헤드를 줄일 수 있습니다.

조건부 역할 결합 및 그룹 멤버십 만료 사용

새 IAM 정책 또는 기존 IAM 정책에 조건부 역할 결합을 추가하여 Google Cloud 리소스에 대한 액세스를 추가로 제어할 수 있습니다. 조건부 역할 결합을 사용하여 사용자나 그룹에 임시 액세스 권한을 부여하는 경우의 예시는 다음과 같습니다.

  • 지정된 시간 후에 만료되는 프로젝트에 대한 액세스 권한입니다.
  • 매달 또는 분기별로 반복되는 프로젝트에 대한 액세스 권한입니다.
  • Compute Engine 인스턴스에 액세스하여 인스턴스 중지와 같은 태스크를 관리할 수 있습니다.

Google 그룹스를 사용하여 사용자에게 Google Cloud 리소스에 대한 액세스 권한을 부여하는 경우 그룹 멤버십 만료 기능을 사용하면 Cloud Identity Groups API를 사용하여 그룹 멤버십 만료를 설정할 수 있습니다. 지정한 시간이 지나면 사용자가 그룹에서 자동으로 삭제됩니다.

구현

조건부 역할 결합을 사용하여 개발자에게 특정 Compute Engine 인스턴스를 관리할 수 있는 임시 액세스 권한을 부여할 수 있습니다. 이 예시에서 역할 결합은 2021년 12월 31일에 만료되도록 설정됩니다.

  1. Cloud Shell에서 다음 변수를 설정합니다.

    export INSTANCE=create example-instance-1
    export ZONE=us-west1-b
    export USER=USER_ID_TO_GIVE_TEMPORARY_ACCESS_TO
    

    USER_ID_TO_GIVE_TEMPORARY_ACCESS_TO를 임시 액세스 권한을 부여할 조직 내 사용자 이름으로 바꿉니다.

  2. 샘플 Compute Engine 인스턴스를 만듭니다.

    gcloud compute instances create $INSTANCE \
        --zone $ZONE \
        --machine-type g1-small
    

    다음 단계에 따라 조직 내 사용자에게 이 인스턴스에 대한 임시 액세스 권한을 부여합니다.

  3. 선택한 사용자에게 임시 액세스 권한을 부여합니다.

    gcloud compute instances add-iam-policy-binding $INSTANCE \
        --zone=$ZONE \
        --member="user:$USER" \
        --role='roles/compute.instanceAdmin.v1' \
        --condition='expression=request.time < timestamp("2022-01-01T00:00:00Z"),title=expires_end_of_2021,description=Expires at midnight on 2021-12-31'
    
  4. 만든 Compute Engine 인스턴스를 유지합니다. 이 문서의 뒷부분에 있는 액세스 권한 관리에서 이 인스턴스를 사용합니다.

    또는 다음 명령어를 실행하여 example-instance-1 인스턴스를 삭제할 수 있습니다.

    gcloud compute instances delete $INSTANCE
    

정책 변경, 서비스 계정 만들기, 감사를 위한 서비스 계정 할당과 같은 IAM 수명 주기 이벤트를 검토해야 하는 경우 Cloud 감사 로그를 사용하면 됩니다. 관리자는 Cloud 감사 로그를 사용하여 포렌식 및 분석을 위한 이전 데이터를 확인할 수 있습니다. 감사 로그를 분석하면 액세스 패턴을 이해하고 액세스 이상치를 파악할 수 있습니다. 다음과 같은 시나리오에서 감사 로그 분석이 중요할 수도 있습니다.

  • 정보 유출 시 권한 및 리소스에 대한 액세스 분석입니다.
  • IAM 정책 변경으로 인해 발생하는 프로덕션 문제 분석으로 특히 어떤 사용자 또는 어떤 프로세스로 인해 변경사항이 발생했는지 확인하려는 경우입니다.

Cloud 감사 로그는 사용자가 수행한 작업, 활동이 발생한 위치, 시기에 대한 정보를 저장합니다. 감사 로그는 다음과 같이 분류됩니다.

ID 및 액세스 관련 관리 로깅에는 다음 감사 로그를 사용하는 것이 좋습니다.

  • 관리자 활동 감사 로그
  • 정책 거부 감사 로그

관리자 활동 감사 로그는 프로젝트, Compute Engine 인스턴스, 서비스 계정과 같은 Google Cloud 리소스의 변경사항을 저장합니다. 다음은 관리자 활동 감사 로그에 저장되는 이벤트의 예시입니다.

  • 서비스 계정 만들기
  • IAM 정책 변경
  • 서비스 계정 키 다운로드

정책 거부 감사 로그는 사용자 또는 서비스 계정이 보안 정책 위반으로 인해 Google Cloud 서비스에 대한 액세스를 거부하면 기록됩니다.

ID 수명 주기 이벤트에 대한 Cloud 감사 로그 설정

Google Cloud 콘솔에서 감사 로그를 보거나 Cloud Logging API 또는 명령줄 인터페이스를 사용하여 로그를 쿼리할 수 있습니다.

모든 감사 로그에는 보관 기간이 있습니다. 기업에서 감사 로그를 기본 보관 기간보다 오래 저장해야 하는 경우 로그 싱크를 만들어 로그를 BigQuery 또는 다른 싱크 대상으로 내보내야 합니다. BigQuery로 로그를 내보내면 데이터 열의 하위 집합과 선택한 데이터(시간 또는 기타 측정기준에 따라)를 확인하고 집계 분석을 수행할 수 있습니다.

구현

다음 절차 예시는 Google Cloud 프로젝트 로그를 쿼리하여 다음 이벤트가 발생했는지 확인하는 방법을 보여줍니다.

  • IAM 정책을 변경했습니다.
  • 새 서비스 계정이 생성되었습니다.
  • 새 서비스 계정 키가 생성되었습니다.

IAM 정책 변경사항 보기

  1. Google Cloud 콘솔에서 Logging > 로그 탐색기 페이지로 이동합니다.
  2. 로그 탐색기 페이지에서 기존 Google Cloud 프로젝트를 선택합니다.
  3. 다음 쿼리를 쿼리 빌더에 붙여넣습니다.

    logName="projects/<PROJECT>/logs/cloudaudit.googleapis.com%2Factivity" AND
    (resource.type="project" OR resource.type="service_account") AND
    resource.labels.project_id="<PROJECT>" AND
    (protoPayload.methodName="SetIamPolicy" OR
    protoPayload.methodName="google.iam.admin.v1.CreateServiceAccount"
    OR
    protoPayload.methodName="google.iam.admin.v1.CreateServiceAccountKey")
    

    PROJECT를 Google Cloud 프로젝트 ID로 바꿉니다.

  4. 쿼리 실행을 클릭합니다.

그룹 멤버십 변경사항 보기

Google 그룹 멤버십의 변경사항은 활동 로그에서 추적됩니다. 이 로그에 액세스하는 방법은 그룹 멤버십 변경 로그 보기를 참조하세요.

액세스 인증

정책 분석자를 사용하면 사용자가 설정된 기준에 따라 또는 주기적으로 Google Cloud 리소스에 대한 적절한 액세스 권한을 가지고 있는지 확인할 수 있습니다. 이 확인은 규정 준수 및 감사 용도로 중요합니다. 또한 보안 담당자와 감사관이 어떤 사용자가 어떤 리소스에 어느 정도로 액세스할 수 있는지 검토하는 데 유용합니다. 정책 분석자를 사용하면 어떤 ID 또는 주 구성원(사용자, 서비스 계정, 그룹, 도메인)이 조직 내 리소스 계층 구조에서 어떤 Google Cloud 리소스에 액세스할 수 있는지 식별할 수 있습니다. 또한 액세스 유형을 식별하는 데 도움이 됩니다. 정책 분석자를 통해 답을 얻을 수 있는 질문의 예시는 다음과 같습니다.

  • 서비스 계정에 액세스할 수 있는 사용자는 누구인가요?
  • 개인 식별 정보(PII)가 포함된 BigQuery 데이터 세트의 데이터를 읽을 수 있는 사용자는 누구인가요?

정책 분석자를 다음 방법으로 사용할 수 있습니다.

정책 분석자를 사용하여 사용자 액세스 확인

다음 쿼리 예시는 정책 분석기를 사용하여 사용자 액세스 권한에 대해 얻을 수 있는 유형 통계를 보여줍니다.

  • 주 구성원(사용자, 서비스 계정, 그룹, 도메인)에게 부여된 역할 또는 권한. 예를 들어 퇴사 직원이 프로덕션 프로젝트에 대해 갖는 액세스 권한을 확인할 수 있습니다.
  • 사용자에게 액세스 권한이 있는 리소스. 예를 들어 퇴사 직원이 프로덕션 프로젝트 리소스에 갖고 있는 액세스 권한을 확인할 수 있습니다.
  • 리소스에 대한 특정 수준의 액세스 권한이 있는 주 구성원. 예를 들어 특정 사용자가 프로젝트에서 어떤 버킷을 삭제할 수 있는지 확인할 수 있습니다.

구현

다음 절차 예시에서는 정책 분석자를 사용하여 사용자의 권한을 확인합니다.

  1. Cloud Shell에서 프로젝트의 Cloud Asset API를 사용 설정합니다.

    API 사용 설정

  2. 다음 명령어를 입력하여 사용자가 액세스할 수 있는 리소스를 확인합니다.

    gcloud asset analyze-iam-policy --organization="YOUR_ORG_ID" \
        --identity="user:USERNAME_TO_CERTIFY"
    

    다음을 바꿉니다.

    • YOUR_ORG_ID: Google Cloud 조직 ID입니다.
    • USERNAME_TO_CERTIFY: Google Cloud 액세스 권한을 확인할 사용자의 이름입니다.
  3. IAM 정책 데이터를 BigQuery로 추출합니다. 자세한 내용은 BigQuery에 정책 분석 작성을 참조하세요.

액세스 권한 관리

조직의 일부 사용자는 관리 태스크를 수행하는 데 특정 Google Cloud 리소스에 대한 권한 있는 액세스가 필요할 수 있습니다. 예를 들어 이러한 사용자는 특정 Google Cloud 프로젝트를 관리하거나 프로젝트 청구 및 예산을 설정하거나 Compute Engine 인스턴스를 관리해야 할 수 있습니다.

사용자에게 리소스에 대한 권한 있는 액세스를 영구 부여하는 대신 사용자가 적시(JIT) 권한 있는 액세스를 요청하게 할 수 있습니다. 적시 권한 있는 액세스 관리를 사용하면 다음을 수행할 수 있습니다.

  • 실수로 인한 리소스 수정이나 삭제 위험을 줄여줍니다. 예를 들어 사용자에게 필요한 경우에만 권한 있는 액세스가 있으면 사용자가 변경해서는 안 되는 리소스에 의도치 않게 영향을 주는 스크립트를 다른 시간에 실행하지 못하게 할 수 있습니다.
  • 권한이 활성화된 이유를 나타내는 감사 추적을 만듭니다.
  • 과거 활동을 분석하기 위한 감사 및 검토를 수행합니다.

또는 서비스 계정에 대한 권한 있는 액세스를 부여하고 사용자가 서비스 계정을 가장하도록 허용할 수 있습니다.

사용자에게 액세스 권한 부여

Google Cloud에서 기업 사용자에 대한 액세스 권한 관리는 대략 다음과 같이 요약할 수 있습니다.

  • 기업 사용자에게 권한 있는 액세스를 요청할 수 있는 기능을 제공합니다.
  • Cloud 감사 로그를 검토해 액세스 권한 요청 및 액세스 패턴을 분석합니다. 관리자는 이러한 로그를 사용하여 액세스 권한 패턴을 검토하고 이상 행동을 감지할 수 있습니다. 기업에서 이러한 로그를 내보내 필요에 따라 감사 목적에 맞게 로그를 유지하는 것이 좋습니다.
  • 권한 있는 액세스가 자동으로 만료되거나 주기적으로 검토되는지 확인합니다.

리소스에 대한 권한 있는 액세스가 있는 모든 사용자에게 2단계 인증을 사용 설정합니다(다중 인증(MFA)이라고도 함). 관리자는 권한 있는 액세스가 사용할 때 보안을 강화하는 Access Context Manager를 사용하여 세분화된 속성 기반 액세스 제어를 만들 수도 있습니다. 예를 들어 리소스에 대해 액세스 권한을 사용할 때 사용자가 회사 네트워크에 있어야 한다고 지정하는 액세스 수준을 만들 수 있습니다.

구현

이 절차 예시에서 관리자는 Compute Engine 인스턴스에 대한 액세스 권한을 위한 Google 그룹을 만듭니다. Google Cloud에서 Compute Engine 인스턴스를 관리할 수 있는 액세스 권한이 부여된 서비스 계정을 만듭니다. 그룹을 서비스 계정과 연결하면 그룹 구성원이 권한이 있는 그룹에 대한 멤버십을 부여받은 기간 동안 서비스 계정을 가장할 수 있습니다.

액세스 권한을 위한 Google 그룹 만들기

  1. Google Cloud 관리자는 Google Cloud 프로젝트를 선택하거나 만듭니다.

    리소스 관리로 이동

  2. 프로젝트에 결제를 사용 설정합니다. 결제 사용 설정

  3. 사용자에게 리소스 액세스 권한 요청 기능 제공의 단계를 따라 새 Google 그룹을 만듭니다.

    그룹 이름을 elevated-compute-access로 지정합니다.

Google Cloud 서비스 계정 생성

  1. Cloud Shell의 액세스 권한용 Google 그룹 만들기에서 만든 프로젝트에 IAM Service Account Credentials API를 사용 설정합니다.

    API 사용 설정

  2. 다음 변수를 설정합니다.

    export PROJECT_ID=$DEVSHELL_PROJECT_ID
    export PRIV_SERVICE_ACCOUNT_NAME=elevated-compute-access
    export DELEGATE_GROUP=GROUP_EMAIL_ADDRESS
    

    GROUP_EMAIL_ADDRESS를 생성한 Google 그룹의 전체 이름으로 바꿉니다.

  3. 서비스 계정을 만듭니다.

    gcloud IAMservice-accounts create $PRIV_SERVICE_ACCOUNT_NAME \
        --description="Elevated compute access" \
        --display-name="Elevated compute access"
    
  4. 서비스 계정에 컴퓨팅 관리자 역할을 부여합니다.

    gcloud projects add-iam-policy-binding $PROJECT_ID \
        --member="serviceAccount:$PRIV_SERVICE_ACCOUNT_NAME@$PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/compute.admin"
    
  5. 만든 Google 그룹에 프로젝트에 대한 서비스 사용량 소비자 액세스 권한을 부여합니다.

    gcloud projects add-iam-policy-binding $PROJECT_ID \
        --member="group:$DELEGATE_GROUP" \
        --role="roles/serviceusage.serviceUsageConsumer"
    

    Google 그룹 구성원이 이 권한을 사용하여 사용자가 만든 서비스 계정을 가장할 수 있습니다

  6. Google 그룹에 사용자가 만든 서비스 계정을 가장할 수 있는 권한을 부여합니다.

    gcloud IAMservice-accounts add-iam-policy-binding
    $PRIV_SERVICE_ACCOUNT_NAME@$PROJECT_ID.iam.gserviceaccount.com --member="group
    :$DELEGATE_GROUP" --role="roles/iam.serviceAccountTokenCreator"
    
  7. Google Cloud 리소스에 대한 시간 제한 액세스 권한 부여의 절차를 위해 샘플 Compute Engine 인스턴스를 만들고 보관했다면 이 단계를 건너뜁니다. 샘플 인스턴스를 사용하여 이 예시의 단계를 실행할 수 있습니다.

    또는 다음 명령어를 사용하여 샘플 Compute Engine 인스턴스를 만듭니다.

    gcloud compute instances create example-instance-1 \
        --zone us-west1-b \
        --machine-type g1-small
    

    이 예시의 인스턴스를 사용하여 권한이 있는 그룹의 멤버십을 부여받은 사용자가 인스턴스에 액세스할 수 있는지 확인할 수 있습니다.

감사 로그 사용 설정

기업의 관리자는 Cloud 감사 로그를 사용 설정하여 권한이 있는 액세스가 로깅되고 검토 및 분석에 사용 가능한지 확인할 수 있습니다. 이 섹션의 절차는 감사 로깅을 사용 설정하는 방법을 보여줍니다.

  1. 프로젝트의 현재 IAM 정책을 가져옵니다.

    gcloud projects get-iam-policy $PROJECT_ID > /tmp/policy.yaml
    
  2. 정책 파일을 수정하여 Compute Engine API의 데이터 액세스 로그를 사용 설정합니다.

    cat <<EOF >> /tmp/policy.yaml
    auditConfigs:
    - auditLogConfigs:
     - logType: ADMIN_READ
     - logType: DATA_READ
     - logType: DATA_WRITE
     service: compute.googleapis.com
    EOF
    
  3. 새 정책을 설정합니다.

    gcloud projects set-iam-policy $PROJECT_ID /tmp/policy.yaml
    

비관리 사용자 계정으로 명의 도용 테스트

멤버십이 부여되면 관리자가 아닌 사용자 계정을 사용하여 그룹에 멤버십을 요청하고 서비스 계정을 가장하여 설정을 테스트할 수 있습니다.

이 섹션의 절차는 기업 사용자가 Google Cloud 리소스에 대한 액세스 권한을 요청하는 방법을 보여줍니다. 이 절차 예시에서 Google Cloud 리소스는 Google Cloud 프로젝트의 Compute Engine 인스턴스입니다. 조직의 사용자가 그룹에 대한 멤버십을 부여받은 후 서비스 계정을 가장하는 방법을 보여주기 위해 관련 Google 그룹에 멤버십을 요청할 수 있습니다.

  1. 관리자가 아닌 사용자 계정으로 Google 그룹에 로그인하고 elevated-compute-access 그룹에 대한 멤버십을 요청합니다.
  2. 동일한 계정을 사용하여 Google Cloud에 로그인합니다. 관리자가 요청을 승인하면 그룹에 액세스할 수 있어야 합니다. 이 예시에서는 그룹 멤버십 요청이 승인된 것으로 가정합니다.

  3. Cloud Shell에서 다음 명령어를 실행하여 기본 프로젝트를 설정합니다.

    gcloud config set project PROJECT_ID
    

    PROJECT_ID액세스 권한을 위한 Google 그룹 만들기 섹션에서 만든 프로젝트 ID로 바꿉니다.

  4. 이 프로젝트에 Compute Engine 인스턴스를 나열하려고 시도합니다.

    gcloud compute instances list
    

    Google Cloud 사용자에게 Compute Engine 리소스에 액세스할 수 있는 권한이 없음을 알리는 오류 메시지가 표시됩니다.

  5. 다음 명령어를 실행합니다.

    gcloud compute instances list
    --impersonate-service-account=elevated-compute-access@$PROJECT_ID.iam.gserviceaccount.com
    

    이 명령어는 elevated-compute-access Google 그룹에 대한 멤버십을 부여받을 때 액세스 권한이 주어진 서비스 계정을 가장하여 프로젝트의 Compute Engine 인스턴스를 나열합니다.

    관리자 계정으로 만든 example-instance-1 Compute Engine 인스턴스가 표시됩니다.

감사 로그 확인

Google Cloud 관리자는 생성된 감사 로그에 액세스하고 검토할 수 있습니다.

  1. 감사 로그에 액세스할 수 있는 관리자 권한이 있는 사용자 계정으로 Google Cloud Console에 로그인합니다.

  2. Cloud Logging에서 다음 쿼리를 입력하여 데이터 액세스 로그를 검토합니다.

    logName="projects/<PROJECT_ID>/logs/cloudaudit.googleapis.com%2Fdata_access"
    AND
    protoPayload.authenticationInfo.principalEmail="elevated-compute-access@PROJECT_ID.iam.gserviceaccount.com"
    

    PROJECT_ID를 프로젝트 ID로 바꾸고 쿼리를 실행합니다.

    이 쿼리는 Google 그룹에서 Compute Engine 인스턴스에 액세스하도록 서비스 계정을 가장한 사용자를 표시합니다. 또한 언제 서비스 계정이 도용되었는지와 요청 헤더의 세부정보 같은 기타 연관 세부정보도 표시합니다.

  3. 감사 로그 페이로드, 특히 페이로드의 protoPayload.authenticationInfo 객체를 검토합니다. 서비스 계정을 가장한 사용자의 사용자 이름은 firstPartyPrincipal 객체의 principalEmail 키 값으로 로깅됩니다.

  4. 관리자는 Security Command Center 대시보드에서 이벤트 위협 발견 항목을 검토할 수도 있습니다. Security Command Center에 대한 자세한 내용은 Event Threat Detection 사용을 참조하세요.

다음 단계