이 페이지에서는 직원 ID 제휴를 사용하도록 IAP(Identity-Aware Proxy)를 구성하는 방법을 보여줍니다.
IAP로 직원 ID 제휴를 구성할 때 외부 ID 공급업체(IdP)가 Identity and Access Management(IAM)를 사용하여 직원, 파트너, 계약업체와 같은 사용자 그룹인 직원을 인증 및 승인할 수 있도록 할 수 있으므로 사용자는 Google Cloud 또는 온프레미스에 배포된 서비스에 안전하게 액세스할 수 있습니다.
직원 ID 제휴로 IAP를 구성하면 IAP 보호 애플리케이션과 관련하여 다음 작업을 수행할 수 있습니다.
- 최종 사용자를 로그인할 수 있도록 Okta와 같은 외부 IdP로 리디렉션
- 15분~12시간 사이의 로그인 세션을 구성
- IdP의 특정 최종 사용자 또는 최종 사용자 집합만이 애플리케이션에 액세스하도록 허용
- 최종 사용자가 애플리케이션에 액세스할 수 있는 컨텍스트 지정. 예를 들어 하루 중 특정 시간에만 액세스를 허용합니다.
IAP가 지원하는 모든 기존 리소스 및 부하 분산기에서 직원 ID 제휴로 IAP를 사용할 수 있습니다.
직원 ID 제휴로 애플리케이션의 IAP 구성
직원 ID 제휴로 IAP를 구성하는 주요 단계는 다음과 같습니다.
- 직원 풀 및 공급업체를 설정하기
- OAuth 클라이언트 ID 및 보안 비밀 만들기
- IAP를 사용 설정하고 직원 ID 제휴를 사용하도록 구성하기
직원 풀 및 공급업체 설정
직원 풀 및 공급업체를 설정하려면 직원 ID 제휴의 지침을 따르고 세션 기간을 설정할 때 직원 ID 제휴 세션으로 IAP 관리를 참조하세요.
서드 파티 IdP의 이메일 주소를 Google Cloud에 매핑하려면 google.email
직원 풀 제공업체의 속성 매핑을 추가해야 합니다.
예: google.email=assertion.email
OAuth 클라이언트 ID 및 보안 비밀 만들기
안내에 따라 이 구성에 사용할 직원 풀과 동일한 조직의 프로젝트에서 OAuth 클라이언트 ID 및 보안 비밀을 만듭니다. 프로젝트는 IAP 보안 리소스가 있는 프로젝트와 같을 필요가 없습니다. OAuth 클라이언트 ID 및 보안 비밀을 만들 때 다음을 수행합니다.
클라이언트 ID를 만들 때 리디렉션 URI의 자리표시자를 사용하세요. 클라이언트 ID를 만든 후 OAuth 클라이언트
describe
를 실행하여 생성된clientID
를 가져옵니다.clientID
가 있으면 OAuth 클라이언트update
를 실행하여allowed-redirect-uris
를https://iap.googleapis.com/v1/oauth/clientIds/$CLIENT_ID:handleRedirect
로 업데이트합니다.여기서
CLIENT_ID
는 이전 단계에서 가져온clientID
입니다.클라이언트 보안 비밀번호를 만든 후 OAuth 클라이언트 사용자 인증 정보
describe
를 실행하여 생성된clientSecret
을 가져옵니다.
나중에 필요하므로
clientId
및clientSecret
을 저장합니다.
직원 ID 제휴를 사용하도록 IAP 사용 설정
콘솔
- Google Cloud 콘솔에서 IAP 페이지를 엽니다.
IAP 페이지로 이동 - 프로젝트를 선택합니다. 프로젝트는 이전에 만든 직원 풀과 동일한 조직에 있어야 합니다. 프로젝트는 OAuth 클라이언트 ID와 보안 비밀을 만든 프로젝트가 아니어도 됩니다.
- 애플리케이션 탭을 클릭한 후 IAP를 사용하여 액세스를 제한하려는 애플리케이션을 찾습니다.
- IAP 열에서 스위치를 사용으로 전환합니다.
gcloud
gcloud CLI를 사용하여 IAP를 사용 설정하려면 해당 서비스의 절차를 따릅니다.
API
settings.json
파일을 만듭니다.cat << EOF > settings.json { "iap": { "enabled":true, } } EOF
App Engine에서 IAP를 사용 설정합니다.
curl -X PATCH \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Accept: application/json" \ -H "Content-Type: application/json" \ -d @settings.json \ "https://appengine.googleapis.com/v1/apps/PROJECT_ID?updateMask=iap.enabled"
Compute Engine에서 IAP를 사용 설정하려면
https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/REGION/backendServices/BACKEND_SERVICE_NAME?updateMask=iap.enabled
URL을 사용합니다.
IAP 설정 업데이트
IAP에서 직원 ID 제휴를 사용하도록 구성하려면 다음 설정을 구성해야 합니다.
WorkforceIdentitySettings
: 앞에서 만든 OAuth 클라이언트 ID 및 보안 비밀IdentitySources
: ID 소스
자세한 내용은 IAP API를 참조하세요.
gcloud
다음 예시를 참조하여
iap_settings.yaml
파일을 만듭니다.CLIENT_ID=clientId CLIENT_SECRET=clientSecret WORKFORCE_POOL_NAME=locations/global/workforcePools/test-pool cat <<EOF > iap_settings.yaml access_settings: identity_sources: ["WORKFORCE_IDENTITY_FEDERATION"] workforce_identity_settings: workforce_pools: ["$WORKFORCE_POOL_NAME"] oauth2: client_id: "$CLIENT_ID" client_secret: "$CLIENT_SECRET" EOF
다음 명령어를 실행하여 리소스의 IAP 설정을 업데이트합니다.
gcloud iap settings set iap_settings.yaml --project=PROJECT --resource-type=RESOURCE_TYPE --service=SERVICE
다음을 바꿉니다.
- PROJECT: 프로젝트 ID
- RESOURCE_TYPE: IAP 리소스 유형. 리소스 유형은
app-engine
,iap_web
,compute
,organization
,folder
여야 합니다. - SERVICE: 서비스 이름. 이는
app-engine
및compute
둘 다 선택사항입니다.
이 명령어에 대한 자세한 내용은 gcloud iap settings set을 참조하세요.
API
다음 예시를 참조하여
iap_settings.json
설정 파일을 만듭니다.CLIENT_ID=clientId CLIENT_SECRET=clientSecret WORKFORCE_POOL_NAME=locations/global/workforcePools/test-pool cat <<EOF > iap_settings.json { "access_settings": { "identity_sources": ["WORKFORCE_IDENTITY_FEDERATION"], "workforce_identity_settings": { "workforce_pools": ["$WORKFORCE_POOL_NAME"], "oauth2": { "client_id": "$CLIENT_ID", "client_secret": "$CLIENT_SECRET", } } } } EOF
gcloud CLI를 사용하여 리소스 이름을 가져온 후 출력에서
RESOURCE_NAME
을 복사합니다. 다음 단계에서 필요하기 때문입니다.gcloud iap settings get \ --project=PROJECT \ --resource-type=RESOURCE_TYPE \ --service=SERVICE
다음을 바꿉니다.
- PROJECT: 프로젝트 ID
- RESOURCE_TYPE: IAP 리소스 유형. 리소스 유형은
app-engine
,iap_web
,compute
,organization
,folder
여야 합니다. - SERVICE: 서비스 이름. 이는
app-engine
및compute
둘 다 선택사항입니다.
다음 명령어의
RESOURCE_NAME
을 이전 단계의RESOURCE_NAME
으로 바꿉니다.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.identitySources,iapSettings.accessSettings.workforceIdentitySettings.workforcePools,iapSettings.accessSettings.workforceIdentitySettings.oauth2.clientId,iapSettings.accessSettings.workforceIdentitySettings.oauth2.clientSecret"
IAP 보안 리소스에 대한 액세스 권한 부여
IAP 보안 리소스에 액세스하려면 최종 사용자에게 리소스에 대한 IAP 보안 웹앱 사용자 역할이 있어야 합니다. 단일 사용자(주 구성원) 또는 사용자 집합(그룹, 특정한 속성, 또는 전체 사용자 풀에 매핑되는 주 구성원 집합)에 IAP 보안 웹 앱 사용자 역할을 부여할 수 있습니다.
IAP 보안 리소스에 대한 제한 없는 액세스는 지원되지 않습니다.
콘솔
- Google Cloud 콘솔에서 IAP 페이지를 엽니다.
IAP 페이지로 이동 - IAP로 보호하려는 리소스를 선택합니다.
- 주 구성원 추가를 클릭한 다음 리소스에 대해 IAM 역할을 부여하려는 그룹 또는 개인의 주 구성원 식별자를 추가합니다.
- 역할 할당에서 IAP 보안 웹 앱 사용자를 선택합니다.
- 추가를 클릭합니다.
gcloud
다음 명령어를 실행합니다.
gcloud iap web add-iam-policy-binding \
--member=PRINCIPAL_IDENTIFIER \
--role='roles/iap.httpsResourceAccessor' \
--project=PROJECT_ID \
--resource-type=RESOURCE_TYPE \
--service=SERVICE \
--condition=CONDITION
다음을 바꿉니다.
- PRINCIPAL_IDENTIFIER: 주 구성원 식별자
- PROJECT_ID: 프로젝트 ID
- RESOURCE_TYPE: IAP 리소스 유형.
app-engine
또는backend-services
일 수 있습니다. - SERVICE: (선택사항) 서비스 이름입니다.
- CONDITION: (선택사항) IAM 조건입니다. 다음은 액세스 수준으로 구성된 조건의 예시입니다.
expression="accessPolicies/12345678/accessLevels/iap_test_access_level" in request.auth.access_levels,title=iap-test-access-level,description=only access in weekdays
API
이 방법은 리소스의 전체 IAM 정책을 수정하므로 권장되지 않습니다. 오류로 인해 리소스에서 정책이 삭제될 수 있습니다.
기존 IAM 정책 바인딩을 가져옵니다.
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Accept: application/json" \ -H "Content-Type: application/json" \ -d {} \ "https://iap.googleapis.com/v1/RESOURCE_NAME:getIamPolicy" -o iam_policy_bindings.json
RESOURCE_NAME을 이전 단계에서 가져온 RESOURCE_NAME으로 바꿉니다.
이전 단계에서 가져온
iam_policy_bindings.json
파일에서 버전 및 etag 줄을 삭제하고 주 구성원 식별자에 추가할 바인딩을 추가합니다. 자세한 내용은 허용 정책 이해를 참조하세요.{ "bindings": [ { // existing bindings }, { "role": "roles/iap.httpsResourceAccessor", "members": [ "principal://iam.googleapis.com/locations/global/workforcePools/iap-test-pool/subject/iap-test-subject" ], "condition": { "expression": "\"accessPolicies/12345678/accessLevels/iap_test_access_level\" in request.auth.access_levels", "title": "iap-test-access-level", "description": "only access in week days" } } ] }
IAM 정책 바인딩을 업데이트합니다.
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Accept: application/json" \ -H "Content-Type: application/json" \ -d "{"policy":$(cat iam_policy_bindings.json)}" \ "https://iap.googleapis.com/v1/RESOURCE_NAME:setIamPolicy"
RESOURCE_NAME을 이전 단계에서 가져온 RESOURCE_NAME으로 바꿉니다.
자세한 내용은 GetIamPolicy 및 SetIamPolicy를 참조하세요.
(선택사항) 컨텍스트 인식 액세스 설정
원하는 경우 고급 승인에 컨텍스트 인식 액세스 규칙을 설정할 수 있습니다.
액세스 수준을 설정하려면 액세스 수준 만들기 및 적용을 참조하세요. 직원 ID 제휴를 사용하는 경우에는 기기 정보를 기반으로 하는 액세스 수준을 사용할 수 없습니다. IP 주소, 시간, 날짜에 대한 조건이 있는 요청 컨텍스트 기반 액세스 수준을 계속 사용할 수 있습니다.
직원 풀 사용 시 제한사항
- IAP 지원 애플리케이션마다 직원 풀 하나만 구성할 수 있으며 직원 풀에는 제공업체 하나만 포함할 수 있습니다.
- 직원 풀, OAuth 클라이언트 ID 및 보안 비밀, IAP 지원 애플리케이션 모두 같은 조직에 있어야 합니다.
- 기기 관련 정보의 액세스 수준은 지원되지 않습니다.
- 다음 IAP 설정 구성만 지원됩니다.
- 직원 ID 제휴를 통한 프로그래매틱 방식의 액세스는 지원되지 않습니다.