このページでは、認可ポリシーを使用して、アプリケーション ロードバランサの認可ポリシーで Identity-Aware Proxy(IAP)をカスタム認可エンジンとして指定する方法について説明します。
認可を IAP と Identity and Access Management(IAM)に委任するには、マネージド ロードバランサの IAM またはエンドユーザー ID に基づいて転送ルールへのトラフィックを認可します。これにより、バックエンド サービスに IAP ベースのアクセス制御を適用できます。
始める前に
- 認可ポリシーのコンセプトを理解します。
- 転送ルールのバックエンド サービスで IAP が有効になっていないことを確認します。IAP が有効になっている場合、構成を送信するとエラーが発生します。
- Network Services API を有効にします。
認可ポリシーを作成して IAP を有効にする
認可ポリシーを作成するには、ターゲットとルールを定義するポリシー ファイルを作成し、転送ルールで IAP を有効にします。ポリシー ファイルの httpRules
セクションで条件を定義することで、特定のリクエストにのみ IAP を適用できます。httpRules
セクションが省略されている場合、すべてのリクエストに IAP が適用されます。
gcloud
- 次のコマンドを実行して
policy.yaml
ファイルを準備します。このポリシーでは、IP アドレス範囲が10.0.0.1/24
のクライアントに対して、転送ルールで IAP を有効にすることを許可します。
$ cat << EOF > policy.yaml
action: CUSTOM
description: authz policy with Cloud IAP
name: AUTHZ_POLICY_NAME
httpRules:
- from:
sources:
- ipBlocks:
- prefix: "10.0.0.1"
length: 24
customProvider:
cloudIap: {}
target:
loadBalancingScheme: EXTERNAL_MANAGED
resources:
- https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/LOCATION/forwardingRules/FORWARDING_RULE_ID
EOF
- 転送ルールで 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
- 次のコマンドを実行して
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": [ { "from": { "sources": { "ipBlocks": [ { "prefix": "10.0.0.1", "length": 24 } ] } } } ], "customProvider": { "cloudIap": {} } } EOF
次のコマンドを実行して、転送ルールで IAP を有効にします。
curl -X PATCH \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Accept: application/json" \ -H "Content-Type: application/json" \ -d @policy.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 ファイルの例を次に示します。
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
次のように置き換えます。
- POLICY_FILE: 有効なポリシーを含む YAML ファイルのパス。
- ORGANIZATION: 組織の ID。
- FOLDER: アプリケーションを含むフォルダ。
- PROJECT_ID: Google Cloud プロジェクト ID。
- RESOURCE_TYPE: IAP リソースタイプ。リソースタイプは、
app-engine
、iap_web
、compute
、organization
、folder
のいずれかである必要があります。 - SERVICE: 転送ルールの ID または名前。
- 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 { "bindings": { "members": "user:example@example.com", "role": "roles/iap.httpsResourceAccessor", } } EOF
次のように置き換えます。
- ORGANIZATION: 組織の ID。
- FOLDER: アプリケーションを含むフォルダ。
- PROJECT_ID: Google Cloud プロジェクト ID。
- REGION: リソースが配置されているリージョン。
- SERVICE: 転送ルールの ID または名前。