OCI BastionおよびGitHubアクションを使用したプライベートOKEクラスタへのアプリケーションのデプロイ

セキュリティ、コンプライアンス、ネットワーク分離、制御などの様々な要因によって必要性が生じた場合に、Oracle Cloud Infrastructure BastionセッションおよびGitHubアクションをプライベートOracle Cloud Infrastructure Kubernetes Engine (OKE)クラスタに効果的にデプロイする方法を学習します。

OKEは、フル管理のスケーラブルで可用性の高いサービスであり、コンテナ化されたアプリケーションをクラウドにデプロイするために使用されます。

GitHub Actionsは、GitHubが提供する強力なワークフロー自動化および継続的インテグレーション/継続的デプロイメント(CI/CD)プラットフォームです。これにより、YAML構文を使用してカスタム・ワークフローを定義できます。これは、コード・プッシュ、プル・リクエスト、スケジュール済タスクなどの様々なイベントによってトリガーできます。

このリファレンス・アーキテクチャでは、プライベートOKEクラスタにデプロイするためのOCI BastionセッションおよびGitHubアクションの使用状況を調査します。

アーキテクチャ

このリファレンス・アーキテクチャでは、プライベートOKEクラスタへのデプロイメントを容易にするために、OCI BastionGitHub Actionsの統合について説明します。

プライベートOKEクラスタは、外部ネットワークからアクセスできません。K8s APIプライベート・エンドポイントにアクセスするには、SSHポート転送OCI Bastionセッションが確立されます。この設定により、kubectlコマンドを実行して、クラスタ内の様々なデプロイメント操作を実行できます。

コードがリポジトリにプッシュされると、GitHubアクション・ワークフローが自動的にトリガーされます。ワークフローの実行中に、OCI Bastionセッションが作成され、デプロイメント・アクションを実行するためにプライベートK8s APIエンドポイントに接続するために使用されます。

ワークフローが完了すると、OCI Bastionセッションが削除されます。このアプローチにより、非常にセキュアで効率的なデプロイメント・プロセスが保証されます。さらに、このワークフローは継続的インテグレーション・タスクを実行するためのフレームワークとして機能し、特定の開発プロセスおよび要件に合せてさらに調整できます。

次の図は、このリファレンス・アーキテクチャを示しています。



oke-bastion-deployment-diagram-oracle.zip

始める前に

  1. プライベート・サブネットに構成されたKubernetes APIエンドポイントおよびワーカー・ノードを使用してOKEクラスタをプロビジョニングします。

    ノート:

    プライベートKubernetes APIエンドポイントは、OCI Bastionポート転送セッションの確立に使用されます。
  2. 作成されたOCI Bastionサービスを、OKE VCNをターゲットVCNとして、OKEノード・サブネットをターゲット・サブネットとして設定します。
  3. 必要なIAMサービス・ポリシーを設定します。

    ノート:

    必要なIAMポリシーの設定については、クラスタの作成とデプロイメントのポリシー構成へのリンクの詳細を参照してください。

このアーキテクチャには、次のコンポーネントがあります。

  • Tenancy

    テナンシは、Oracle Cloud Infrastructureのサインアップ時にOracle Cloud内でOracleによって設定される、セキュアで分離されたパーティションです。テナンシ内のOracle Cloudでリソースを作成、編成および管理できます。テナンシは、会社または組織と同義です。通常、会社は1つのテナンシを持ち、そのテナンシ内の組織構造を反映します。通常、1つのテナンシは1つのサブスクリプションに関連付けられ、1つのサブスクリプションには通常、1つのテナンシのみが含まれます。

  • リージョン

    Oracle Cloud Infrastructureリージョンとは、可用性ドメインと呼ばれる1つ以上のデータ・センターを含む、ローカライズされた地理的領域です。リージョンは他のリージョンから独立し、長距離の場合は(複数の国または大陸にまたがって)分離できます。

  • コンパートメント

    コンパートメントは、Oracle Cloud Infrastructureテナンシ内のリージョン間論理パーティションです。Oracle Cloudリソースの使用割当てを編成、制御および設定するには、コンパートメントを使用します。特定のコンパートメントでは、アクセスを制御し、リソースの権限を設定するポリシーを定義します。

  • 可用性ドメイン

    可用性ドメインは、リージョン内の独立したスタンドアロン・データ・センターです。各可用性ドメイン内の物理リソースは、他の可用性ドメイン内のリソースから分離されているため、フォルト・トレランスが提供されます。可用性ドメインどうしは、電力や冷却、内部可用性ドメイン・ネットワークなどのインフラを共有しません。そのため、ある可用性ドメインでの障害は、リージョン内の他の可用性ドメインには影響しません。

  • フォルト・ドメイン

    フォルト・ドメインは、可用性ドメイン内のハードウェアおよびインフラストラクチャのグループです。各アベイラビリティ・ドメインに3つのフォルト・ドメインがあり、電源とハードウェアは独立しています。複数のフォルト・ドメインにリソースを分散する場合、アプリケーションは、物理サーバーの障害、システム・メンテナンスおよびフォルト・ドメイン内の電源障害を許容できます。

  • 仮想クラウド・ネットワーク(VCN)およびサブネット

    VCNは、Oracle Cloud Infrastructureリージョンで設定する、カスタマイズ可能なソフトウェア定義のネットワークです。従来のデータ・センター・ネットワークと同様に、VCNを使用するとネットワーク環境を制御できます。VCNには重複しない複数のCIDRブロックを含めることができ、VCNの作成後にそれらを変更できます。VCNをサブネットにセグメント化して、そのスコープをリージョンまたは可用性ドメインに設定できます。各サブネットは、VCN内の他のサブネットと重複しない連続した範囲のアドレスで構成されます。サブネットのサイズは、作成後に変更できます。サブネットはパブリックにもプライベートにもできます。

  • ロード・バランサ

    Oracle Cloud Infrastructure Load Balancingサービスは、単一のエントリ・ポイントからバックエンドの複数のサーバーへの自動トラフィック分散を提供します。

  • セキュリティ・リスト

    サブネットごとに、サブネット内外で許可する必要があるトラフィックのソース、宛先およびタイプを指定するセキュリティ・ルールを作成できます。

  • ネットワークアドレス変換(NAT)ゲートウェイ

    NATゲートウェイを使用すると、VCN内のプライベート・リソースは、受信インターネット接続にこれらのリソースを公開することなく、インターネット上のホストにアクセスできます。

  • サービス・ゲートウェイ

    サービス・ゲートウェイは、VCNからOracle Cloud Infrastructure Object Storageなどの他のサービスへのアクセスを提供します。The traffic from the VCN to the Oracle service travels over the Oracle network fabric and does not traverse the internet.

  • クラウド・ガード

    Oracle Cloud Guardを使用して、Oracle Cloud Infrastructure内のリソースのセキュリティをモニターおよびメンテナンスできます。クラウド・ガードでは、ディテクタ・レシピを使用して、リソースでセキュリティの弱点を調べたり、特定のリスクのあるアクティビティについてオペレータおよびユーザーをモニターしたりするために定義できます。構成の誤りやセキュアでないアクティビティが検出されると、クラウド・ガードは修正アクションを推奨し、ユーザーが定義できるレスポンダ・レシピに基づいてそれらのアクションの実行を支援します。

  • セキュリティ・ゾーン

    セキュリティ・ゾーンは、データの暗号化やコンパートメント全体のネットワークへのパブリック・アクセスの防止などのポリシーを適用することで、Oracleのセキュリティのベスト・プラクティスを最初から保証します。セキュリティ・ゾーンは、同じ名前のコンパートメントに関連付けられ、コンパートメントとそのサブコンパートメントに適用されるセキュリティ・ゾーン・ポリシーまたは「レシピ」が含まれます。セキュリティ・ゾーン・コンパートメントに標準コンパートメントを追加または移動することはできません。

  • Kubernetes Engine

    Oracle Cloud Infrastructure Kubernetes Engine (OCI Kubernetes EngineまたはOKE)は、コンテナ化されたアプリケーションをクラウドにデプロイするために使用できる、完全に管理されたスケーラブルで可用性の高いサービスです。アプリケーションで必要なコンピュート・リソースを指定すると、KubernetesエンジンがそれらをOracle Cloud Infrastructureの既存のテナンシにプロビジョニングします。OKEは、Kubernetesを使用して、ホストのクラスタにわたるコンテナ化されたアプリケーションのデプロイメント、スケーリングおよび管理を自動化します。

  • 要塞サービス

    Oracle Cloud Infrastructure Bastionは、パブリック・エンドポイントがなく、ベア・メタルや仮想マシン、Oracle MySQL Database ServiceAutonomous Transaction Processing (ATP)、Oracle Cloud Infrastructure Kubernetes Engine (OKE)、およびSecure Shell Protocol (SSH)アクセスを許可するその他のリソースなど、厳密なリソース・アクセス制御を必要とするリソースへの制限付きで時間制限付きのセキュアなアクセスを提供します。OCI Bastionサービスを使用すると、ジャンプ・ホストをデプロイおよびメンテナンスせずにプライベート・ホストへのアクセスを有効にできます。さらに、アイデンティティベースの権限と一元化された監査済みの期限付きSSHセッションにより、セキュリティ・ポスチャが向上します。OCI Bastionは、要塞アクセスのパブリックIPの必要性をなくし、リモート・アクセスを提供する際の手間と潜在的な攻撃対象領域を排除します。

レコメンデーション

次の推奨事項を開始点として使用します。 お客様の要件は、ここで説明するアーキテクチャとは異なる場合があります。
  • VCN

    VCNを作成するときには、必要なCIDRブロックの数を決定し、VCN内のサブネットにアタッチする予定のリソースの数に基づいて各ブロックのサイズを決定します。標準のプライベートIPアドレス領域内にあるCIDRブロックを使用します。

    プライベート接続を設定する他のネットワーク(Oracle Cloud Infrastructure、オンプレミス・データ・センターまたは別のクラウド・プロバイダ)と重複しないCIDRブロックを選択します。

    VCNを作成した後、そのCIDRブロックを変更、追加および削除できます。

    サブネットを設計するときには、トラフィック・フローおよびセキュリティ要件を考慮してください。特定の層またはロール内のすべてのリソースを、セキュリティ境界として機能できる同じサブネットにアタッチします。

  • クラウド・ガード

    Oracleが提供するデフォルトのレシピをクローニングおよびカスタマイズして、カスタム・ディテクタおよびレスポンダ・レシピを作成します。これらのレシピを使用すると、警告を生成するセキュリティ違反のタイプ、およびそれらに対して実行を許可するアクションを指定できます。たとえば、可視性がpublicに設定されているオブジェクト・ストレージ・バケットを検出できます。

    クラウド・ガードをテナンシ・レベルで適用して、最も広い範囲をカバーし、複数の構成を維持する管理上の負担を軽減します。

    管理対象リスト機能を使用して、特定の構成をディテクタに適用することもできます。

  • 要塞

    OCI Bastionを使用すると、権限のあるユーザーは、Secure Shell (SSH)セッションを使用して特定のIPアドレスからターゲット・リソースに接続できます。権限のあるユーザーのみが要塞サービスおよびセッションを作成できることを確認してください。要塞へのアクセスは、認可されたユーザーにのみ付与する必要があります。

  • Kubernetes Engine (OKE)

    必要なIAMポリシーが作成され、認可されたユーザーのみがクラスタ・リソースにアクセスできることを確認してください。セキュリティ状態を改善するには、追加のモニタリングおよびロギングを有効にする必要があります。

考慮事項

このリファレンス・アーキテクチャをデプロイする場合は、次の点を考慮してください。

  • OKEのスケーラビリティ

    負荷に応じてKubernetesクラスタ内のワーカー・ノードの数を更新することで、アプリケーションをスケール・アウトできます。同様に、クラスタ内のワーカー・ノードの数を減らすことでスケール・インできます。Kubernetesクラスタでサービスを作成すると、ロード・バランサを作成して、そのサービスに割り当てられているノード間でサービス・トラフィックを分散できます。

  • アプリケーションの可用性

    フォルト・ドメインは、1つのアベイラビリティ・ドメイン内で最高の自己回復性を実現します。複数の可用性ドメインで同じタスクを実行するインスタンスまたはノードをデプロイすることもできます。この設計により、冗長性が導入され、単一障害点が排除されます。

  • セキュリティ

    どのOCIリソースにアクセスできるユーザーとそのリソースへのアクセス方法を制限するポリシーを使用します。

    OKEは、Oracle Cloud Infrastructure Identity and Access Management (IAM)と統合されています。IAMは、ネイティブOCIアイデンティティ機能による簡単な認証を提供します。

デプロイ

GitHub Actionsワークフロー・コードは、GitHubにあります。

  1. GitHubに移動します。
  2. リポジトリをローカル・コンピュータにクローニングまたはダウンロードします。
  3. READMEドキュメントの手順に従います。

詳細の参照

OCIのベスト・プラクティスと、OKEの作成およびデプロイメントのポリシー構成についてさらに学習します。

次の追加リソースを確認します。

確認

Authors: Shan Duraipandian

Contributors: John Sulyok