This article describes how to customize Identity-Aware Proxy (IAP) settings. With these settings, you can control behaviors including:
- Compatibility with GKE Enterprise and Istio on Google Kubernetes Engine.
- The handling of CORS preflight requests.
- How users are authenticated.
- The error page shown to users when access is denied.
Managing settings
You can view and update IAP settings on load balancer and App Engine apps using the Google Cloud console, the IAP API, or the Google Cloud CLI.
To update IAP settings on all resources, including folders, projects, and organizations, use the Google Cloud CLI or API.
To manage settings in IAP:
Console
To view and modify settings using the Google Cloud console:
- Go to the Identity-Aware Proxy page.
Go to the Identity-Aware Proxy page - Find your resource on the APPLICATIONS tab.
- Open the more actions menu and click Settings.
- Click Save.
gcloud
To get and modify settings using the Google Cloud CLI, use the
gcloud iap settings get
and
gcloud iap settings set
commands as shown below:
- To get settings for a project, folder, or organization, use the following commands. To configure the IAP settings by using the Google Cloud console or the gcloud CLI, see Customizing IAP.
gcloud iap settings get --project=PROJECT-ID
gcloud iap settings get --folder=FOLDER-ID
gcloud iap settings get --organization=ORGANIZATION-ID
- To get settings for a specific IAP resource type under a project:
gcloud iap settings get --project=PROJECT-ID \ --resource-type=RESOURCE-TYPE-NAME
- To set settings for a project, folder, or organization, or an
IAP resource type under a project, create a JSON or
YAML file that contains the desired new settings and specify the path to
the file. See the
gcloud iap settings set
topic for more information:
gcloud iap settings set SETTING_FILE --project=PROJECT-ID \ --resource-type=RESOURCE-TYPE-NAME
API
To get and modify settings using the IAP API, make
requests using either the GET
or PATCH
HTTP verbs to the desired
resource endpoint in Google Cloud. Combine the :iapSettings
path
suffix, a resource path (as detailed in
Resources and permissions),
and an appropriate HTTP method to get or modify a setting. See
getIapSettings()
and
updateIapSettings()
for more information:
- To get or set settings for a specific IAP resource type under a project:
https://iap.googleapis.com/v1/projects/PROJECT-ID/iap_web/appengine-APP-ID/services/SERVICE-ID/versions/VERSION-ID:iapSettings
- To get or set settings for a project:
https://iap.googleapis.com/v1/projects/PROJECT-ID:iapSettings
- To get or set settings for a folder:
https://iap.googleapis.com/v1/folders/FOLDER-ID:iapSettings
- To get or set settings for an organization:
https://iap.googleapis.com/v1/organizations/ORGANIZATION-ID:iapSettings
Understanding access control for settings
Specific permissions are required to view and modify IAP settings. The table below lists the permissions required to read and modify settings for each resource type. See Resources and permissions for a description of the different resource types.
Resource | Permission for viewing settings | Permission for modifying settings |
---|---|---|
Organization | iap.organizations.getSettings |
iap.organizations.updateSettings |
Folder | iap.folders.getSettings |
iap.folders.updateSettings |
Project | iap.projects.getSettings |
iap.projects.updateSettings |
All web services | iap.web.getSettings |
iap.web.updateSettings |
Web service type | iap.webTypes.getSettings |
iap.webTypes.updateSettings |
Web service | iap.webServices.getSettings |
iap.webServices.updateSettings |
Web Service version | iap.webServiceVersions.getSettings |
iap.webServiceVersions.updateSettings |
The IAP Settings Admin (roles/iap.settingsAdmin
) role grants all of these
permissions, as does Project Editor (roles/editor
). Project Viewer
(roles/viewer
) grants all getSettings
permissions.
To learn more about granting IAM roles, see Granting, changing, and revoking access.
Customizing IAP settings
IAP provides the following customization settings:
Field | Description |
---|---|
access_settings.cors_settings.allow_http_options |
Control HTTP OPTIONS (CORS preflight) |
access_settings.oauth_settings.login_hint |
Simplify login for users of a G Suite domain |
application_settings.access_denied_page_settings.access_denied_page_uri |
Show a custom error page when access is denied |
application_settings.csm_settings.rctoken_aud |
Issue GKE Enterprise and Istio RCTokens |
access_settings.gcip_settings |
Authenticate with Identity Platform |
access_settings.ReauthSettings |
Set a reauthentication policy. For details, see Configuring reauthentication |
You can apply settings at the project level, or at any lower IAP resource level.
You can configure settings for web-based IAP resources but not resources accessed with IAP for TCP forwarding.
Using access_settings.cors_settings.allow_http_options
as an example, you can
configure customization settings as follows:
YAML
access_settings: cors_settings: allow_http_options: "false"
JSON
{ "access_settings": { "cors_settings": { "allow_http_options": "false" } } }
The following sections provide more information on each setting.
Allowing HTTP OPTIONS requests (CORS preflight)
Field | Default value |
---|---|
access_settings.cors_settings.allow_http_options |
false |
The web's same-origin policy blocks browsers from sending AJAX requests between websites. By default, JavaScript on a page served from one origin can't use AJAX to send a request to an app secured with IAP hosted on a different origin.
In some cases,
browsers will automatically try a request, but discard the content of the
response if it doesn't include an Access-Control-Allow-Origin
header. To allow
these types of requests, include this header in your app's responses.
In other cases, the browser will send a
CORS preflight request,
a type of HTTP OPTIONS
request, before sending the cross-origin request. If
your app doesn't respond with an appropriate preflight response (containing the
required Access-Control-*
response headers), the browser will block the
request with an error. Additionally, since preflight requests aren't sent with
any authentication credentials (such as a IAP session
cookie), IAP will also respond with an error.
To allow these requests:
Add code to your app that responds to the
OPTIONS
requests.Change the setting
access_settings.cors_settings.allow_http_options
totrue
so that IAP passesOPTIONS
requests through to your application.
Authenticating using a Google Workspace domain
Field | Default value |
---|---|
access_settings.oauth_settings.login_hint |
"" |
If only members of a specific Google Workspace domain will use your app, you can configure IAP to optimize the authentication flow. This has several benefits:
If a user is signed in with multiple accounts (such as work account and a personal account), the system will automatically select their work account instead of displaying the account selection UI.
If a user isn't signed into their Google account, the sign-in UI will automatically fill the domain portion of their email address (meaning the user only needs to type
alice
instead ofalice@example.com
, for example).If your Google Workspace domain is configured to use a third-party single sign-on provider, the system will show that custom sign-in page instead of Google's.
To enable this behavior, set the value of
access_settings.oauth_settings.login_hint
to your Google Workspace
domain name (such as example.com
). Domain ownership must have been verified:
you cannot use arbitrary internet DNS domains that you own. (Domains that have
been added as a Google Workspace primary or secondary domain
are verified and thus can be used here.)
If you need to authenticate users outside the domain, you can use programmatic authentication.
For more information, see the OpenID Connect documentation.
Setting a custom access denied error page
Field | Default value |
---|---|
application_settings.access_denied_page_settings.access_denied_page_uri |
"" |
You can set a URL in this field that redirects users to a custom page instead of the default IAP error page whenever access is denied by a policy.
You can also embed the troubleshooting URL with this feature. For more information, see Enabling the troubleshooting URL for your custom Access Denied error page.
Issuing GKE Enterprise and Istio RCToken mesh IDs
Field | Default value |
---|---|
application_settings.csm_settings.rctoken_aud |
"" |
If you're using Istio on
GKE, you can configure
IAP to produce an Istio-compatible RCToken. If this field is
set to a non-empty string, IAP will add an
Ingress-Authorization
HTTP header containing an RCToken. The aud
claim
will be set to the value of the field.
Authenticating with Identity Platform
Field | Default value |
---|---|
access_settings.gcip_settings |
null |
By default, IAP uses Google's native identity system. If this field is set, IAP will use Identity Platform instead to authenticate users.
Understanding settings inheritance in the resource hierarchy
IAP always evaluates requests for a specific web service version. This type of resource is at the lowest level of the resource hierarchy, which looks like this:
- Organization - Folder - Project - All web services - Web service type - Web service - Web service version
To determine the settings to apply for a web service version,
IAP starts with a default set of values, and then
walks the hierarchy from top to bottom. Settings are applied as they are found,
so values set at a lower level overrides values set at a higher level.
For example, if access_settings.cors_settings.allow_http_options
is set to
true
at the project level, but false
at the service level, then effective
value will be false
.
See Resources and permissions to learn more about the IAP resource hierarchy.