OAuth 클라이언트를 공유하는 방법

이 페이지에서는 조직 내의 다른 앱과 OAuth 클라이언트를 공유하는 방법을 설명합니다.

개요

프로젝트 간에 OAuth 클라이언트를 공유하면 조직의 모든 앱에 사용할 새 OAuth 클라이언트를 일일이 생성할 필요가 없습니다. OAuth 클라이언트 하나를 직접 생성한 후 앱 여러 개에 프로그래매틱 방식으로 할당하면 됩니다.

OAuth 클라이언트 공유는 Identity-Aware Proxy(IAP)를 사용 설정할 수 있지만 사용자 인증 정보 페이지에 액세스할 수 없는 에이전트와 OAuth 클라이언트를 공유하는 경우에도 사용됩니다.

OAuth 클라이언트 공유는 또한 애플리케이션이 브라우저 흐름에 Google 관리 OAuth 클라이언트를 사용하고 애플리케이션에 프로그래매틱 방식으로 액세스를 사용 설정하려는 경우에도 사용됩니다.

시작하기 전에

OAuth 클라이언트 만들기의 단계를 완료하여 새 OAuth 클라이언트를 만들거나 기존 OAuth 클라이언트를 사용할 수 있습니다.

프로그래매틱 액세스

이 섹션에서는 애플리케이션에 프로그래매틱 방식으로 OAuth 클라이언트가 액세스할 수 있도록 설정하는 단계를 설명합니다.

  1. 프로그래매틱 액세스를 위해 OAuth 클라이언트를 허용 목록에 추가합니다.

    조직에서 소유하고 있으며 애플리케이션에 프로그래매틱 액세스를 제공하려는 OAuth 클라이언트 ID 목록을 허용 목록에 추가할 수 있습니다.

    조직, 프로젝트, 폴더 수준에서 리소스 및 서비스의 OAuth 클라이언트를 허용 목록에 추가할 수 있습니다.

    gcloud

    1. 다음 명령어를 실행하여 SETTING_FILE 파일을 준비합니다. 필요에 따라 값을 업데이트합니다.

        cat << EOF > SETTING_FILE
          access_settings:
            oauth_settings:
              programmatic_clients: ["clientId1", "clientId2", ..]
        EOF
      
    2. gcloud iap settings set 명령어를 사용하여 원하는 수준에서 OAuth 클라이언트를 허용 목록에 추가합니다.

      gcloud iap settings set SETTING_FILE [--organization=ORGANIZATION --folder=FOLDER --project=/PROJECT --resource-type=RESOURCE_TYPE --service=SERVICE --version=VERSION
      

      명령어 예시:

      조직 내의 리소스에서 OAuth 클라이언트 ID를 허용 목록에 추가하려면 다음 명령어를 실행합니다.

        gcloud iap settings set SETTING_FILE --organization=ORGANIZATION
        

      폴더 내 리소스에서 OAuth 클라이언트 ID를 허용 목록에 추가하려면 다음 명령어를 실행합니다.

        gcloud iap settings set SETTING_FILE --folder=FOLDER
        

      프로젝트 내의 모든 웹 유형 리소스에서 OAuth 클라이언트 ID를 허용 목록에 추가하려면 다음 명령어를 실행합니다.

        gcloud iap settings set SETTING_FILE --project=PROJECT --resource-type=iap_web
        

      프로젝트 내 App Engine 서비스에서 OAuth 클라이언트 ID를 허용 목록에 추가하려면 다음 명령어를 실행합니다.

        gcloud iap settings set SETTING_FILE --project=PROJECT --resource-type=app-engine --service=SERVICE
        

      다음을 바꿉니다.

      • FOLDER: 폴더 ID
      • ORGANIZATION: 조직 ID
      • PROJECT: 프로젝트 ID
      • RESOURCE_TYPE: IAP 리소스 유형. app-engine, iap_web, compute, organization, folder이어야 합니다.
      • SERVICE: 서비스 이름. resource-typecompute 또는 app-engine인 경우 선택사항입니다.
      • VERSION: 버전 이름. compute에는 적용되지 않으며 resource-typeapp-engine인 경우 선택사항입니다.

    API

    1. 다음 명령어를 실행하여 iap_settings.json 파일을 준비합니다. 필요에 따라 값을 업데이트합니다.

      cat << EOF > iap_settings.json
      {
        "access_settings": {
            "oauth_settings": {
                programmatic_clients: ["clientId1", "clientId2", ..]
              }
          }
      }
      EOF
      
    2. gcloud iap settings get 명령어를 실행하여 리소스 이름을 가져옵니다. 출력에서 이름 필드를 복사합니다.
      다음 단계에서 이름이 필요합니다.

      gcloud iap settings get [--organization=ORGANIZATION --folder=FOLDER --project=PROJECT --resource-type=RESOURCE_TYPE --service=SERVICE --version=VERSION]
      
    3. 다음 명령어의 RESOURCE_NAME을 이전 단계의 이름으로 바꿉니다. IapSettings가 업데이트됩니다.

      curl -X PATCH \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Accept: application/json" \
      -H "Content-Type: application/json" \
      -d @iap_settings.json \
      "https://iap.googleapis.com/v1/RESOURCE_NAME:iapSettings?updateMask=iapSettings.accessSettings.oauthSettings.programmaticClients"
      
  2. 허용 목록에 있는 OAuth 클라이언트 ID 중 하나를 사용하여 애플리케이션에 로그인합니다. 프로그래매틱 인증을 참조하세요.

브라우저 액세스

Google Cloud 콘솔을 사용하여 IAP가 클라이언트 ID 및 보안 비밀을 사용하도록 설정하려면 다음 안내를 완료합니다.

위험

앱 간에 클라이언트를 공유하면 편리하지만 위험한 상황이 발생할 수 있습니다. 이 섹션에서는 클라이언트를 공유할 때 발생할 수 있는 위험과 이를 완화하는 방법에 대해 설명합니다.

단일 장애점

여러 앱에 OAuth 클라이언트 하나를 사용하면 단일 장애점이 생깁니다. 클라이언트를 잘못 삭제하거나 수정하면 이 클라이언트를 사용하는 모든 앱에 영향을 미칩니다.

이 영향을 줄이려면 공유 클라이언트에 중요한 사용 사례를 수행할 때만 클라이언트를 공유합니다.

클라이언트 보안 비밀번호 유출

클라이언트를 공유하려면 클라이언트 보안 비밀번호를 다른 사용자 및 스크립트와 공유해야 합니다. 이로 인해 클라이언트 보안 비밀번호 유출 위험이 높아집니다. IAP는 앱에서 만든 토큰과 유출된 클라이언트 보안 비밀번호로 만든 토큰을 구별할 수 없습니다.

Cloud Audit Logging을 사용하여 IAP 리소스에 대한 액세스를 모니터링할 수 있습니다. 클라이언트 보안 비밀번호가 유출될 가능성이 있다고 생각되면 사용자 인증 정보 페이지에서 재설정하세요.

이 위험을 줄이려면 클라이언트 보안 비밀번호를 보호합니다. 보안 비밀번호 공유를 제한하고 일반 텍스트로 저장하지 마세요.

승인된 사용자의 명의 도용

클라이언트 보안 비밀번호가 유출된 경우 악성 앱이 도메인의 IAP 인증 브라우저 쿠키를 설정하여 승인된 사용자를 가장할 수 있습니다. 이 쿠키를 사용하면 IAP는 유출된 클라이언트 보안 비밀번호를 공유하는 모든 앱의 가장된 사용자를 인증합니다.

이 위험을 줄이려면 승인된 사용자도 공유하는 리소스 간에 클라이언트를 공유하지 마세요. 리소스별 권한을 설정하여 가장된 사용자가 인증되는 경우에도 IAP에서 액세스를 승인하지 않도록 합니다.

사용자 ID 수집

클라이언트 보안 비밀번호가 유출된 경우 악성 앱이 클라이언트 ID를 사용하여 앱 사용자의 ID를 수집할 수 있습니다. 이 동작은 사용자가 악성 앱을 방문하면 작동됩니다.

사용자가 처음으로 IAP 보호 앱에 액세스하면 앱에 ID를 공유하라는 메시지가 표시됩니다. 이를 통해 사용자는 자신의 개인정보를 제어할 수 있습니다. 사용자가 ID 공유에 동의하면 Google 로그인 시스템은 이 동의 내용을 기록합니다. IAP는 동일한 프로젝트의 클라이언트 ID로 수행되는 이후 요청에 대해 사용자에게 다시 알리지 않습니다.

자신의 앱에 ID를 공유하는 데 동의했고 악성 앱에 방문하는 사용자는 동의하지 않아도 자신의 ID가 즉시 공유됩니다.