Configurar a autenticação de utilizadores da malha de serviço na nuvem
Se tiver a TRAFFIC_DIRECTOR
implementação do plano de controlo, esta funcionalidade só é suportada pela lista de autorizações. Contacte o apoio técnico para pedir que esta funcionalidade seja adicionada à lista de autorizações da sua organização
A autenticação de utilizadores da Cloud Service Mesh é uma solução integrada para a autenticação de utilizadores finais baseada no navegador e o controlo de acesso aos seus cargas de trabalho implementados. Permite-lhe integrar-se com fornecedores de identidade (IDP) existentes para a autenticação de utilizadores e usa APIs Istio e políticas de autorização para a gestão de acesso. É uma alternativa fácil de usar à autenticação do símbolo da Web JSON (JWT) do Istio.
Um exemplo de utilização típico é quando uma organização usa a malha de serviços na nuvem para alojar uma aplicação Web para a sua força de trabalho aceder através de um navegador de Internet. Além disso, a organização tem de usar o respetivo fornecedor de identidade existente para gerir as identidades dos utilizadores. A autenticação de utilizadores da Cloud Service Mesh facilita a autenticação dos utilizadores através de um fluxo de consentimento e início de sessão OpenID Connect (OIDC) padrão baseado na Web. Quando o utilizador se autentica, o Cloud Service Mesh aplica as políticas de autorização do Istio e, após a autorização bem-sucedida, transmite a identidade aos cargas de trabalho num formato de credenciais seguro.
Como funciona
A autenticação de utilizadores do Cloud Service Mesh introduz um novo componente, authservice.
Este componente integra-se com a entrada baseada no Envoy como um serviço de autorização externo que interceta todos os pedidos recebidos para autenticação. authservice implementa o lado do cliente do protocolo OIDC
e permite o acesso dos utilizadores a aplicações através de um navegador, onde os utilizadores concluem um
fluxo de consentimento e autenticação interativo para estabelecer uma sessão de curta duração.
O authservice implementa protocolos da norma da indústria para integração com qualquer fornecedor de identidade que possa atuar como um servidor de autorização OIDC. Quando o utilizador é autenticado, as informações principais são encapsuladas num RCToken no formato JWT, assinado por authservice, que encaminha para a camada de autorização do Istio na entrada. Este modelo oferece controlo de acesso ao perímetro para o tráfego
na malha. Se o utilizador estiver autorizado a aceder a um recurso, este RCToken também é encaminhado para os microsserviços para obter informações principais e aplicar o controlo de acesso detalhado.
O diagrama seguinte mostra a localização do authservice na malha e a sua relação com as outras partes da malha, como a entrada, as cargas de trabalho, o navegador do utilizador e qualquer IDP existente.
Os administradores podem instalar o authservice como um suplemento numa instalação do Cloud Service Mesh. Quando instalado, o authservice lê a configuração do ponto final do OIDC e outras definições associadas definidas no recurso personalizado UserAuth. O administrador pode usar as APIs ExternalAuthorization do Cloud Service Mesh
para configurar auth_server como um filtro na entrada.
Instale o serviço de autenticação do utilizador
Os passos seguintes explicam como configurar o authservice.
Pré-requisitos
Siga os passos em Instale ferramentas dependentes e valide o cluster para:- Instale as ferramentas necessárias
- Transferir asmcli
- Conceda autorizações de administrador do cluster
- Valide o seu projeto e cluster
- Se estiver a usar o Cloud Service Mesh gerido num cluster privado, certifique-se de que o cluster consegue enviar tráfego de saída para o IDP.
Além disso, certifique-se de que cumpre os pré-requisitos através dos seguintes passos.
Personalize a sobreposição de autenticação do utilizador de instalação
Para instalar o serviço de autenticação de utilizadores, tem de personalizar a instalação do Cloud Service Mesh para adicionar um fornecedor de autorização externo ao nível da malha. Os passos necessários dependem de estar a usar o Cloud Service Mesh gerido ou no cluster.
Gerido
- Atualize o ConfigMap para incluir o MeshConfig de autenticação do utilizador. No comando seguinte, use o mesmo - REVISION_LABELque usou quando aprovisionou o Cloud Service Mesh gerido (como- asm-managed,- asm-managed-rapidou- asm-managed-stable):- kubectl edit configmap istio-REVISION_LABEL -n istio-system
- Adicione o seguinte texto no campo - meshem MeshConfig:- mesh: |- ... extensionProviders: - name: "asm-userauth-grpc" envoyExtAuthzGrpc: service: "authservice.asm-user-auth.svc.cluster.local" port: "10003"
- Crie o espaço de nomes - asm-user-auth.- kubectl create namespace asm-user-auth
- Ative o espaço de nomes para injeção. Os passos dependem da sua implementação do plano de controlo. - Gerido (TD)- Aplique a etiqueta de injeção predefinida ao espaço de nomes: - kubectl label namespace asm-user-auth \ istio.io/rev- istio-injection=enabled --overwrite- Gerido (Istiod)- Recomendado: execute o seguinte comando para aplicar a etiqueta de injeção predefinida ao espaço de nomes: - ```sh kubectl label namespace asm-user-auth \ istio.io/rev- istio-injection=enabled --overwrite ```- Se for um utilizador existente com o plano de controlo do Istiod gerido: recomendamos que use a injeção predefinida, mas a injeção baseada em revisões é suportada. Siga as instruções abaixo: - Execute o seguinte comando para localizar os canais de lançamento disponíveis:
 - kubectl -n istio-system get controlplanerevision- O resultado é semelhante ao seguinte: - NAME AGE asm-managed-rapid 6d7h- Na saída, o valor na coluna - NAMEé a etiqueta de revisão que corresponde ao canal de lançamento disponível para a versão do Cloud Service Mesh.- Aplique a etiqueta de revisão ao espaço de nomes: - kubectl label namespace asm-user-auth \ istio-injection- istio.io/rev=REVISION_LABEL --overwrite
 
- Instale o gateway do Istio no espaço de nomes - asm-user-auth.- kubectl apply -n asm-user-auth -f DIR_PATH/samples/gateways/istio-ingressgateway
No cluster
- Obtenha o exemplo da sobreposição de autorização do utilizador e atualize-o se houver personalizações na sua malha. É uma prática recomendada manter este ficheiro de sobreposição no seu controlo de origem. - curl https://raw.githubusercontent.com/GoogleCloudPlatform/asm-user-auth/v1.2.3/overlay/user-auth-overlay.yaml > user-auth-overlay.yaml
- Siga as instruções para instalar o Cloud Service Mesh com sobreposição para usar um script fornecido pela Google para instalar o Cloud Service Mesh com a sobreposição de autenticação do utilizador. Por exemplo: - ./asmcli install \ --project_id PROJECT_ID \ --cluster_name CLUSTER_NAME \ --cluster_location CLUSTER_LOCATION \ --fleet_id FLEET_PROJECT_ID \ --output_dir DIR_PATH \ --enable_all \ --custom_overlay user-auth-overlay.yaml- Os pacotes de - kptautenticação do utilizador criam um- AuthorizationPolicypara referenciar o fornecedor de autorização externo especificado por- pkg/ext-authz.yaml.
- Crie o espaço de nomes - asm-user-auth.- kubectl create namespace asm-user-auth
- Ative o espaço de nomes para injeção. - Recomendado: execute o seguinte comando para aplicar a etiqueta de injeção predefinida ao espaço de nomes: - kubectl label namespace asm-user-auth \ istio.io/rev- istio-injection=enabled --overwrite- Recomendamos que use a injeção predefinida, mas a injeção baseada em revisões é suportada: siga estas instruções: - Use o seguinte comando para localizar a etiqueta de revisão em - istiod:- kubectl get deploy -n istio-system -l app=istiod -o \ jsonpath={.items[*].metadata.labels.'istio\.io\/rev'}'{"\n"}'
- Aplique a etiqueta de revisão ao espaço de nomes. No comando seguinte, - REVISION_LABELé o valor da etiqueta de revisão- istiodque anotou no passo anterior.- kubectl label namespace asm-user-auth \ istio-injection- istio.io/rev=REVISION_LABEL --overwrite
 
- Instale o gateway do Istio no espaço de nomes - asm-user-auth.- kubectl apply -n asm-user-auth -f DIR_PATH/samples/gateways/istio-ingressgateway
Prepare a configuração do cliente OIDC
Defina a configuração do cliente OIDC através dos seguintes passos. Este guia usa a Google como um IdP, mas pode usar qualquer IdP que suporte a autenticação OIDC.
- Na Google Cloud consola, aceda a APIs e serviços > Credenciais. 
- Aceda a Criar credenciais e, de seguida, escolha ID de cliente OAuth. Se necessário, defina as opções do ecrã de consentimento OAuth e, em seguida, configure as seguintes opções: - Defina o Tipo de aplicação como Aplicação Web.
- Defina o URI de redirecionamento autorizado para
https://REDIRECT_HOST/REDIRECT_PATH. Por exemplo, para localhost, pode definir comohttps://localhost:8443/_gcp_asm_authenticate.
 - De seguida, clique em Guardar. 
- Além disso, guarde a configuração do cliente OIDC para usar mais tarde. - export OIDC_CLIENT_ID=CLIENT_ID export OIDC_CLIENT_SECRET=CLIENT_SECRET export OIDC_ISSUER_URI=ISSUER_URI export OIDC_REDIRECT_HOST=REDIRECT_HOST export OIDC_REDIRECT_PATH=REDIRECT_PATH
Receba os pacotes kpt
Siga os passos seguintes para instalar a configuração authservicerecomendada
a partir do
repositório público. Estes comandos obtêm o contentor authservice mais recente e iniciam-no como um pod no espaço de nomes asm-user-auth. Também configura a entrada para intercetar todos os pedidos.
Obtenha o pacote kpt:
kpt pkg get https://github.com/GoogleCloudPlatform/asm-user-auth.git/@v1.2.3 .
cd asm-user-auth/
Defina o URL de redirecionamento e o segredo para o gateway de entrada
OAuth2 requer um URL de redirecionamento alojado num ponto final protegido por HTTPS. Estes comandos destinam-se a fins de exemplo e simplificam a configuração gerando um certificado autoassinado para o gateway de entrada do Istio.
- Gere um certificado autoassinado: - openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem \ -days 365 -nodes -subj '/CN=localhost'
- Crie um segredo para o gateway de entrada para alojar tráfego HTTPS: - kubectl create -n asm-user-auth secret tls userauth-tls-cert --key=key.pem \ --cert=cert.pem
Aplique as chaves de encriptação e assinatura
O authservice precisa de dois conjuntos de chaves para funcionar com êxito. A primeira é uma chave simétrica para encriptação e desencriptação. Esta chave é usada para encriptar o estado da sessão antes de o definir como um cookie.
O segundo conjunto de chaves é um par de chaves públicas/privadas. Esta chave é usada para assinar as informações do utilizador autenticado no formato JWT como um RCToken. A chave pública deste par é publicada num ponto final predefinido que os sidecars podem usar para validar o JWT.
O pacote de kptautenticação do utilizador contém duas chaves de exemplo para uma configuração rápida.
No entanto, pode usar o seu sistema de gestão de chaves preferido para gerar estas chaves.
- Prepare a chave de encriptação da sessão com o seguinte formato ou use o exemplo do pacote, que pode ver - cat ./samples/cookie_encryption_key.json.- { "keys":[ { "kty":"oct", "kid":"key-0", "K":"YOUR_KEY", "useAfter": 1612813735 } ] }- Pode gerar uma chave AES de teste com o seguinte comando: - openssl enc -aes-256-cbc -k mycustomkey -P -md sha1 | grep key
- Prepare a chave de assinatura do RCToken com o seguinte formato ou use o exemplo do pacote, que pode ver - cat ./samples/rctoken_signing_key.json.- { "keys":[ { "kty":"RSA", "kid":"rsa-signing-key", "K":"YOUR_KEY", # k contains a Base64 encoded PEM format RSA signing key. "useAfter": 1612813735 # unix timestamp } ] }- Pode gerar uma chave privada RSA de 512 bits de teste com o seguinte comando: - openssl genpkey -algorithm RSA -out rsa_private.pem -pkeyopt rsa_keygen_bits:512
- Crie o segredo do Kubernetes, que o - authservicevai montar no respetivo sistema de ficheiros.- kubectl create secret generic secret-key \ --from-file="session_cookie.key"="./samples/cookie_encryption_key.json" \ --from-file="rctoken.key"="./samples/rctoken_signing_key.json" \ --namespace=asm-user-auth
Implemente o serviço de autenticação de utilizadores
Os seguintes comandos criam o serviço de autenticação do utilizador e a implementação no espaço de nomes asm-user-auth.
Defina os valores necessários para a configuração da autenticação do utilizador. O ID do cliente e o segredo são armazenados como segredos do Kubernetes, pelo que usamos o Base64 para os codificar. Visite o repositório público para ver todos os definidores disponíveis.
kpt fn eval pkg --image gcr.io/kpt-fn/apply-setters:v0.2 --truncate-output=false -- \
  client-id="$(echo -n ${OIDC_CLIENT_ID} | base64 -w0)" \
  client-secret="$(echo -n ${OIDC_CLIENT_SECRET} | base64 -w0)" \
  issuer-uri="${OIDC_ISSUER_URI}" \
  redirect-host="${OIDC_REDIRECT_HOST}" \
  redirect-path="${OIDC_REDIRECT_PATH}"
Aplique o pacote kpt:
# Remove the potential alpha version CRD if exists.
kubectl delete crd userauthconfigs.security.anthos.io
kubectl apply -f ./pkg/asm_user_auth_config_v1beta1.yaml
kubectl apply -f ./pkg
O authservice consome o CRD UserAuthConfig para fornecer autenticação ao utilizador final. UserAuthConfig é configurável no tempo de execução e pode
atualizá-lo para alterar o comportamento de authservice e configurá-lo com pontos finais
para qualquer servidor de autorização OIDC.
Pode ver o ficheiro por cat pkg/user_auth_config.yaml. Este contém os seguintes campos:
apiVersion: security.anthos.io/v1beta1
kind: UserAuthConfig
metadata:
  name: user-auth-config
  namespace: asm-user-auth
spec:
  authentication:
    oidc:
      certificateAuthorityData: ""  # kpt-set: ${ca-cert}
      issuerURI: "<your issuer uri>"  # kpt-set: ${issuer-uri}
      proxy: ""  # kpt-set: ${proxy}
      oauthCredentialsSecret:
        name: "oauth-secret"  # kpt-set: ${secret-name}
        namespace: "asm-user-auth"  # kpt-set: ${secret-namespace}
      redirectURIHost: ""  # kpt-set: ${redirect-host}
      redirectURIPath: "/_gcp_asm_authenticate"  # kpt-set: ${redirect-path}
      scopes: ""  # kpt-set: ${scopes}
      groupsClaim: ""  # kpt-set: ${groups}
  outputJWTAudience: "test_audience"  # kpt-set: ${jwt-audience}
Consulte os
detalhes da configuração da autenticação do utilizador
para ver descrições detalhadas dos campos user_auth_config.yaml.
Executar tarefas pós-instalação
As seguintes tarefas são necessárias depois de concluir os passos de instalação anteriores.
Ative a autenticação do utilizador para as suas aplicações
Esta secção demonstra como ativar a autenticação de utilizadores usando o
httpbin como exemplo.
A autenticação de utilizadores do Cloud Service Mesh usa uma política de autorização com tipo CUSTOM para acionar o fluxo OIDC.
Depois de
instalar o gateway Istio,
configure-o para publicar tráfego HTTPS através do certificado TLS userauth-tls-cert
que criou acima. Abaixo, encontra a configuração do pkg/gateway.yaml que acabou de
instalar.
apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
  name: userauth
  namespace: asm-user-auth
spec:
  selector:
    istio: ingressgateway
  servers:
  - hosts:
    - '*'
    port:
      name: https
      number: 443
      protocol: HTTPS
    tls:
      mode: SIMPLE
      credentialName: userauth-tls-cert
---
# This ensures the OIDC endpoint has at least some route defined.
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: userauth-oidc
  namespace: asm-user-auth
spec:
  gateways:
  - userauth
  hosts:
  - '*'
  http:
  - match:
    - uri:
        prefix: /status
    - uri:
        prefix: "your-oidc-redirect-path"
    name: user-auth-route
    route:
    - destination:
        host: authservice
        port:
          number: 10004
- Etiquete o espaço de nomes - defaultpara ativar a injeção automática de- istio-proxypara implementações.- kubectl label namespace default istio.io/rev=REVISION --overwrite
- Implemente - httpbinno espaço de nomes- default.- kubectl apply -f https://raw.githubusercontent.com/istio/istio/master/samples/httpbin/httpbin.yaml -n default
- Atualize o - httpbinpara usar este gateway para publicar tráfego HTTPS e use o encaminhamento de portas para aceder à aplicação localmente:- kubectl apply -f./samples/httpbin-route.yaml -n default kubectl port-forward service/istio-ingressgateway 8443:443 -n asm-user-auth- O gateway de entrada na porta 8443 vai ser encaminhado para - localhostpara tornar a aplicação acessível localmente.
- Implemente o - samples/rctoken-authz.yamlpara ativar o RequestAuthentication e a AuthorizationPolicy para validar o RCToken dos pedidos.- kubectl apply -f ./samples/rctoken-authz.yaml -n asm-user-auth- Exemplo - samples/rctoken-authz.yaml:- apiVersion: security.istio.io/v1beta1 kind: RequestAuthentication metadata: name: require-rc-token spec: selector: matchLabels: istio: ingressgateway jwtRules: - issuer: "authservice.asm-user-auth.svc.cluster.local" audiences: - "test_audience" jwksUri: "http://authservice.asm-user-auth.svc.cluster.local:10004/_gcp_user_auth/jwks" fromHeaders: - name: X-ASM-RCTOKEN forwardOriginalToken: true --- apiVersion: security.istio.io/v1beta1 kind: AuthorizationPolicy metadata: name: require-rc-token spec: selector: matchLabels: istio: ingressgateway action: ALLOW rules: - when: - key: request.auth.claims[iss] values: - authservice.asm-user-auth.svc.cluster.local - key: request.auth.claims[aud] values: - test_audience
Valide a autenticação do utilizador
O httpbin serve dois caminhos. O /ip é acessível publicamente e o /headers
requer que o utilizador final inicie sessão através do respetivo IdP configurado.
- Confirme se consegue aceder diretamente ao - /ipvisitando- https://localhost:8443/ip.
- Verifique se vê a página de início de sessão do OIDC visitando - https://localhost:8443/headers.
- Depois de iniciar sessão, clique em Seguinte e verifique se é feito o redirecionamento para a página - /headers.
Configure políticas de autorização
Depois de concluir a configuração nos passos anteriores, cada utilizador é
redirecionado através de um fluxo de autenticação baseado na Web. Quando o fluxo estiver concluído, o
authservice gera um RCToken no formato JWT, que usa para
transmitir as informações do utilizador autenticado.
- Adicione políticas de autorização do Istio na entrada para garantir que é feita uma verificação de autorização para cada utilizador autenticado: - kubectl apply -f ./samples/httpbin-authz.yaml -n asm-user-auth
- O ficheiro - httpbin-authz.yamlconfigura o gateway de entrada para validar o token RC emitido pelo authservice e só autorizar quando o JWT contém os campos pretendidos, como públicos-alvo e emissoras.- Veja o exemplo seguinte de uma política de autorização: - apiVersion: security.istio.io/v1beta1 kind: AuthorizationPolicy metadata: name: require-rc-token spec: selector: matchLabels: istio: ingressgateway action: ALLOW rules: - to: - operation: paths: ["/ip"] - to: when: - key: request.auth.claims[iss] values: - authservice.asm-user-auth.svc.cluster.local - key: request.auth.claims[aud] values: - test_audience - key: request.auth.claims[sub] values: - allowed_user_sub_1 # Change this with the "sub" claim in the RC token. Wildcard '*' will match everything.
Configure definições específicas do ambiente
Os passos anteriores usam o localhost e um certificado HTTPS autoassinado para uma configuração rápida. Para utilização real em produção, use o seu próprio domínio, como example.com.
Além disso, certifique-se de que o certificateAuthorityData tem o conteúdo do certificado de raiz pretendido. Por exemplo, se o IDP for fidedigno com os certificados de raiz do sistema, pode
deixá-lo vazio. Se existir um proxy HTTPS a terminar a ligação HTTPS, este deve ser definido para o certificado de raiz do proxy.
Faça a gestão e alterne as chaves
O authservice usa dois conjuntos de chaves. Pode rodar cada tecla
de forma independente. No entanto, antes de rodar as chaves, é importante
compreender como funciona a rotação.
Ambas as chaves estão no formato JSON. O campo useAfter especifica a data/hora desde a qual a chave vai ser considerada para utilização. Durante uma rotação de chaves, deve incluir as chaves antigas e novas no JSON. Por exemplo, no exemplo seguinte, new-key só é usado após a data/hora 1712813735.
{
   "keys":[
      {
         "kty":"RSA",
         "kid":"old-key",
         "K":"...", # k contains a Base64 encoded PEM format RSA signing key.
         "useAfter": 1612813735, # unix timestamp
      }
      {
      "kty":"RSA",
         "kid":"new-key",
         "K":"...", # k contains a Base64 encoded PEM format RSA signing key.
         "useAfter": 1712813735, # unix timestamp
      }
   ]
}
O Cloud Service Mesh usa a chave simétrica para encriptar os dados da sessão que são armazenados em cookies do navegador. Para garantir a validade das sessões existentes, authservice
tenta a desencriptação com todas as chaves no conjunto de chaves. Na rotação, o authservice
usa a nova chave para encriptar novas sessões e continua a tentar
desencriptar com as chaves antigas.
O par de chaves pública/privada é usado para assinar RCToken. A chave pública é
transmitida aos sidecars por istiod para validação de JWT. É fundamental que os sidecars recebam a nova chave pública antes de authservice começar a usar a nova chave privada para assinar o RCToken. Para esse efeito, authservice começa a publicar a chave pública imediatamente após a adição da chave, mas aguarda um período de tempo significativo antes de começar a usá-la para assinar RCToken.
Em resumo, quando realizar rotações de chaves, recomendamos o seguinte:
- Faça rotações de chaves regulares ou a pedido, conforme necessário.
- No formato JSON, inclua as chaves atuais e as novas. As novas chaves devem estar associadas a uma data/hora no futuro. Recomendamos que especifique uma data/hora, pelo menos, algumas horas antes da hora atual.
- Monitorize e confirme que os serviços continuam a funcionar corretamente depois de a nova chave estar em utilização. Aguarde, pelo menos, um dia após a utilização da nova chave antes de avançar para o passo seguinte.
- Remova as chaves antigas das entradas JSON. Já não são necessários.
Implementação em vários clusters
A autenticação de utilizadores do Cloud Service Mesh suporta a implementação em vários clusters. Tem de implementar a autenticação do utilizador em cada cluster, conforme descrito acima. A configuração de autenticação do utilizador, como o recurso personalizado UserAuth, o segredo do cliente OIDC e as chaves de encriptação, tem de ser replicada em cada cluster.
Por predefinição, o gateway de entrada equilibra a carga dos pedidos de autenticação para qualquer uma das instâncias do authservice. Pode usar a regra de destino para configurar o gateway de entrada de forma a enviar pedidos para o authservice no mesmo cluster e só fazer failover para o authservice de outros clusters.
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: authservice-fail-over
  namespace: asm-user-auth
spec:
  host: authservice.asm-user-auth.svc.cluster.local
  trafficPolicy:
    loadBalancer:
      localityLbSetting:
        enabled: true
        failover:
        - from:  us-east
          to: us-west
        - from: us-west
          to: us-east
Tal como noutras configurações, tem de configurar isto em cada cluster.
Mapeamento de reivindicações personalizado
Para configurar o mapeamento de reivindicações personalizadas, configure spec.authentication.oidc.attributeMapping
para definir quaisquer mapeamentos do IDToken do fornecedor de identidade original. A chave vai ser o nome da reivindicação no RCToken e o valor é uma expressão CEL sobre como analisar a reivindicação do IDToken. Use assertion para fazer referência ao IDToken.
Exemplo:
spec:
  authentication:
    oidc:
      attributeMapping:
        aud_copy: assertion.aud
        decision: 'assertion.sub.startsWith("123") ? "success" : "fail"'
No RCToken, uma reivindicação aninhada attributes contém as reivindicações que foram configuradas:
"attributes": {
    "aud_copy": "foo.googleusercontent.com",
    "decision": "success"
}
Se a expressão CEL não conseguir analisar o valor do IDToken, ignora a reivindicação sem falhar o fluxo de autenticação.
Atualizações de autenticação de utilizadores
- Instale novamente os pacotes user-auth, uma vez que contêm o binário atualizado para a nova versão user-auth: - kpt pkg get https://github.com/GoogleCloudPlatform/asm-user-auth.git/@v1.2.3 . cd asm-user-auth/
- Guarde a configuração do cliente OIDC: - export OIDC_CLIENT_ID=CLIENT_ID export OIDC_CLIENT_SECRET=CLIENT_SECRET export OIDC_ISSUER_URI=ISSUER_URI export OIDC_REDIRECT_HOST=REDIRECT_HOST export OIDC_REDIRECT_PATH=REDIRECT_PATH
- Implemente o serviço de autenticação do utilizador para atualizar para uma nova versão. 
Detalhes da configuração da autenticação de utilizadores
A tabela seguinte descreve cada campo no CRD:
| Nome do campo | Descrição | 
|---|---|
| authentication.oidc | Esta secção contém a configuração do ponto final do OIDC e os parâmetros usados no fluxo do OIDC. | 
| authentication.oidc.certificateAuthorityData | Este é o certificado de raiz SSL do domínio do servidor de autorização OIDC ou do proxy HTTPS, se existir. | 
| authentication.oidc.oauthCredentialsSecret | Referências secretas ao segredo do tipo opaco do Kubernetes que contém o client_id e o client_secret do OAuth2 OIDC na carga útil JSON. | 
| authentication.oidc.issuerURI | O URI a usar como emissor no RCToken de saída. | 
| authentication.oidc.proxy | Servidor proxy para o IDP OIDC, se aplicável. Com o formato http://user:password@10.10.10.10:8888. | 
| authentication.oidc.redirectURIHost | O anfitrião a usar para o URI de terminação do OAuth. Se deixar este campo vazio, é usado o anfitrião do URL de destino e o URI de redirecionamento é montado dinamicamente. Este valor pode ser usado quando se pretende uma sessão de SSO de autenticação de utilizador num domínio de nível superior. Por exemplo, para ativar o SSO entre profile.example.com/ e admin.example.com/, este valor pode ser definido como example.com. Vai permitir que seja estabelecida uma sessão de autenticação de utilizador em example.com que será partilhada entre todos os subdomínios. Nota: se forem publicados vários domínios a partir da mesma malha, por exemplo, example1.com e example2.com, não é possível usar a funcionalidade e recomenda-se que a deixe vazia. | 
| authentication.oidc.redirectURIPath | O caminho do ponto final onde authservicetermina o fluxo OAuth. Deve registar este caminho de URI, bem como o anfitrião, como um URI de redirecionamento autorizado no servidor de autorização para oauthentication.oidc.clientID.Além disso, este URI deve ser publicado a partir da mesma malha de serviços e entrada onde authserviceestá ativado. | 
| authentication.oidc.scopes | O âmbito do OAuth que deve ser pedido no pedido de autenticação. Lista separada por vírgulas de identificadores usados para especificar os privilégios de acesso que estão a ser pedidos, além do âmbito "openid", por exemplo: "groups,allatclaim". | 
| authentication.oidc.groupsClaim | Se o idtokencontiver uma reivindicação de grupos, use este campo para indicar o respetivo nome. Se especificado, o serviço transmite os dados nesta reivindicação para a reivindicaçãogroupsno RCToken de saída. Esta reivindicação deve conter uma lista de strings separadas por vírgulas, por exemplo: ["group1", "group2"]. | 
| authentication.oidc.attributeMapping | Contém um ou mais mapeamentos de reivindicações de idtokenseguidos de expressões CEL. Todas as reivindicações devem ser referenciadas porassertion.X.assertioné referenciado
ao IDToken original, por exemplo,aud_copy: assertion.aud | 
| authentication.outputJWTAudience | O público-alvo do RCToken gerado por authservice. Os sidecars podem validar o RCToken recebido em relação a este valor de público-alvo. | 
Resolver problemas
- Acessibilidade da rede ao IDP. - Possível registo: - error: TLS handshake failed..- Valide a execução de - curla partir do contentor efémero anexado ao- istio-proxypara chamar o URI do emissor do IDP. Por exemplo, consulte o artigo Recolher registos do Cloud Service Mesh.- Se não conseguir estabelecer ligação, verifique as regras da firewall ou outras configurações de rede do cluster. 
- Certificado da AC de raiz. - Possível registo: - error: The server's TLS certificate did not match expectations.ou- error: TLS handshake failed..- Certifique-se de que o - certificateAuthorityDatatem o certificado de CA de raiz correto. Quando não existe um proxy HTTPS a terminar o tráfego HTTPS, este deve conter o certificado de CA raiz para o IDP. Se existir, deve conter os proxies.
- Configuração do caminho de redirecionamento. - Possível observação: recebe uma página de erro 404 durante o fluxo de autenticação OIDC. - A autenticação do utilizador devolve o cabeçalho "Set-Cookie" sem usar o atributo path, que, por predefinição, o navegador usa o diretório do URL do pedido como o caminho do cookie (âmbito do cookie relacionado com o caminho). Por isso, recomendamos que não inclua "/" no caminho de redirecionamento, a menos que seja essa a sua intenção. 
- O sidecar não consegue obter o jwksUri. - Em alguns cenários, uma restrição de sidecar pode levar à falha da obtenção de jwksUri. Se o espaço de nomes não estiver presente com um caráter universal (por exemplo, - ./*ou- istio-system/*), isto não funciona. Tem de adicionar manualmente o respetivo espaço de nomes no sidecar de saída.
Perguntas frequentes
- Como posso atualizar o Cloud Service Mesh com a autenticação de utilizadores ativada? - Siga o processo de atualização da malha de serviços na nuvem e especifique o ficheiro de sobreposição adicionando - --custom_overlay user-auth-overlay.yamlna linha de comandos para- asmcli install.
- Quantos recursos devemos aprovisionar para o - authservice? E quantos pedidos por segundo consegue processar?- Por predefinição, - authserviceestá configurado com 2, 0 vCPU e 256 Mi de memória. Com esta configuração, o- authserviceconsegue processar 500 pedidos por segundo. Para processar maiores quantidades de pedidos, deve aprovisionar mais CPU, o que é aproximadamente proporcional à respetiva capacidade de processamento de pedidos. Também pode configurar várias réplicas do authservice para aumentar a escalabilidade horizontal.