Observação:

Ativar um Workflow de Ações GitHub para Acessar um Cluster do Kubernetes usando a Autenticação do OKE OpenID Connect

Introdução

Neste tutorial, autorizamos um workflow de Ações GitHub para executar um comando do Kubernetes em um cluster do Oracle Cloud Infrastructure Kubernetes Engine (OCI Kubernetes Engine ou OKE). Usando a autenticação nativa do OpenID Connect (OIDC) do GitHub, você pode evitar o gerenciamento de credenciais de longa duração e simplificar o acesso seguro e automatizado aos seus clusters do OKE, permitindo fluxos de trabalho de Integração Contínua e Implantação Contínua (CI/CD) mais eficientes.

Objetivos

Tarefa 1: Criar um Repositório GitHub

Crie um novo repositório na sua conta GitHub. Digite o nome da sua conta ou da sua organização e o nome do seu repositório.

Tarefa 2: Configurar um Cluster do OKE

  1. Crie um cluster do Kubernetes com o OKE ou selecione um cluster existente para atualizar e anotar o OCID (Oracle Cloud Identifier) do cluster. Para obter mais informações, consulte Criando Clusters do Kubernetes Usando Workflows da Console.

  2. Crie um arquivo JSON para atualizar o cluster com as informações a seguir.

    • isOpenIdConnectAuthEnabled: Digite true.
    • issuerUrl: Digite "https://token.actions.githubusercontent.com".
    • clientId: Informe seu valor. Neste exemplo, usamos "oke-kubernetes-cluster". Esse valor deve corresponder ao público-alvo no workflow de Ações GitHub.
    • requiredClaim: Digite ["repository=GH_ACCOUNT/REPO", "workflow=NAME", "ref=refs/heads/main"].
    • usernameClaim: Digite "sub".
    • usernamePrefix: Digite "actions-oidc:".

    Substitua os valores GH_ACCOUNT e REPO pelos seus valores. O arquivo JSON deve ter a seguinte aparência:

    {
        "openIdConnectTokenAuthenticationConfig": {
          "isOpenIdConnectAuthEnabled": true,
          "clientId": "oke-kubernetes-cluster",
          "issuerUrl": "https://token.actions.githubusercontent.com",
          "usernameClaim": "sub",
          "usernamePrefix": "actions-oidc:",
          "requiredClaim": [
            "repository=gregvers/testoidc",
            "workflow=oke-oidc",
            "ref=refs/heads/main"
          ],
          "caCertificate": null,
          "signingAlgorithms": [
            "RS256"
          ]
        }
    }
    
  3. Execute o comando CLI (Interface de Linha de Comando) do OCI para atualizar o cluster com seu arquivo JSON. Substitua CLUSTER_OCID pelos seus valores.

    oci ce cluster update --cluster-id CLUSTER_OCID --from-json file://./update.json
    

Tarefa 3: Configurar o Tráfego de Rede de Saída

Permita que o servidor de API do cluster saia do tráfego para GitHub adicionando uma regra de segurança à lista de segurança da sub-rede de suas regras de segurança designadas ao ponto final da API do Kubernetes do cluster.

Tarefa 4: Configurar o Controle de Acesso Baseado em Atribuição (RBAC) do Kubernetes

Configure o RBAC no cluster do Kubernetes para autorizar o workflow de Ações GitHub a executar determinadas operações (get/watch/list pods e get/watch/list/create/update/delete deployments) usando o arquivo YAML a seguir. Atualize a seguinte linha: "name: actions-oidc:repo:GH-ACCOUNT/REPO:ref:refs/heads/main" com o nome da conta GitHub e o nome do repositório.

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: actions-oidc-role
rules:
  - apiGroups: [""]
    resources: ["pods"]
    verbs: ["get", "watch", "list"]
  - apiGroups: ["apps"]
    resources: ["deployments"]
    verbs: ["get", "watch", "list", "create", "update", "delete"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: actions-oidc-binding
  namespace: default
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: actions-oidc-role
subjects:
  - apiGroup: rbac.authorization.k8s.io
    kind: User
    name: actions-oidc:repo:GH-ACCOUNT/REPO:ref:refs/heads/main

Tarefa 5: Configurar Ações GitHub

Crie um workflow de Ações GitHub no repositório GitHub.

  1. Clique em Ações e Configurar um workflow você mesmo.

  2. Cole o código a seguir no editor e atualize server="https://X.X.X.X:6443" com o IP público do seu cluster.

    name: OKE-OIDC
    
    on:
      # Triggers the workflow on push or pull request events but only for the "main" branch
      push:
        branches: [ "main" ]
      pull_request:
        branches: [ "main" ]
    
      # Allows you to run this workflow manually from the Actions tab
      workflow_dispatch:
    
    permissions:
      id-token: write # Required to receive OIDC tokens
    
    # This workflow generates a GitHub Actions OIDC token and runs kubectl command in an OKE cluster
    jobs:
      oke-oidc:
        runs-on: ubuntu-latest
        steps:
          - name: Create OIDC Token
            id: create-oidc-token
            run: |
              AUDIENCE="oke-kubernetes-cluster"
              OIDC_URL_WITH_AUDIENCE="$ACTIONS_ID_TOKEN_REQUEST_URL&audience=$AUDIENCE"
              IDTOKEN=$(curl \
                -H "Authorization: Bearer $ACTIONS_ID_TOKEN_REQUEST_TOKEN" \
                -H "Accept: application/json; api-version=2.0" \
                "$OIDC_URL_WITH_AUDIENCE" | jq -r .value)
              echo "::add-mask::${IDTOKEN}"
              echo "idToken=${IDTOKEN}" >> $GITHUB_OUTPUT
    
          - name: Check Permissions in Kubernetes
            run: |
              kubectl \
              --token=$ \
              --server="https://X.X.X.X:6443" \
              --insecure-skip-tls-verify \
              auth can-i --list
    

    O workflow Ações do Github será executado automaticamente. O comando kubectl retornará as operações autorizadas com a configuração RBAC (get/watch/list pods e get/watch/list/create/update/delete deployments).

    GitHub Execução do workflow de ação

    Descrição da ilustração github-actions-workflow.png

Confirmações

Mais Recursos de Aprendizagem

Explore outros laboratórios em docs.oracle.com/learn ou acesse mais conteúdo de aprendizado gratuito no canal Oracle Learning YouTube. Além disso, visite education.oracle.com/learning-explorer para se tornar um Oracle Learning Explorer.

Para obter a documentação do produto, visite o Oracle Help Center.