ノート:
- このチュートリアルでは、Oracle Cloudへのアクセスが必要です。無料アカウントにサインアップするには、Oracle Cloud Infrastructure Free Tierの開始を参照してください。
- Oracle Cloud Infrastructureの資格証明、テナンシおよびコンパートメントの値の例を使用します。演習を完了するときに、これらの値をクラウド環境に固有の値に置き換えます。
OKE OpenID Connect認証を使用してKubernetesクラスタにアクセスするためのGitHubアクション・ワークフローの有効化
イントロダクション
このチュートリアルでは、Oracle Cloud Infrastructure Kubernetes Engine (OCI Kubernetes EngineまたはOKE)クラスタでKubernetesコマンドを実行するためのGitHubアクション・ワークフローを承認します。GitHubのネイティブOpenID Connect (OIDC)認証を使用することで、長期間の資格証明の管理を回避し、OKEクラスタへのセキュアで自動化されたアクセスを合理化して、より効率的な継続的統合および継続的デプロイメント(CI/CD)ワークフローを実現できます。
目的
- GitHubアクション・ワークフローを有効にして、OKE OIDC認証を使用してKubernetesクラスタにアクセスします。
タスク1: GitHubリポジトリの作成
GitHubアカウントに新しいリポジトリを作成します。アカウント名または組織名およびリポジトリの名前を入力します。
タスク2: OKEクラスタの構成
- 
    OKEでKubernetesクラスタを作成するか、更新する既存のクラスタを選択し、クラスタのOracle Cloud Identifier (OCID)を書き留めます。詳細は、コンソール・ワークフローを使用したKubernetesクラスタの作成を参照してください。 
- 
    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" ] } }
- isOpenIdConnectAuthEnabled: 
- 
    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アクション・ワークフローを作成します。
- 
    「アクション」をクリックし、「自分でワークフローを設定」をクリックします。 
- 
    エディタに次のコードを貼り付け、クラスタのパブリック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 --listGithub Actionsワークフローは自動的に実行されます。 kubectlコマンドは、RBAC構成で認可した操作(ポッドの取得/監視/リスト、デプロイメントの取得/監視/リスト/作成/更新/削除)を返します。 
承認
- 
    著者 - Greg Verstraeten (シニア・プリンシパル・プロダクト・マネージャー) 
- 
    コントリビュータ - Gavin Scheele (技術スタッフの上級メンバー) 
その他の学習リソース
docs.oracle.com/learnの他のラボを確認するか、Oracle Learning YouTubeチャネルで無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスしてOracle Learning Explorerになります。
製品ドキュメントは、Oracle Help Centerを参照してください。
Enable a GitHub Actions Workflow to Access a Kubernetes Cluster using OKE OpenID Connect Authentication
G17272-01
October 2024