이 페이지에서는 직원 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를 만든 후
describe
OAuth 클라이언트를 실행하여 생성된clientID
를 가져옵니다.clientID
가 있으면update
OAuth 클라이언트를 실행하여allowed-redirect-uris
를https://iap.googleapis.com/v1/oauth/clientIds/$CLIENT_ID:handleRedirect
로 업데이트합니다.여기서
CLIENT_ID
는 이전 단계에서 가져온clientID
입니다.클라이언트 보안 비밀번호를 만든 후
describe
OAuth 클라이언트 사용자 인증 정보를 실행하여 생성된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 설정 업데이트
직원 ID 제휴를 사용하도록 IAP를 구성하려면 다음 설정을 구성해야 합니다.
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: 서비스 이름.
resource-type
이app-engine
인 경우 선택사항입니다. - 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 제휴를 사용한 프로그래매틱 액세스는 지원되지 않습니다.