Configurar a autenticação do OIDC em clusters de usuários

Esta página é destinada a administradores da plataforma.

Nesta página, descrevemos como ativar a autenticação do OpenID Connect (OIDC) em clusters de usuários e configurar o controle de acesso baseado em papéis (RBAC, na sigla em inglês). Para saber mais sobre a autenticação com o OIDC, consulte Gerenciamento de identidade com o OIDC em clusters do Anthos em bare metal.

Ativar a autenticação OIDC em clusters de usuário

A autenticação OIDC pode ser ativada durante a criação do cluster de usuário ou em um cluster de usuário atual. A condição prévia para configurar a autenticação do OIDC é que os perfis de identidade a serem aplicados ao cluster já existam. Consulte Como criar perfis de identidade.

Definir perfis de identidade durante a criação do cluster

Consulte Criar clusters de usuários para ver instruções sobre como criar clusters de usuários com o Console do Anthos Management Center. Para criar um cluster de usuário, acesse a página Configuração de cluster e selecione os perfis de identidade na lista suspensa Configurações do AIS. Esses perfis de identidade serão aplicados ao cluster de usuário.

Aplicar perfil de identidade durante a criação do cluster

Definir perfis de identidade em um cluster de usuário atual

  1. Acesse a página Identidade e acesso.

    Página de perfis de identidade

  2. Clique em Aplicar perfis aos clusters.

    Aplicar perfis ao cluster de usuário atual

  3. Selecione os perfis de identidade a serem aplicados na lista suspensa Perfis.

  4. Selecione os clusters que receberão os perfis de identidade na lista suspensa Clusters.

Visualizar perfis de identidade aplicados ao cluster de usuário

Os perfis de identidade aplicados ao cluster de usuário podem ser visualizados na página Identidade e acesso.

Selecione a guia Cluster, encontre o cluster de usuário a ser visualizado e clique em Ver detalhes de configuração para esse cluster.

Ver a configuração de identidade do cluster de usuário

Fazer o download do arquivo de configuração de login do cluster de usuário

Fazer o download da configuração de login do cluster de usuário

Na página deslizante Ver detalhes de configuração, clique em Fazer o download da configuração de login.

Especificar a configuração do OIDC do arquivo

Crie um arquivo contendo o seguinte: Salve este arquivo como user-cluster-oidc-config.yaml:

spec:
  authentication:
  - name: CONFIGURATION_NAME
    oidc:
      clientID: CLIENT_ID
      clientSecret: CLIENT_SECRET
      # The URI to redirect users going through the OAuth flow using cloud
      # console.
      # This is a required parameter not supported by Anthos private mode, so
      # a dummy value is required.
      cloudConsoleRedirectURI: http://cloud.console.not.enabled
      extraParams: EXTRA_PARAMS
      issuerURI: ISSUER_URI
      # The redirect URL that kubectl uses for authorization.
      kubectlRedirectURI: http://localhost:9879/callback
      scopes: SCOPES
      userClaim: USER_CLAIM
      groupsClaim: GROUPS_CLAIM
      certificateAuthorityData: CERT_AUTHORITY_DATA

Substitua:

  • CONFIGURATION_NAME: o nome da configuração do OIDC a ser criada.
  • CLIENT_ID: o ID do aplicativo cliente que faz solicitações de autenticação para o provedor OpenID.
  • CLIENT_SECRET: secret para o aplicativo cliente.
  • EXTRA_PARAMS: parâmetros de chave-valor extras (separados por vírgulas) para enviar ao provedor OpenID.
  • ISSUER_URI: URL para onde as solicitações de autorização são enviadas para o OpenID.
  • SCOPES: escopos adicionais (separados por vírgulas) para enviar ao provedor OpenID.
  • USER_CLAIM: a declaração do JWT a ser usada como nome de usuário. É possível escolher outras declarações, como e-mail ou nome, dependendo do provedor OpenID. No entanto, as declarações diferentes de e-mail são prefixadas com o URL do emissor para evitar conflitos de nomenclatura.
  • GROUPS_CLAIM: nome da declaração no token de ID do OIDC que contém as informações do grupo do usuário.
  • CERT_AUTHORITY_DATA: um certificado opcional codificado em PEM codificado em base64 para o provedor OIDC. Remova-o se não for necessário. Para criar a string, codifique o certificado, incluindo cabeçalhos, em base64. Inclua a string resultante em certificateAuthorityData como uma única linha.

Depois de editar o arquivo com a configuração desejada, execute o seguinte comando:

kubectl patch --kubeconfig=USER_CLUSTER_KUBECONFIG clientconfig default -n kube-public \
  --type=merge --patch "$(cat OIDC_CONFIG)"

Substitua:

  • USER_CLUSTER_KUBECONFIG: caminho para o arquivo Kubeconfig do cluster de usuário.
  • OIDC_CONFIG: caminho para o arquivo de configuração que você criou.

Configurar o RBAC no cluster de usuário

Nesta seção, você verá um exemplo de como configurar o RBAC para conceder acesso a namespaces individuais. Para informações mais detalhadas, consulte a documentação do RBAC do Kubernetes.

Suponha que há dois namespaces, workload-a e workload-b. O objetivo é tornar os recursos no namespace workload-a legíveis e graváveis pelo usuário alice@example.com e workload-b legíveis pelo usuário bob@example.com. alice@example.com não pode acessar workload-b e bob@example.com não pode acessar workload-a.

Crie os namespaces no cluster de usuário:

kubectl --kubeconfig=USER_CLUSTER_KUBECONFIG create namespace workload-a
kubectl --kubeconfig=USER_CLUSTER_KUBECONFIG create namespace workload-b

Para limitar o acesso a cada namespace, é necessário definir a permissão de cada namespace. No Kubernetes, isso pode ser feito criando um papel.

kubectl --kubeconfig=USER_CLUSTER_KUBECONFIG apply -f - <<EOF
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: workload-a
  name: a-full-access
rules:
- apiGroups: [""] # Indicates the core API group.
  resources: ["*"] # This is a wildcard representing all resource types.
  verbs: ["get", "watch", "list", "create", "update", "patch", "delete"]
EOF

Os verbs definidos para foo-full-access definem todas as ações que este papel tem permissão para executar no namespace.

kubectl --kubeconfig=USER_CLUSTER_KUBECONFIG apply -f - <<EOF
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: workload-b
  name: b-read-access
rules:
- apiGroups: [""] # Indicates the core API group.
  resources: ["*"] # This is a wildcard representing all resource types.
  verbs: ["get", "watch", "list"]
EOF

Para b-read-access, os verbos definidos permitem apenas que o papel consulte recursos.

Para que os usuários recebam permissões, é preciso criar RoleBindings. RoleBindings pode incluir usuários individuais e grupos. Este exemplo mostra usuários individuais.

kubectl --kubeconfig=USER_CLUSTER_KUBECONFIG apply -f - <<EOF
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: a-full-access-users
  namespace: workload-a
subjects:
# You can specify more than one subject
- kind: User
  # Using the userClaim 'email' in this example.
  # If the user prefix is 'prefix-', then prefix the username with the user
  # user prefix.
  name: prefix-alice@example.com # Replace this with an actual user.
  apiGroup: rbac.authorization.k8s.io
roleRef:
  # "roleRef" specifies the binding to a Role / ClusterRole
  kind: Role # This must be Role or ClusterRole.
  name: a-full-access # This must match the name of the Role you wish to bind.
  apiGroup: rbac.authorization.k8s.io
EOF

O RoleBinding acima (a-full-access-users) concede ao usuário alice@example.com as permissões definidas no papel a-full-access. Isso significa que o usuário alice@example.com pode ler e gravar recursos no namespace workload-a.

kubectl --kubeconfig=USER_CLUSTER_KUBECONFIG apply -f - <<EOF
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: b-read-access-users
  namespace: workload-b
subjects:
# You can specify more than one subject
- kind: User
  # Using the userClaim 'email' in this example.
  # If the user prefix is 'prefix-', then prefix the username with the user
  # user prefix.
  name: bob@example.com # Replace this with an actual user.
  apiGroup: rbac.authorization.k8s.io
roleRef:
  # "roleRef" specifies the binding to a Role / ClusterRole
  kind: Role # This must be Role or ClusterRole.
  name: b-read-access # This must match the name of the Role you wish to bind.
  apiGroup: rbac.authorization.k8s.io
EOF

Este RoleBinding (b-read-access-users) concede ao usuário bob@example.com as permissões definidas no papel b-read-access. Como resultado, o usuário bob@example.com só pode ler recursos no namespace workload-b.

Fazer login com o provedor OIDC

Como administrador do cluster do usuário, consiga o arquivo de configuração de login que será usado por todos os usuários do cluster de usuário para fazer login. Veja a configuração de login no Anthos Management Center em Fazer o download do arquivo de configuração de login do cluster de usuário. Também é possível criar o arquivo de configuração de login executando:

actl auth create-login-config --kubeconfig=USER_CLUSTER_KUBECONFIG \
  --output=USER_CLUSTER_NAME-actl-auth-login-config.yaml

Distribua USER_CLUSTER_NAME-actl-auth-login-config.yaml aos usuários do cluster de usuário.

Faça a autenticação com o provedor OIDC e siga as instruções na linha de comando:

actl auth login --login-config=USER_CLUSTER_NAME-actl-auth-login-config.yaml \
  --cluster=USER_CLUSTER_NAME --kubeconfig=./USER_CLUSTER_NAME-cluster-oidc-kubeconfig \
  --preferred-auth="CONFIGURATION_NAME"

Substitua USER_CLUSTER_NAME pelo nome do cluster de usuário, conforme mostrado no Admin Console. --kubeconfig=USER_CLUSTER_NAME-cluster-oidc-kubeconfig é o nome do arquivo de saída do Kubeconfig. Substitua CONFIGURATION_NAME pelo nome do perfil de identidade para autenticação. Abra USER_CLUSTER_NAME-actl-auth-login-config.yaml para ver os nomes de perfil.

Use o novo Kubeconfig com kubectl da seguinte maneira:

kubectl --kubeconfig=./USER_CLUSTER_NAME-cluster-oidc-kubeconfig get pods -A

A seguir