Function Compute は、すべてのユーザーからのリクエストおよび返却結果を Transport Layer Security (TLS) 1.2 以降を使用して暗号化します。内部サービス間の通信には独自プロトコルが使用され、情報漏洩や改ざんを防止します。
本トピックでは、データプレーンにおける Function Compute のセキュリティ保護機能について、アクセスサービス、スケジューリングサービス、コンピュートノード、実行環境の 4 つのレイヤーに分けて説明します。
責任の共有
Function Compute は、コンピュートノード、ネットワーク分離、実行環境、内部通信など基盤インフラストラクチャのセキュリティを確保します。お客様は、ご自身の関数コードのセキュリティ確保、Resource Access Management (RAM) を使ったアクセス権限の管理、およびセキュリティ要件に合わせたネットワークアクセスモードの設定について責任を負います。
アクセスサービスのセキュリティ
アクセスサービスは、データプレーン上で発生するすべての関数呼び出しを処理します。Server Load Balancer (SLB) を利用して、負荷分散およびネットワークセキュリティ保護を実現しています。
デフォルトでは、関数はインターネット経由でのみアクセス可能です。特定の仮想プライベートクラウド (VPC) からのみアクセスを許可するには、関数に対して VPC 専用アクセスを設定してください。インターネットアクセスと VPC アクセスは相互排他であり、同一関数が両方のアクセス方法を同時にサポートすることはありません。
Function Compute は以下の 3 種類の呼び出しタイプをサポートしています。
同期呼び出し:リクエスト - 応答モードを使用します。呼び出しリクエストの詳細はキャッシュされず、関数実行エラーによって失敗した呼び出しはシステムが再試行しません。
非同期呼び出し:Function Compute が呼び出しリクエストを受信すると、そのリクエストは Simple Message Queue (SMQ、旧称 MNS) にキャッシュされ、即座に応答が返されます。その後、Function Compute が非同期でリクエストを取得・処理します。各リクエストは少なくとも 1 回は処理されます。
異なるユーザーが使用する SMQ キューは、アカウントレベルまたはそれ以上のレベルで隔離されています。呼び出し量が多い関数については、関数レベルでの隔離も設定可能です。
関数実行エラーにより呼び出しが失敗した場合、Function Compute は最大 3 回まで再試行します。速度制限やシステムエラーなどの他のエラーが原因の場合は、バイナリ指数バックオフ方式で再試行されます。最大再試行回数およびメッセージの最大存続時間 (TTL) は設定可能です。
非同期呼び出しが完了した後、関数呼び出しイベントを保存したり、関数呼び出し結果をダウンストリームサービスにプッシュしたりするには、結果コールバック 機能を有効化してください。
非同期タスク:非同期呼び出しよりも高度なタスク制御および可観測性を提供します。ビジネス要件に基づいてタスクを終了できます。詳細については、「非同期タスク」をご参照ください。
スケジューリングサービスのセキュリティ
スケジューリングサービスは、コンピュートノードのライフサイクル、関数インスタンスのライフサイクル、および呼び出しのルーティングを管理します。
コンピュートノード
Function Compute は、コンピュートノードとして ECS Bare Metal Instances および ECS インスタンスを使用しています。どちらのタイプも動的移行をサポートしています。
各ユーザーには 50~600 vCPU および 100~1,200 GB のメモリが割り当てられます。プールされたリソースにより、最大で 300 のバースト可能 vCPU および 600 GB のバースト可能メモリが提供されます。プールが枯渇した場合、スケジューリングサービスは最大で毎分 360 vCPU 分のスケールアウトを行います。このレートを超えるリクエストは速度制限エラーをトリガーします。リージョンごとのアカウント単位の制限については、「各リージョンにおける単一アカウントのコンピュートノード制限」をご参照ください。
コンピュートノードの最大有効期間は 120 時間です。スケジューリングサービスがコンピュートノード上でエラーを検出した場合、有効期間が終了する前にノードは再構築されます。
関数インスタンス
関数インスタンスには、オンデマンド型とプロビジョニング型の 2 種類があります。
オンデマンドインスタンス:関数が呼び出された際に動的に作成され、アイドル時間が 5 分経過すると自動的に解放されます。
プロビジョニングインスタンス:アイドル状態でも自動的に解放されません。実際のインスタンス数は、お客様が設定したスケーリングポリシーに基づき、指定した最小値および最大値の範囲内で決定されます。
各ユーザーは最大で 300 のバースト可能関数インスタンスをサポートしています。この上限に達した場合、スケジューリングサービスは最大で毎分 300 インスタンスのスケールアウトを行います。このレートを超えると速度制限エラーがトリガーされます。バースト可能インスタンスの上限を引き上げるには、テクニカルサポート用の DingTalk グループ (ID 64970014484) にご参加ください。
関数インスタンスの最大有効期間は 36 時間です。以下のいずれかの条件が満たされた場合、インスタンスは再構築されます。
関数コードまたはインスタンス構成が変更された場合
関数実行がタイムアウトした場合
メモリ使用量が設定された上限を超えた場合
クライアントが関数実行を終了した場合
スケジューリングサービスが負荷分散のために再構築を開始した場合
ルーティング
スケジューリングサービスは、bin-pack アルゴリズムを使用して呼び出しをルーティングします。単一の関数インスタンスが複数の呼び出しリクエストを処理することがあり、同一クライアントからのリクエストが異なるインスタンスに振り分けられることもあります。そのため、呼び出し間でグローバル変数やファイル状態が共有される、あるいは隔離されていると仮定しないでください。
スケジューリングサービスは、お客様が設定した関数のタイムアウト期間を強制的に適用します。タイムアウトが発生すると、関数インスタンスは回収されます。
コンピュートノードのセキュリティ
Function Compute は、ECS Bare Metal Instances および ECS インスタンスの 2 種類のコンピュートノードを使用しており、ハードウェアから上位レイヤーまでの各層でセキュリティ機能を備えています。
Alibaba Cloud インフラストラクチャによる保護
Alibaba Cloud は、すべてのコンピュートノードに対して以下の保護機能を提供しています。詳細については、「Alibaba Cloud セキュリティホワイトペーパー」をご参照ください。
マルチゾーンディザスタリカバリ:リージョン内のコンピュートノードは複数のゾーンに分散配置されており、クロスゾーンフェイルオーバーをサポートしています。
隔離されたネットワーク環境:コンピュートノードは VPC 内で実行されます。他のユーザーがお客様のコンピュートノードに直接アクセスすることはできません。
脆弱性修正およびセキュリティ更新プログラム:Function Compute はコンピュートノードのパッチ適用および更新を自動的に行います。更新プロセスはお客様にとって透明です。
ユーザー単位および関数単位の隔離
仮想化ベースの隔離
ECS Bare Metal Instances は複数ユーザーの関数インスタンスをホストできます。Alibaba Cloud Sandboxed-Container により、各関数は隔離された VM 上で実行されます。一方、ECS インスタンスは同一ユーザーの関数インスタンスのみをホストし、ユーザー単位の隔離は仮想化を通じて実現されています。関数間の隔離は、runC などのコンテナ技術によって実現されています。
ネットワーク隔離
関数インスタンスにプライベート IP アドレスを設定することで、他のユーザーからの直接アクセスを防止できます。インスタンス間の隔離は Open vSwitch、iptables、およびルートテーブルを用いて実装されています。
各関数インスタンスのアウトバウンドネットワークアクセスは、以下のいずれかのモードで設定できます。
| モード | 説明 |
|---|---|
| インターネットのみ (デフォルト) | 関数インスタンスはインターネットにアクセス可能ですが、VPC にはアクセスできません。 |
| VPC のみ | 関数インスタンスは指定された VPC (例:ApsaraDB RDS、File Storage NAS、ECS インスタンス) にアクセス可能ですが、インターネットにはアクセスできません。 |
| インターネットおよび VPC | 関数インスタンスはインターネットおよび指定された VPC の両方にアクセス可能です。 |
| アクセスなし | 関数インスタンスはインターネットおよびすべての VPC にアクセスできません。 |
リソース制限
CPU 容量は、設定されたメモリサイズに比例して割り当てられます。コールドスタート時には、起動時間を短縮するために最大 20 秒間、追加の CPU リソースが割り当てられます。
| リソース | 標準インスタンス | パフォーマンスインスタンス |
|---|---|---|
| ファイルシステム容量 | 512 MB | 最大 10 GB |
| ネットワーク帯域幅 | 1 Gbit/s | 最大 5 Gbit/s |
アイドルインスタンスのフリーズ
関数インスタンスがリクエストを処理していない場合、インスタンスはフリーズされます。次のリクエストを処理する前に、インスタンスはアンフリーズされます。
トラブルシューティングのためのインスタンスログイン
認証済みユーザーは、オンライントラブルシューティングのために関数インスタンスにログインできます。
脆弱性修正およびセキュリティ更新プログラム
Function Compute は関数インスタンスのパッチ適用および更新を自動的に行います。更新プロセスはお客様にとって透明です。
実行環境のセキュリティ機能
一時的な認証情報
Function Compute は、関数を実行する RAM ロールの一時的な認証情報をリクエストします。これらの認証情報は環境変数を通じて実行環境に注入され、入力パラメーターとして関数コードに渡されます。これらの認証情報を使用して、関数コードから他の Alibaba Cloud サービスにアクセスできます。
関数実行エラーの収集
実行環境は、関数実行エラーおよびログを収集し、問題の診断を支援します。
ライフサイクルフック
実行環境は、Initializer フックおよび PreStop フックを提供し、お客様の要件に基づいてセキュリティ機能を拡張できます。
非永続ストレージ
実行環境のファイルシステムおよびメモリは、関数インスタンスが解放されると同時に解放されます。データはローカル記憶域に永続化されません。永続ストレージが必要な場合は、NAS または Object Storage Service (OSS) をご利用ください。
不変なコードおよびレイヤー
コードディレクトリ /code およびレイヤーディレクトリ /opt への変更は、現在の関数インスタンスにのみ適用されます。同じ関数の呼び出しを処理する他の関数インスタンスのコードやライブラリには影響しません。
脆弱性修正およびランタイムの更新
マネージドランタイムの場合、Function Compute が脆弱性パッチを自動的に適用します。ユーザーとの互換性に影響を与える変更がある場合は、事前にサイト内メッセージまたは SMS で通知されます。
カスタムランタイムおよびカスタムコンテナイメージの場合、ランタイム環境のセキュリティ確保はお客様の責任となります。
Java、C#、Go などの言語でコンパイルされたランタイムについては、依存関係を更新し、コードを再コンパイルして、更新されたパッケージをアップロードすることで SDK の脆弱性を修正してください。
ランタイムバージョンのライフサイクル
各ランタイムバージョンにはコミュニティサポート期間があります。バージョンがコミュニティサポート終了を迎えると、Function Compute はサポート終了のタイムラインを告知し、以下の順序でサポートを終了します。
新規関数ではそのランタイムバージョンを使用できなくなります。
既存の関数は変更できなくなります。
関数の実行が停止されます。
Function Compute は、サポート終了済みのランタイムバージョンが期待通りに動作することを保証しません。