ノート:
- このチュートリアルでは、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 --list
Github 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