승인 정책을 사용하여 IAP 및 IAM에 승인 위임

이 페이지에서는 승인 정책을 사용하여 애플리케이션 부하 분산기의 승인 정책에서 IAP(Identity-Aware Proxy)를 커스텀 승인 엔진으로 지정하는 방법을 설명합니다.

IAP 및 Identity and Access Management(IAM)에 승인을 위임하려면 관리형 부하 분산기의 IAM 또는 최종 사용자 ID를 기반으로 전달 규칙에 대한 트래픽을 승인합니다. 이렇게 하면 백엔드 서비스에 IAP 기반 액세스 제어를 적용할 수 있습니다.

시작하기 전에

승인 정책 만들기 및 IAP 사용 설정

승인 정책을 만들려면 타겟과 규칙을 정의하는 정책 파일을 만든 후 전달 규칙에서 IAP를 사용 설정합니다.

gcloud

  1. 다음 명령어를 실행하여 policy.yaml 파일을 준비합니다.
$ cat << EOF > policy.yaml
action: CUSTOM
description: authz policy with Cloud IAP
name: AUTHZ_POLICY_NAME
customProvider:
  cloudIap: {}
target:
  loadBalancingScheme: EXTERNAL_MANAGED
  resources:
  - https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/LOCATION/forwardingRules/FORWARDING_RULE_ID
EOF
  1. 다음 명령어를 실행하여 전달 규칙에서 IAP를 사용 설정합니다.
gcloud beta network-security authz-policies import AUTHZ_POLICY_NAME \
--source=policy.yaml \
--location=LOCATION \
--project=PROJECT_ID

다음을 바꿉니다.

  • PROJECT_ID: Google Cloud 프로젝트 ID입니다.
  • LOCATION: 리소스가 있는 리전입니다.
  • FORWARDING_RULE_ID: 전달 규칙 리소스 ID입니다.
  • AUTHZ_POLICY_NAME: 승인 정책 이름입니다.

API

  1. 다음 명령어를 실행하여 policy.json 파일을 준비합니다.
    cat << EOF > policy.json
    {
    "name": "AUTHZ_POLICY_NAME",
    "target": {
    "loadBalancingScheme": "INTERNAL_MANAGED",
    "resources": [
    "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/LOCATION/forwardingRules/FORWARDING_RULE_ID"
    ],
    },
    "action": "CUSTOM",
    "httpRules": [],
    "customProvider": {
    "cloudIap": {}
    }
    }
    EOF
    
  2. 다음 명령어를 실행하여 전달 규칙에서 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://networksecurity.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/authzPolicies"
    

    다음을 바꿉니다.

    • PROJECT_ID: Google Cloud 프로젝트 ID입니다.
    • LOCATION: 리소스가 있는 리전입니다.
    • FORWARDING_RULE_ID: 전달 규칙 리소스 ID입니다.
    • AUTHZ_POLICY_NAME: 승인 정책 이름입니다.

리소스에 권한 적용

IAP API를 사용하여 IAP 보안 프로젝트의 개별 리소스에 IAM 권한을 적용할 수 있습니다. 특정 수준에 부여되는 IAM 권한은 모든 하위 수준에 적용됩니다. 예를 들어 프로젝트 수준에서 부여된 권한은 프로젝트의 모든 Google Cloud 리소스에 적용됩니다.

다음은 권한을 구성하는 명령어의 예시입니다. 자세한 내용은 gcloud alpha iap web set-iam-policy을 참조하세요.

gcloud

명령어 예시에서 POLICY_FILE을 유효한 정책이 포함된 YAML 형식 파일의 경로로 바꿉니다. 다음은 YAML 파일의 예시입니다.

policy:
  bindings:
    members: user:example@example.com
    role: roles/iap.httpsResourceAccessor

전달 규칙 리소스에 액세스할 수 있는 사용자의 권한 업데이트

gcloud alpha iap web set-iam-policy POLICY_FILE [--organization=ORGANIZATION \
--folder=FOLDER --project=/PROJECT_ID \
--resource-type=RESOURCE_TYPE --service=SERVICE]

조직 수준에서 권한 구성

gcloud alpha iap web set-iam-policy POLICY_FILE --organization=ORGANIZATION

폴더 수준에서 권한 구성

gcloud alpha iap web set-iam-policy POLICY_FILE --folder=FOLDER

프로젝트 수준에서 권한 구성

gcloud alpha iap web set-iam-policy POLICY_FILE --project=PROJECT_ID --resource-type=iap_web

프로젝트의 모든 전역 전달 규칙에 대한 권한 구성

gcloud alpha iap web set-iam-policy POLICY_FILE --project=PROJECT_ID --resource-type=forwarding_rule

리전의 프로젝트에 있는 모든 전달 규칙에 대한 권한 구성

gcloud alpha iap web set-iam-policy POLICY_FILE --project=PROJECT_ID \
--resource-type=forwarding_rule --region=REGION

프로젝트의 특정 전역 전달 규칙에 대한 권한 구성

gcloud alpha iap web set-iam-policy POLICY_FILE --project=PROJECT_ID \
--resource-type=forwarding_rule --service=SERVICE

특정 리전의 프로젝트에 있는 특정 전달 규칙에 대한 권한 구성

gcloud alpha iap web set-iam-policy POLICY_FILE --project=PROJECT_ID \
--resource-type=forwarding_rule --service=SERVICE --region=REGION

API

조직 수준에서 권한 구성

organization/ORGANIZATION

폴더 수준에서 권한 구성

folders/FOLDER

프로젝트 수준에서 권한 구성

projects/PROJECT_ID

프로젝트의 모든 전역 전달 규칙에 대한 권한 구성

projects/PROJECT_ID/forwarding_rule

리전의 프로젝트에 있는 모든 전달 규칙에 대한 권한 구성

projects/PROJECT_ID/iap_web/forwarding_rule-REGION

프로젝트의 특정 전역 전달 규칙에 대한 권한 구성

projects/PROJECT_ID/iap_web/forwarding_rule/services/SERVICE

특정 리전의 프로젝트에 있는 특정 전달 규칙에 대한 권한 구성

projects/PROJECT_ID/iap_web/forwarding_rule-REGION/services/SERVICE

승인 정책 설정

curl -X PATCH \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d @policy.json \
"https://iap.googleapis.com/v1/RESOURCE_NAME:setIamPolicy"

policy.json의 경우 다음 명령어를 실행하여 JSON 파일을 만들 수 있습니다. 필요에 따라 값을 업데이트합니다.

cat << EOF > policy.json
{
  "policy": {
      "bindings": {
            "members": "user:example@example.com",
            "role": "roles/iap.httpsResourceAccessor",
        }
    }
}
EOF