이 페이지에서는 백엔드 서비스 또는 부하 분산기에서 IAP를 사용하여 Cloud Run 서비스를 보호하는 방법을 설명합니다. 동일한 부하 분산기 글로벌 백엔드 서비스에 연결된 여러 리전에서 Cloud Run을 실행하는 경우 이 페이지의 안내에 따라 백엔드 서비스에 IAP를 한 번 구성합니다.
단일 리전에서 Cloud Run을 실행하는 경우 Cloud Run용 IAP 구성을 통해 Cloud Run에서 IAP를 사용 설정하는 것이 좋습니다. 이렇게 하면 기본 run.app
URL 및 부하 분산기를 비롯한 모든 인그레스 경로에서 클릭 한 번으로 트래픽을 보호할 수 있습니다.
알려진 제한사항
부하 분산기에서 IAP를 사용 설정하면 IAP는
run.app
URL을 통해 Cloud Run 서비스에 도달할 수 있는 트래픽이 아닌 부하 분산기를 통해서만 트래픽을 보호합니다. IAP 승인된 트래픽만 허용하려면 액세스 제한을 위해 Cloud Run 구성을 참고하세요.IAP는
X-Serverless-Authorization
헤더를 사용하여 Cloud Run에 인증합니다. Cloud Run은 서명을 제거한 후 이 헤더를 서비스에 전달합니다. 서비스가 IAM 인증이 필요한 다른 Cloud Run 서비스로 요청을 전달하도록 설계된 경우 먼저 이 헤더를 삭제하도록 서비스를 업데이트하세요.IAP는 Cloud CDN과 호환되지 않습니다.
IAP는 지연 시간을 증가시킵니다. 지연 시간에 민감하지 않은 인스턴스에만 IAP를 사용 설정합니다.
시작하기 전에
IAP에서 Cloud Run 리소스에 IAP를 사용 설정하려면 다음이 필요합니다.
- 결제가 사용 설정된 Google Cloud 콘솔 프로젝트가 있어야 합니다.
- 부하 분산기로 제공된 하나 이상의 Cloud Run 서비스 그룹
- 외부 HTTPS 부하 분산기 설정 알아보기
- 내부 HTTPS 부하 분산기 설정 알아보기
- 부하 분산기 주소에 등록된 도메인 이름
- 모든 요청에 ID가 포함되었는지 확인하기 위한 애플리케이션 코드
- 사용자의 ID 가져오기에 대해 자세히 알아보세요.
IAP는 Google 관리 OAuth 클라이언트를 사용하여 사용자를 인증합니다. 조직 내 사용자만 IAP가 사용 설정된 애플리케이션에 액세스할 수 있습니다. 조직 외부 사용자에게 액세스를 허용하려면 외부 애플리케이션에 IAP 사용 설정을 참조하세요.
백엔드 서비스 또는 부하 분산기에서 IAP 사용 설정
백엔드 서비스 또는 부하 분산기 뒤에 있는 IAP에서 IAP를 사용 설정하려면 다음 안내를 따르세요.
콘솔
콘솔을 사용하여 IAP를 사용 설정하면 Google 관리 OAuth 클라이언트를 사용할 수 없습니다. Google Cloud
프로젝트의 OAuth 동의 화면을 구성하지 않았으면, 구성하라는 메시지가 표시됩니다. OAuth 동의 화면을 구성하려면 OAuth 동의 화면 설정을 참조하세요.
IAP 액세스 설정
- Identity-Aware Proxy 페이지로 이동합니다.
- IAP로 보호하려는 프로젝트를 선택합니다.
- 애플리케이션에서 구성원을 추가할 부하 분산기 백엔드 서비스 옆에 있는 체크박스를 선택합니다.
- 오른쪽 패널에서 주 구성원 추가를 클릭합니다.
주 구성원 추가 대화상자에서 프로젝트에 대한 IAP 보안 웹 앱 사용자 역할이 있어야 하는 그룹 또는 개별 계정을 입력합니다. 다음 계정 종류가 구성원이 될 수 있습니다.
- Google 계정: [email protected] - [email protected] 또는 일부 작업공간 도메인과 같은 Google Workspace 계정일 수도 있습니다.
- Google Groups: [email protected]
- 서비스 계정: [email protected]
- Google Workspace 도메인: example.com
역할 드롭다운 목록에서 Cloud IAP > IAP 보안 웹 앱 사용자를 선택합니다.
저장을 클릭합니다.
IAP 사용 설정 중
- IAP 페이지의 애플리케이션에서 액세스를 제한하려는 부하 분산기 백엔드 서비스를 찾습니다. 리소스에 IAP를 사용 설정하려면 IAP 전환 버튼을 클릭합니다.
IAP를 사용 설정하려면 다음 안내를 따르세요.
- 부하 분산기 프런트엔드 구성에서 하나 이상의 프로토콜이 HTTPS여야 합니다. 부하 분산기 설정에 대해 자세히 알아보세요.
compute.backendServices.update
,clientauthconfig.clients.create
,clientauthconfig.clients.getWithSecret
권한이 필요합니다. 이러한 권한은 프로젝트 편집자 역할과 같은 역할에 의해 부여됩니다. 자세한 내용은 IAP 보안 리소스에 대한 액세스 관리를 참조하세요.
- 표시되는 IAP 사용 창에서 사용을 클릭하여 IAP가 리소스를 보호할 것임을 확인합니다. IAP를 사용하면 부하 분산기에 대한 모든 연결에 로그인 사용자 인증 정보가 필요합니다. 프로젝트에서 IAP 보안 웹 앱 사용자 역할이 있는 계정만 액세스할 수 있습니다.
IAM으로 액세스 제어의 안내에 따라 IAP가 백엔드 Cloud Run 서비스로 트래픽을 전송하도록 승인합니다.
- 주 구성원:
service-[PROJECT-NUMBER]@gcp-sa-iap.iam.gserviceaccount.com
- 역할: Cloud Run 호출자
IAP 서비스 계정은 IAP가 사용 설정될 때 생성됩니다. IAP 서비스 계정이 사용자 목록에 없는 경우 다음 gcloud 명령어를 실행하여 만들 수 있습니다.
gcloud beta services identity create --service=iap.googleapis.com --project=PROJECT_ID
- 주 구성원:
gcloud
- 이전에 프로젝트에서 IAP 서비스 에이전트를 만들지 않았다면 다음 명령어를 실행하여 IAP 서비스 에이전트를 만듭니다. 이전에 서비스 에이전트를 만든 경우 명령어를 실행해도 중복되지 않습니다.
gcloud beta services identity create --service=iap.googleapis.com --project=[PROJECT_ID]
- 다음 명령어를 실행하여 이전 단계에서 만든 서비스 계정에 호출자 권한을 부여합니다.
gcloud run services add-iam-policy-binding [SERVICE-NAME] \ --member='serviceAccount:service-[PROJECT-NUMBER]@gcp-sa-iap.iam.gserviceaccount.com' \ --role='roles/run.invoker'
부하 분산기 백엔드 서비스가 전역인지 리전인지에 따라 전역 또는 리전 범위 명령어를 실행하여 IAP를 사용 설정합니다. 이전 단계의 OAuth 클라이언트 ID 및 보안 비밀을 사용합니다.
전역 범위
gcloud compute backend-services update BACKEND_SERVICE_NAME --global --iap=enabled
리전 범위
다음을 바꿉니다.gcloud compute backend-services update BACKEND_SERVICE_NAME --region REGION_NAME --iap=enabled
- BACKEND_SERVICE_NAME: 백엔드 서비스의 이름입니다.
- REGION_NAME: IAP를 사용 설정할 리전
IAP를 사용 설정한 후 Google Cloud CLI를 사용하여 Identity and Access Management 역할 roles/iap.httpsResourceAccessor
로 IAP 액세스 정책을 조작할 수 있습니다. 자세한 내용은 IAP 보안 리소스에 대한 액세스 관리를 참고하세요.
terraform
- 아직 IAP 서비스 에이전트를 만들지 않았다면 프로젝트에서 다음 명령어를 실행하여 IAP 서비스 에이전트를 만듭니다. 이전에 서비스 에이전트를 만든 경우 명령어를 실행해도 중복되지 않습니다.
resource "google_project_service" "project" { project = "your-project-id" service = "iap.googleapis.com" }
- 다음 명령어를 실행하여 이전 단계에서 만든 서비스 에이전트에 호출자 권한을 부여합니다.
resource "google_cloud_run_service_iam_binding" "binding" { location = google_cloud_run_v2_service.default.location service = google_cloud_run_v2_service.default.name role = "roles/invoker" members = [ "serviceAccount:service-[PROJECT-NUMBER]@gcp-sa-iap.gserviceaccount.com", ] }
부하 분산기에 따라 전역 또는 리전 명령어를 실행하여 IAP를 사용 설정합니다. 이전 단계의 OAuth 클라이언트 ID 및 보안 비밀을 사용합니다.
전역 범위
resource "google_compute_backend_service" "default" { name = "tf-test-backend-service-external" protocol = "HTTPS" load_balancing_scheme = "EXTERNAL_MANAGED" iap { enabled = true oauth2_client_id = "abc" oauth2_client_secret = "xyz" } }
리전 범위
resource "google_compute_region_backend_service" "default" { name = "tf-test-backend-service-external" protocol = "HTTPS" load_balancing_scheme = "EXTERNAL_MANAGED" iap { enabled = true oauth2_client_id = "abc" oauth2_client_secret = "xyz" } }
액세스 제한을 위해 Cloud Run 구성
트래픽이 Cloud Run 서비스의 기본 run.app
URL을 통해 라우팅되지 않도록 하려면 기본 URL을 사용 중지합니다.
그러지 않으면 인그레스 설정을 Cloud Run의 네트워크 인그레스 제한으로 구성합니다.
오류 해결
Cloud Run에 액세스할 권한이 거부됨
Your client does not have permission to get URL from this server
IAP는 IAP 서비스 계정 권한을 사용하여 Cloud Run 서비스를 호출합니다.
service-[PROJECT-NUMBER]@gcp-sa-iap.iam.gserviceaccount.com
서비스 계정에 Cloud Run 호출자 역할을 부여했는지 확인하세요.이전 서비스 계정에 Cloud Run 호출자 역할을 부여했는데도 이 문제가 계속 발생하면 Cloud Run 서비스를 재배포하세요.
서비스 에이전트 실패로 인해 IAM 오류가 발생함
새 프로젝트에서 IAP를 처음 사용 설정하면 다음과 같은 오류가 발생할 수 있습니다.
Setting IAM permissions failed
Cloud Run 서비스 에이전트가 실패했기 때문입니다. 이 문제를 해결하려면 IAP를 다시 사용 설정하거나 IAM 정책을 수동으로 설정합니다.
gcloud CLI를 통해 IAP를 설정할 수 없음
The IAP service account is not provisioned
이 오류가 표시되면 다음 명령어를 실행합니다.
gcloud beta services identity create --service=iap.googleapis.com --project=[PROJECT_ID]
IAP 서비스 계정에 run.routes.invoke
권한이 필요하지 않음
Cloud Run 미리보기로 IAP를 사용하는 중에 Cloud Run은 Cloud Run 호출자 역할을 사용하는 IAP의 호출에 대해 run.routes.invoke
권한 검사를 수행하지 않았습니다. 정식 버전(GA)에서 Cloud Run은 이 권한 검사를 수행합니다.
브레이킹 체인지를 방지하기 위해 미리보기 중에 이 동작에 의존한 일부 고객 프로젝트가 권한이 선택되지 않도록 허용 목록에 포함되었습니다. Cloud Run 지원팀에 문의하여 이러한 프로젝트를 미리보기 전용 허용 목록에서 삭제하세요.
다음 단계
Terraform으로 Cloud Run용 IAP를 설정하려면 Terraform 코드 샘플을 살펴보기