Como ativar o IAP para o GKE

Nesta página, você aprenderá como proteger uma instância do Google Kubernetes Engine (GKE) com o Identity-Aware Proxy (IAP).

Visão geral

O IAP integra-se ao GKE por meio do objeto Ingress. É essa integração que permite controlar o acesso de funcionários no nível do recurso, em vez de usar uma VPN.

Em um cluster do GKE, o tráfego de entrada é processado pelo balanceamento de carga HTTP(S), um componente do Cloud Load Balancing. Normalmente, o balanceador de carga HTTP(S) é configurado pelo controlador Ingress do Kubernetes (em inglês). Esse controlador recebe as informações de configuração de um objeto Ingress do Kubernetes associado a um ou mais objetos Service. Cada objeto Service contém informações de roteamento que são usadas para direcionar uma solicitação de entrada para um determinado pod e porta.

A partir do Kubernetes versão 1.10.5-gke.3, adicione configurações do balanceador de carga associando um serviço a um objeto BackendConfig. BackendConfig é uma definição de recurso personalizado (CRD, na sigla em inglês) que é definida no repositório kubernetes/ingress-gce (ambos os links em inglês).

O controlador do Kubernetes Ingress lê as informações de configuração do BackendConfig e configura o balanceador de carga de acordo. Um BackendConfig contém informações de configuração específicas do Cloud Load Balancing e permite que você defina uma configuração separada para cada serviço de back-end de balanceamento de carga HTTP(S).

Antes de começar

Para ativar o IAP para o GKE, você precisará destes elementos:

  • Um projeto do console do Google Cloud com o faturamento ativado.
  • Um grupo com uma ou mais instâncias do GKE, exibido por um balanceador de carga HTTPS. O balanceador de carga precisa ser criado automaticamente quando você cria um objeto de entrada em um cluster do GKE.
  • Um nome de domínio registrado no endereço do seu balanceador de carga.
  • O código do app para verificar se todas as solicitações têm uma identidade.

Como ativar o IAP

If you haven't configured your project's OAuth consent screen, you'll be prompted to do so. To configure your OAuth consent screen, see Setting up your OAuth consent screen.

Setting up IAP access

  1. Go to the Identity-Aware Proxy page.
    Go to the Identity-Aware Proxy page
  2. Select the project you want to secure with IAP.
  3. Select the checkbox next to the resource you want to grant access to.

    If you don't see a resource, ensure that the resource is created and that the BackendConfig Compute Engine ingress controller is synced.

    To verify that the backend service is available, run the following gcloud command:

    gcloud compute backend-services list
  4. On the right side panel, click Add principal.
  5. In the Add principals dialog that appears, enter the email addresses of groups or individuals who should have the IAP-secured Web App User role for the project.

    The following kinds of principals can have this role:

    • Google Account: user@gmail.com
    • Google Group: admins@googlegroups.com
    • Service account: server@example.gserviceaccount.com
    • Google Workspace domain: example.com

    Make sure to add a Google Account that you have access to.

  6. Select Cloud IAP > IAP-secured Web App User from the Roles drop-down list.
  7. Click Save.

Configuring BackendConfig

To configure BackendConfig for IAP, create a Kubernetes Secret and then add an iap block to the BackendConfig.

Creating a Kubernetes Secret

The BackendConfig uses a Kubernetes Secret to wrap the OAuth client you created earlier. Kubernetes Secrets are managed like other Kubernetes objects by using the kubectl command-line interface (CLI). To create a Secret, run the following command where client_id_key and client_secret_key are the keys from the JSON file you downloaded when you created OAuth credentials:

kubectl create secret generic my-secret --from-literal=client_id=client_id_key \
    --from-literal=client_secret=client_secret_key

The preceding command displays output to confirm when the Secret is successfully created:

secret "my-secret" created

Adding an iap block to the BackendConfig

To configure the BackendConfig for IAP, you need to specify the enabled and secretName values. To specify these values, ensure that you have the compute.backendServices.update permission and add the iap block to BackendConfig. In this block, my-secret is the Kubernetes Secret name you created previously:

For GKE versions 1.16.8-gke.3 and higher, use the `cloud.google.com/v1` API version. If you are using an earlier GKE version, use `cloud.google.com/v1beta1`.

apiVersion: cloud.google.com/v1
kind: BackendConfig
metadata:
  name: config-default
  namespace: my-namespace
spec:
  iap:
    enabled: true
    oauthclientCredentials:
      secretName: my-secret

You also need to associate Service ports with your BackendConfig to trigger turning on IAP. One way to make this association is to make all ports for the service default to your BackendConfig, which you can do by adding the following annotation to your Service resource:

metadata:
  annotations:
    beta.cloud.google.com/backend-config: '{"default": "config-default"}'

To test the configuration, run kubectl get event. If you see the message "no BackendConfig for service port exists", then you successfully associated a service port with your BackendConfig, but the BackendConfig resource wasn't found. This error can occur if you haven't created the BackendConfig resource, created it in the wrong namespace, or misspelled the reference in the Service annotation.

If the secretName you referenced doesn't exist or isn't structured properly, one of the following error messages will display:

  • BackendConfig default/config-default is not valid: error retrieving secret "foo": secrets "foo" not found. To resolve this error, make sure that you've created the Kubernetes Secret correctly as described in the previous section.
  • BackendConfig default/config-default is not valid: secret "foo" missing client_secret data. To resolve this error, make sure that you've created the OAuth credentials correctly. Also, make sure that you referenced the correct client_id and client_secret keys in the JSON you downloaded previously.

When the enabled flag is set to true and the secretName is correctly set, IAP is configured for your selected resource.

Turning IAP off

To turn IAP off, you must set enabled to false in the BackendConfig. If you delete the IAP block from BackendConfig, the settings will persist. For example, if IAP is enabled with secretName: my_secret and you delete the block, then IAP will still be turned on with the OAuth credentials stored in my_secret.

A seguir