Note :

Activer un flux de travail d'actions GitHub pour accéder à une grappe Kubernetes à l'aide de l'authentification OKE OpenID Connect

Présentation

Dans ce tutoriel, nous autorisons un flux de travail GitHub Actions à exécuter une commande Kubernetes dans une grappe Oracle Cloud Infrastructure Kubernetes Engine (OCI Kubernetes Engine ou OKE). En utilisant l'authentification OpenID Connect (OIDC) native de GitHub, vous pouvez éviter de gérer les données d'identification de longue durée et rationaliser l'accès sécurisé et automatisé à vos grappes OKE, ce qui permet des flux de travail d'intégration et de déploiement continus (CI/CD) plus efficaces.

Objectifs

Tâche 1 : Créer un référentiel GitHub

Créez un nouveau référentiel dans votre compte GitHub. Entrez le nom de votre compte ou de votre organisation, ainsi que le nom de votre référentiel.

Tâche 2 : Configurer une grappe OKE

  1. Créez une grappe Kubernetes avec OKE ou sélectionnez une grappe existante pour mettre à jour et noter l'identificateur Oracle Cloud (OCID) de la grappe. Pour plus d'informations, voir Création de grappes Kubernetes à l'aide des flux de travail de la console.

  2. Créez un fichier JSON pour mettre à jour la grappe à l'aide des informations suivantes.

    • isOpenIdConnectAuthEnabled : Entrez true.
    • issuerUrl : Entrez "https://token.actions.githubusercontent.com".
    • clientId : Entrez votre valeur. Dans cet exemple, nous utilisons "oke-kubernetes-cluster". Cette valeur doit correspondre au public dans votre flux de travail d'actions GitHub.
    • requiredClaim : Entrez ["repository=GH_ACCOUNT/REPO", "workflow=NAME", "ref=refs/heads/main"].
    • usernameClaim : Entrez "sub".
    • usernamePrefix : Entrez "actions-oidc:".

    Remplacez les valeurs GH_ACCOUNT et REPO par vos valeurs. Le fichier JSON doit se présenter comme suit :

    {
        "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. Exécutez la commande d'interface de ligne de commande OCI pour mettre à jour la grappe avec votre fichier JSON. Remplacez CLUSTER_OCID par vos valeurs.

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

Tâche 3 : Configurer le trafic réseau sortant

Autorisez le serveur d'API de grappe à sortir le trafic vers GitHub en ajoutant une règle de sécurité à la liste de sécurité du sous-réseau de vos règles de sécurité affectées au point d'extrémité de l'API Kubernetes de la grappe.

Tâche 4 : Configurer le contrôle d'accès basé sur les rôles (RBAC) de Kubernetes

Configurez RBAC dans votre grappe Kubernetes pour autoriser votre flux de travail Actions GitHub à effectuer certaines opérations (obtenir/regarder/lister les pods et obtenir/regarder/lister/créer/mettre à jour/supprimer des déploiements) à l'aide du fichier YAML suivant. Mettez à jour la ligne suivante : "name: actions-oidc:repo:GH-ACCOUNT/REPO:ref:refs/heads/main" avec le nom de votre compte GitHub et le nom du référentiel.

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

Tâche 5 : Configurer les actions GitHub

Créez un flux de travail d'actions GitHub dans votre référentiel GitHub.

  1. Cliquez sur Actions et sur Configurer un flux de travail vous-même.

  2. Collez le code suivant dans l'éditeur et mettez à jour server="https://X.X.X.X:6443" avec l'adresse IP publique de votre grappe.

    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
    

    Le flux de travail Actions Github s'exécutera automatiquement. La commande kubectl retournera les opérations que vous avez autorisées avec la configuration RBAC (get/watch/list pods et get/watch/list/create/update/delete déploiements).

    GitHub Exécution du flux de travail d'action

    Description de l'illustration github-actions-workflow.png

Confirmation

Autres ressources d'apprentissage

Explorez d'autres laboratoires sur la page docs.oracle.com/learn ou accédez à plus de contenu d'apprentissage gratuit sur le canal YouTube d'Oracle Learning. De plus, visitez education.oracle.com/learning-explorer pour devenir un explorateur Oracle Learning.

Pour obtenir de la documentation sur le produit, visitez Oracle Help Center.