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

このページでは、認可ポリシーを使用して、アプリケーション ロードバランサの認可ポリシーで 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

  1. 次のコマンドを実行して 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
  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": [
      {
        "from": {
          "sources": {
            "ipBlocks": [
              {
                "prefix": "10.0.0.1",
                "length": 24
              }
            ]
          }
        }
      }
    ],
    "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 @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-engineiap_webcomputeorganizationfolder のいずれかである必要があります。
  • 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 または名前。