認可ポリシーを使用して IAP と IAM に認可を委任する

このページでは、認可ポリシーを使用して、アプリケーション ロードバランサの認可ポリシーで Identity-Aware Proxy(IAP)をカスタム認可エンジンとして指定する方法について説明します。

IAP と Identity and Access Management(IAM)に認可を委任するには、マネージド ロードバランサの IAM またはエンドユーザー ID に基づいて転送ルールへのトラフィックを承認します。これにより、バックエンド サービスに IAP ベースのアクセス制御を適用できます。

始める前に

  • 認可ポリシーのコンセプトを理解します。
  • 転送ルールのバックエンド サービスで IAP が有効になっていないことを確認します。IAP が有効になっている場合、構成を送信するとエラーが発生します。
  • Network Services API を有効にします

認可ポリシーを作成し、IAP を有効にする

認可ポリシーを作成するには、ターゲットとルールを定義するポリシー ファイルを作成し、転送ルールで IAP を有効にします。

gcloud

  1. Run the following command to prepare a policy.yaml file.
$ 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. Run the following command to enable IAP on a forwarding rule.
gcloud beta network-security authz-policies import AUTHZ_POLICY_NAME \
--source=policy.yaml \
--location=LOCATION \
--project=PROJECT_ID

Replace the following:

  • PROJECT_ID: The Google Cloud project ID.
  • LOCATION: The region that the resource is located in.
  • FORWARDING_RULE_ID: The ID of the forwarding rule resource.
  • AUTHZ_POLICY_NAME: The name of the authorization policy.

API

  1. Run the following command to prepare a policy.json file.
    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. Run the following command to enable IAP on a forwarding rule.

    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"
    

    Replace the following:

    • PROJECT_ID: The Google Cloud project ID.
    • LOCATION: The region that the resource is located in.
    • FORWARDING_RULE_ID: The ID of the forwarding rule resource.
    • AUTHZ_POLICY_NAME: The name of the authorization policy.

リソースに権限を適用する

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