Remarques :

Activation d'un workflow d'actions GitHub pour accéder à un cluster Kubernetes à l'aide de l'authentification OpenID Connect OKE

Introduction

Dans ce tutoriel, nous autorisons un workflow d'actions GitHub à exécuter une commande Kubernetes dans un cluster 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 informations d'identification à long terme et rationaliser l'accès sécurisé et automatisé à vos clusters OKE, permettant ainsi des workflows d'intégration continue et de déploiement continu (CI/CD) plus efficaces.

Objectifs

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

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

Tâche 2 : configurer un cluster OKE

  1. Créez un cluster Kubernetes avec OKE ou sélectionnez un cluster existant pour mettre à jour et noter l'OCID (identificateur Oracle Cloud) du cluster. Pour plus d'informations, reportez-vous à Création de clusters Kubernetes à l'aide de workflows de console.

  2. Créez un fichier JSON pour mettre à jour le cluster avec les 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 à l'audience dans votre workflow 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 ressembler à :

    {
        "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 de l'interface de ligne de commande OCI pour mettre à jour le cluster 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 : configuration du trafic réseau sortant

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

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

Configurez le contrôle d'accès basé sur les rôles dans votre cluster Kubernetes afin d'autoriser le workflow GitHub Actions à effectuer certaines opérations (dossiers get/watch/list et déploiements get/watch/list/create/update/delete) à 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 compte GitHub et le nom de 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 workflow d'actions GitHub dans le référentiel GitHub.

  1. Cliquez sur Actions et sur Configurer un workflow 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 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
    

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

    GitHub Exécution du workflow d'action

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

Remerciements

Ressources de formation supplémentaires

Explorez d'autres ateliers sur docs.oracle.com/learn ou accédez à d'autres contenus de formation gratuits sur le canal Oracle Learning YouTube. De plus, visitez le site education.oracle.com/learning-explorer pour devenir un explorateur Oracle Learning.

Pour obtenir la documentation produit, consultez le site Oracle Help Center.