Function Compute は、Transport Layer Security(TLS) 1.2 以降を使用して、ユーザーリクエストと返された計算結果を暗号化します。情報漏洩や改ざんを防ぐために、内部通信には独自のプロトコルが使用されます。このトピックでは、Function Compute がデータプレーンで提供するセキュリティ保護について、複数の側面から説明します。
アクセスサービスのセキュリティ保護
データプレーンの内部プロセスでは、アクセスサービスを使用して関数を呼び出します。
アクセスサービスは、関数呼び出しのハンドラーとして機能し、Server Load Balancer (SLB) を使用して負荷を分散し、ネットワークセキュリティを保護します。
デフォルトでは、関数はインターネット経由でのみアクセスできます。特定の仮想プライベートクラウド(VPC)からの呼び出しリクエストのみを許可できます。関数は、インターネットと VPC の両方からアクセスすることはできません。
関数呼び出しには、同期呼び出し、非同期呼び出し、および非同期タスクが含まれます。
同期呼び出し
同期呼び出しは、リクエスト-レスポンス呼び出しモードを使用します。これは、呼び出しリクエストの情報がキャッシュされず、関数の実行エラーが発生した場合にシステムがリクエストを再試行しないことを示します。
非同期呼び出し
Function Compute がリクエストを受信した後、呼び出しリクエストは Simple Message Queue (formerly MNS) にキャッシュされます。リクエストがキャッシュされると、すぐにレスポンスが返されます。その後、Function Compute は SMQ からリクエストを非同期的に取得して処理します。リクエストは少なくとも 1 回処理されます。Function Compute
異なるユーザーが使用する SMQ キューは、アカウントレベル以上で分離されます。呼び出し回数が多い関数の場合、SMQ キューを関数レベルで分離できます。
デフォルトでは、関数の実行エラーが原因で呼び出しが失敗した場合、Function Compute は呼び出しリクエストを 3 回再試行します。速度制限エラーやシステムエラーなどの他のエラーが原因で呼び出しが失敗した場合、Function Compute はバイナリ指数バックオフモードで呼び出しリクエストを再試行します。メッセージの再試行回数と最大生存時間(TTL)を指定できます。
Function Compute では、非同期呼び出しに対して非同期呼び出し機能を有効にすることができます。非同期呼び出しリクエストが処理された後、コールバックを呼び出して、関数呼び出しイベントをダウンストリームサービスに保存したり、関数呼び出し結果をプッシュしたりできます。
非同期タスク
非同期呼び出しと比較して、非同期タスクは、より多くのタスク制御と可観測性機能を提供します。ビジネス要件に基づいて非同期タスクを終了できます。詳細については、「非同期タスク」をご参照ください。
スケジューリングサービスのセキュリティ保護
データプレーンの内部プロセスでは、スケジューリングサービスは、計算ノードと関数インスタンスのライフサイクル、および関数呼び出しのルーティング方法を管理します。
計算ノード
Function Compute は、Elastic Compute Service (ECS) ベアメタルインスタンスと ECS インスタンスの両方を使用して計算ノードとして動的移行を実装します。
デフォルトでは、スケジューリングサービスは、ユーザーごとに合計 50 ~ 600 vCPU と 100 ~ 1,200 GB のメモリを持つ計算ノードを提供します。プーリングを使用すると、最大 300 バースト vCPU と 600 GB のバーストメモリを提供できます。プール内のリソースが使い果たされると、スケジューリングサービスは 1 分あたり最大 360 vCPU の速度でスケールアウトを実行します。スケールアウト速度がこの制限を超えると、速度制限エラーが発生します。詳細については、「リージョンごとの単一アカウントの計算ノードの制限」をご参照ください。
計算ノードの有効期間は最大 120 時間です。スケジューリングサービスが計算ノードでエラーを検出した場合、スケジューリングサービスは有効期限が切れる前に計算ノードを再構築します。
関数インスタンス
関数インスタンスは、オンデマンドインスタンスとプロビジョニング済みインスタンスに分類できます。オンデマンドインスタンスは、関数の呼び出し時に動的に生成され、5 分間アイドル状態になると自動的に解放されます。プロビジョニング済みインスタンスの最大数と最小数を指定できます。実際の数は、構成したスケーリングポリシーに基づいています。プロビジョニング済みインスタンスは、アイドル状態のときに自動的に解放されません。
デフォルトでは、スケジューリングサービスはユーザーごとに 300 のバースト可能な関数インスタンスを提供します。関数インスタンスの数が 300 に達すると、システムは 1 分あたり最大 300 関数インスタンスの速度でスケールアウトを実行します。スケールアウト速度が制限を超えると、速度制限エラーが発生します。バースト可能な関数インスタンスの制限を引き上げるには、テクニカルサポートの DingTalk グループ(ID 64970014484)に参加してください。
関数インスタンスの有効期間は最大 36 時間です。関数コードまたは関数インスタンスの構成が変更された場合、またはエラーが発生した場合、スケジューリングサービスはコンテナーインスタンスを再構築します。エラーには、関数がタイムアウトした、メモリが制限を超えた、クライアントによって関数の実行が終了したなどが含まれます。関数インスタンスは、負荷分散などの他の理由により、有効期限が切れる前に再構築される場合もあります。
ルーティング方法
スケジューリングサービスは、bin-pack
ルーティングアルゴリズムを使用してデータをルーティングします。1 つの関数インスタンスが複数の関数呼び出しリクエストに応答する場合があり、同じクライアントからの呼び出しリクエストが処理のために異なる関数インスタンスに分散される場合があります。グローバル変数やファイル入力などの関数インスタンスのリソースが異なる呼び出し間で共有される、または共有されないことを前提とすることはできません。
スケジューリングサービスは、関数インスタンスに指定した関数タイムアウト期間に基づいて、各関数呼び出しリクエストが関数インスタンスを占有する時間を制限します。この期間が経過すると、関数インスタンスは再利用されます。
計算ノードのセキュリティ保護
計算ノードは関数コードを実行します。Function Compute は、ECS ベアメタルインスタンスと ECS インスタンスの 2 種類の計算ノードを使用します。このセクションでは、外側から内側に向かって各レイヤーのセキュリティ機能について説明します。
Alibaba Cloud が計算ノードに提供する保護機能
Alibaba Cloud は、計算ノードに次の保護機能を提供します。詳細については、「Alibaba Cloud セキュリティホワイトペーパー」をご参照ください。
マルチゾーンディザスタリカバリ:リージョン内の計算ノードは、複数ゾーンに分散されてゾーン間のディザスタリカバリをサポートします。
分離されたネットワーク環境:計算ノードは VPC 内に存在します。これは分離されたネットワーク環境です。他のユーザーは計算ノードに直接アクセスできません。
脆弱性の修正とセキュリティ更新:Function Compute は、計算ノードの脆弱性を修正し、計算ノードを更新してセキュリティを強化します。更新プロセスはユーザーに対して透過的です。
関数インスタンスのユーザーレベルおよび関数レベルの分離
仮想化技術を使用したセキュリティ分離
ECS ベアメタルインスタンスは、異なるユーザーの関数インスタンスを実行できます。Alibaba Cloud サンドボックスコンテナーを使用すると、分離された VM 上で関数を実行できます。ECS インスタンスは、同じユーザーの関数インスタンスのみを実行できます。仮想化技術に基づいて、異なるユーザーの ECS インスタンスは分離されています。関数は、runC などのコンテナー技術を使用して分離されます。
関数インスタンスのユーザー制御ネットワークアクセス
関数インスタンスにプライベート IP アドレスを構成できます。これにより、他のユーザーは関数インスタンスに直接アクセスできなくなります。関数インスタンスは相互に分離されています。これは、Open vSwitch、iptables、およびルートテーブルを使用して実装されます。外部ネットワークにアクセスするために、関数インスタンスに次のアクセスモードのいずれかを構成できます。
関数インスタンスがインターネットのみにアクセスできるようにします。これはデフォルトのアクセスモードです。
関数インスタンスが指定された VPC(ApsaraDB RDS インスタンスのプライベート IP アドレス、NAS ファイルシステム、または ECS インスタンスなど)のみにアクセスできるようにします。
関数インスタンスがインターネットと指定された VPC の両方にアクセスできるようにします。
関数インスタンスがインターネットまたは VPC にアクセスできないようにします。
関数インスタンスの制限付きリソース
関数インスタンスの CPU 計算能力は、メモリサイズに基づいて比例配分されます。関数インスタンスのコールドスタート中は、コールドスタートを高速化するために、最大 20 秒間、より多くの CPU リソースが関数インスタンスに割り当てられます。デフォルトでは、関数インスタンスのファイルシステム容量は 512 MB、ネットワーク帯域幅は 1 Gbit/s です。パフォーマンスインスタンスの場合、ファイルシステム容量は最大 10 GB、ネットワーク帯域幅は最大 5 Gbit/s です。
アイドル状態の関数インスタンスのフリーズ
関数インスタンスがリクエストを処理しない場合、関数インスタンスはフリーズされます。次のリクエストが処理される前に、フリーズされたインスタンスのフリーズを解除できます。
関数インスタンスへのログオン許可
認証されたユーザーは、オンライントラブルシューティングのために関数インスタンスにログオンできます。
脆弱性の修正とセキュリティ更新
Function Compute は、関数インスタンスの脆弱性を修正し、関数インスタンスを更新してセキュリティを強化します。更新プロセスはユーザーに対して透過的です。
ランタイム環境によって向上したセキュリティ機能
一時 ID 資格情報
Function Compute は、関数を実行する Resource Access Management (RAM) ロールの 一時 ID 資格情報を申請します。資格情報は、環境変数を使用してランタイム環境に挿入され、入力パラメーターを使用して関数コードに渡されます。一時 ID 資格情報を使用して、他の Alibaba Cloud サービスにアクセスできます。
関数実行エラー情報の収集
ランタイム環境は、関数の実行エラーとログに関する情報を収集して、エラーの特定に役立てます。
ライフサイクルフックと機能拡張
ランタイム環境は、Initializer フックや PreStop フックなどのフックを提供して、ビジネス要件に基づいてセキュリティ機能を拡張できるようにします。
非永続ストレージ
ランタイム環境によって提供されるファイルシステムとメモリは、関数インスタンスが解放されると解放されます。データは、関数インスタンスのローカルファイルシステムまたはメモリに永続的に保存されません。永続データストレージを構成するには、NAS または Object Storage Service (OSS) を使用します。
不変のコードとレイヤー
コードディレクトリ /code およびレイヤーディレクトリ /opt への変更は、現在の関数インスタンスに対してのみ有効です。変更は、同じ関数の呼び出しリクエストを処理する他の関数インスタンスのコードまたはライブラリを上書きしません。
脆弱性の修正とセキュリティ更新
ランタイム環境での脆弱性の修正とデータベースの更新中にユーザーの互換性が関係する場合、内部メッセージやショートメッセージなどの方法で事前に通知されます。カスタムランタイムとカスタムコンテナーイメージの場合、ランタイム環境のセキュリティを確保する必要があります。Java、C#、Go などのプログラミング言語を使用してコンパイルされたランタイム環境の場合、Function Compute SDK のセキュリティ脆弱性を修正するには、依存関係を更新し、コードを再コンパイルしてから、コードをアップロードする必要があります。
コミュニティとの複数バージョンのランタイム環境の一貫したサポート時間
コミュニティは、特定の期間、各ランタイム環境バージョンをサポートします。ランタイム環境バージョンがコミュニティでサポートされなくなった場合、Function Compute は、それに応じてランタイム環境バージョンがサポートされなくなる時期を発表します。サポートは、新しい関数の禁止、既存の関数の変更の禁止、関数の実行の禁止の順に徐々に停止します。Function Compute は、サポートされなくなったランタイム環境バージョンが期待どおりに使用できることを保証しません。