ノート:

OKE OpenID Connect認証を使用してKubernetesクラスタにアクセスするためのGitHubアクション・ワークフローの有効化

イントロダクション

このチュートリアルでは、Oracle Cloud Infrastructure Kubernetes Engine (OCI Kubernetes EngineまたはOKE)クラスタでKubernetesコマンドを実行するためのGitHubアクション・ワークフローを承認します。GitHubのネイティブOpenID Connect (OIDC)認証を使用することで、長期間の資格証明の管理を回避し、OKEクラスタへのセキュアで自動化されたアクセスを合理化して、より効率的な継続的統合および継続的デプロイメント(CI/CD)ワークフローを実現できます。

目的

タスク1: GitHubリポジトリの作成

GitHubアカウントに新しいリポジトリを作成します。アカウント名または組織名およびリポジトリの名前を入力します。

タスク2: OKEクラスタの構成

  1. OKEでKubernetesクラスタを作成するか、更新する既存のクラスタを選択し、クラスタのOracle Cloud Identifier (OCID)を書き留めます。詳細は、コンソール・ワークフローを使用したKubernetesクラスタの作成を参照してください。

  2. JSONファイルを作成して、次の情報でクラスタを更新します。

    • isOpenIdConnectAuthEnabled: trueと入力します。
    • issuerUrl: "https://token.actions.githubusercontent.com"と入力します。
    • clientId:値を入力します。この例では、"oke-kubernetes-cluster"を使用します。この値は、GitHubアクション・ワークフローのオーディエンスと一致する必要があります。
    • requiredClaim: ["repository=GH_ACCOUNT/REPO", "workflow=NAME", "ref=refs/heads/main"]と入力します。
    • usernameClaim: "sub"と入力します。
    • usernamePrefix: "actions-oidc:"と入力します。

    GH_ACCOUNTおよびREPOの値を自分の値に置き換えます。JSONは次のようになります。

    {
        "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. OCIコマンドライン・インタフェース(CLI)コマンドを実行して、JSONファイルでクラスタを更新します。CLUSTER_OCIDを値に置き換えます。

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

タスク3: エグレス・ネットワーク・トラフィックの構成

クラスタKubernetes APIエンドポイントに割り当てられたセキュリティ・ルールのサブネット・セキュリティ・リストにセキュリティ・ルールを追加して、クラスタAPIサーバーがGitHubへのトラフィックをエグレスできるようにします。

タスク4: Kubernetesロール・ベースのアクセス制御(RBAC)の構成

次のYAMLファイルを使用して、GitHubアクション・ワークフローが特定の操作(ポッドの取得/監視/リスト、デプロイメントの取得/監視/リスト/作成/更新/削除)を実行することを認可するように、KubernetesクラスタでRBACを構成します。"name: actions-oidc:repo:GH-ACCOUNT/REPO:ref:refs/heads/main"の行をGitHubアカウント名およびリポジトリ名で更新します。

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

タスク5: GitHubアクションの構成

GitHubリポジトリにGitHubアクション・ワークフローを作成します。

  1. 「アクション」をクリックし、「自分でワークフローを設定」をクリックします。

  2. エディタに次のコードを貼り付け、クラスタのパブリックIPでserver="https://X.X.X.X:6443"を更新します。

    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
    

    Github Actionsワークフローは自動的に実行されます。kubectlコマンドは、RBAC構成で認可した操作(ポッドの取得/監視/リスト、デプロイメントの取得/監視/リスト/作成/更新/削除)を返します。

    GitHubアクション・ワークフローの実行

    図github-actions-workflow.pngの説明

承認

その他の学習リソース

docs.oracle.com/learnの他のラボを確認するか、Oracle Learning YouTubeチャネルで無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスしてOracle Learning Explorerになります。

製品ドキュメントは、Oracle Help Centerを参照してください。