Code Engine とセキュリティー

IBM Cloud® Code Engineアーキテクチャーは、セキュリティー優先のマインドセットを使用して構築されています。Code Engineコンポーネントは IBM によって管理および所有されるものです。 お客様およびそのワークロードは、プロジェクトを使用することでそれぞれ分離され、それらは Kubernetes 名前空間に基づいています。 リソース・レベルで役割ベース・アクセス制御が実行され、許可されたユーザーにのみ、プロジェクト・リソースに対する特定の操作の実行が許可されます。 ユーザー・アクセスは Cloud Identity and Access Management (IAM) によって管理されます。 デプロイされたアプリは、 HTTPS を通じて公開され、 Code Engine が基盤となる TLS の証明書を自動的に作成・管理します。 Code Engine により、アプリケーションに対して即座に DDoS による保護が提供されます。 Code Engine の DDoS による保護は、 Cloud Internet Services (CIS) によって提供されており、追加費用はかかりません。

定義上、Code Engine ジョブには外部からアクセスできません。 それでも、ジョブからは外部への要求を作成でき、内部的に Code Engine アプリケーションの呼び出しもできます。 アプリケーションを内部で呼び出すジョブの例については、 Code Engine のサンプル( GitHub )リポジトリを参照してください。

以下のセキュリティー機能を使用してセキュリティーを強化できます。

セキュリティー機能
セキュリティー機能 説明
IAM によるアクセスの許可 Cloud Identity and Access Management (IAM) を使用して、Code Engineの他のユーザーにアクセス権限を付与します。IBM Cloud IAM は、IBM Cloudプラットフォーム、Code Engine、およびアカウント内のすべてのリソースを使用したセキュア認証を提供します。 適切なユーザー役割および許可をセットアップすることは、リソースにアクセスできるユーザーを制限するために重要です。 ユーザー・アクセスの管理を参照してください。
外部エンドポイントの無効化 --visibility=privateまたはvisibility=projectオプションを使用して、外部トラフィックに公開されていない無効な外部エンドポイントを使用してアプリケーションをデプロイします。 Code Engineアプリケーションの可視性のオプションを参照してください。
プライベート・イメージ・レジストリーへのイメージの保管 IBM Cloud Container Registry で提供されているようなプライベート・イメージ・レジストリーをセットアップして、レジストリーや、Code Engine にデプロイ可能なイメージへのアクセスを制御します。 IBM Cloud Container Registry脆弱性アドバイザーを使用してイメージを自動的にスキャンします。 独自のカスタム・プライベート・レジストリーへのアクセスを追加することもできます。 コンテナー・レジストリーへのアクセスを参照してください。
プライベート・リポジトリーからのコードのビルド ソース・コードをプライベート・リポジトリーに保管して、IBM Cloud Container Registry にビルドします。 プライベート・コード・リポジトリーへのアクセスを参照してください。
シークレットを使用した機密情報の保管 パスワードや SSH 鍵のような情報をシークレットに保管することができます。 詳しくは、 シークレットの処理 を参照してください。
認証機能と許可機能の追加 パブリック API または Web サイト上の Code Engine でアプリケーションまたは関数を公開する場合、特定のユーザーまたはロケーション (IP アドレス範囲) にアクセスを制限することができます。 Code Engine では、 Code Engine プロジェクトとそのエンティティーを管理するために使用できる API のアクセスを制限する機能が提供されますが、コード・ソースの所有者は、エンドポイントを保護するために適切な認証機能を追加する必要があります。 例えば、 IBM Cloud App ID を使用して、コードの認証機能と許可機能を追加できます。
TLS の証明書を定期的に更新する カスタムドメインマッピングを使用してアプリケーションや関数を公開している場合は、 TLS の証明書に有効期限(たとえば90日間など)が設定されていることを確認する必要があります。 更新された証明書 (独自の有効期限日付を持つ証明書) を使用して、証明書を定期的にローテーションする必要があります。 証明書をローテーションするには、自動化を使用することをお勧めします。 たとえば、cronサブスクリプションによってトリガーされる Code Engine ジョブを使用して、証明書をローテーションさせることができます。 IBM Cloud Secrets Manager にシークレットを保存する場合は、 Code Engine プロジェクトが証明書の更新を認識できるよう、 IBM Cloud Event Notifications の使用を検討してください。 イベント通知を使用しているサンプルアプリは、 GitHub にある「 Code Engine 」サンプルリポジトリから入手できます。

TLS の対応バージョンおよび暗号スイート

Code Engine のAPIおよびアプリケーションエンドポイントは、トランスポート層セキュリティ( TLS )、 1.2 (またはそれ以降)、および以下の暗号スイートをサポートしています。

TLS 暗号スイート

  • ECDHE-ECDSA-AES128-GCM-SHA256
  • ECDHE-ECDSA-AES256-GCM-SHA384
  • ECDHE-RSA-AES128-GCM-SHA256
  • ECDHE-RSA-AES256-GCM-SHA384
  • ECDHE-ECDSA-CHACHA20-POLY1305
  • ECDHE-RSA-CHACHA20-POLY1305

DDoS防御

Code Engine アプリケーションに対して、 DDoS による即時保護を提供します。 Code Engine の DDoS による保護は、 Cloud Internet Services (CIS) によって提供されており、追加費用は一切かかりません。

DDoS この保護機能は、システム相互接続(OSI)レイヤー3およびレイヤー4( TCP/IP )のプロトコル攻撃を防御しますが、レイヤー7( HTTP )の攻撃は防御しません。

レイヤー 7 攻撃に対処するために、以下のステップを実行して、トラフィックがカスタム・ドメインを使用してセキュアな経路を通過し、 Code Engine 提供ドメインを介してパブリック・インターネットで使用できなくなるようにすることができます。

  1. カスタム・ドメインを取得します。
  2. Code Engineで、アプリの カスタム・ドメイン・マッピングを作成 します。
  3. カスタム・ドメインを管理するために Cloud Internet Services (CIS) のインスタンスをセットアップします。
  4. カスタム・ドメインを CIS インスタンスに追加します
  5. CISで グローバル・ロード・バランサーを構成します
  6. CIS で、 ロードバランサーの「 HTTP 」プロキシモードを有効にします。 これにより、レイヤー7での DDoS 保護およびその他の CIS のセキュリティ機能が有効になります。
  7. Code Engineで、アプリケーションのパブリック・システム提供ドメイン・マッピングをオフにします。 アプリケーションに移動し、アプリケーションの 「ドメイン・マッピング (Domain mappings)」 タブで、 「外部システム・ドメイン・マッピングなし (No external system domain mapping)」 を選択します。
  8. 「作成」 をクリックして、アプリケーション・リビジョンを保存します。

CISの DDoS について詳しくは、 CIS を参照してください。 レイヤー 7 攻撃に対処するその他の方法については、 CIS を参照してください。