このページでは、認可ポリシーを使用して、アプリケーション ロードバランサの認可ポリシーで Identity-Aware Proxy(IAP)をカスタム認可エンジンとして指定する方法について説明します。
IAP と Identity and Access Management(IAM)に認可を委任するには、マネージド ロードバランサの IAM またはエンドユーザー ID に基づいて転送ルールへのトラフィックを承認します。これにより、バックエンド サービスに IAP ベースのアクセス制御を適用できます。
始める前に
- 認可ポリシーのコンセプトを理解します。
- 転送ルールのバックエンド サービスで IAP が有効になっていないことを確認します。IAP が有効になっている場合、構成を送信するとエラーが発生します。
- Network Services API を有効にします。
認可ポリシーを作成し、IAP を有効にする
認可ポリシーを作成するには、ターゲットとルールを定義するポリシー ファイルを作成し、転送ルールで IAP を有効にします。
gcloud
- 次のコマンドを実行して
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
- 転送ルールで 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": [], "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 @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