金融リスク管理やヘルスケア業界など、機密コンピューティングが要求されるシナリオでは、Cloud API Adaptor (CAA) (Peer pods とも呼ばれる) を使用して、Intel® Trust Domain Extensions (TDX) 上に構築された機密コンピューティング環境にワークロードをデプロイできます。これにより、クラウドサービスプロバイダーが提供するサービスにおける外部攻撃や潜在的なリスクから機密データを保護し、ワークロードが業界のコンプライアンス要件を満たすことを可能にします。
Intel® TDX は、Elastic Compute Service (ECS) が機密コンピューティングを保護するために使用する CPU ハードウェアベースのセキュリティ技術です。詳細については、「TDX の概要」をご参照ください。
機能概要
CAA は、Cloud Native Computing Foundation (CNCF) のプロジェクトである Confidential Containers の主要コンポーネントです。CAA は、クラウドプラットフォーム上の API 操作を呼び出して機密 VM を自動的に作成することにより、機密コンピューティングと Kubernetes を統合できます。機密 VM はワークロードのサンドボックスとして機能し、ハードウェアベースの信頼できる実行環境 (TEE) を提供して、ワークロードのランタイムデータセキュリティを強化します。この CAA ベースのソリューションには、以下の利点があります。
使いやすさ:CAA を使用すると、基盤となるベアメタルサーバーや入れ子になった仮想化スタックを維持する必要がなくなります。Container Service for Kubernetes (ACK) クラスターに CAA をデプロイした後、kubectl を使用して機密ワークロードをデプロイできます。
セキュリティと機密性:CAA を使用すると、ハードウェアベースのメモリ暗号化と隔離メカニズム上に構築された ECS 機密 VM 上でワークロードを実行でき、ランタイムデータの整合性と機密性を確保します。
コミュニティとの互換性:ACK は Confidential Containers コミュニティと連携して、機密ワークロードのデプロイをサポートしています。さらに、ACK はコードの透明性を確保し、コミュニティによる継続的な監査を可能にしています。
CAA は ACK クラスターに DaemonSet としてデプロイできます。その後、クラスターに機密ワークロードをデプロイできます。機密ワークロードは、機密 VM 上にデプロイされた Pod で実行されます。これにより、Pod のライフサイクル全体を通じてワークロードのランタイムデータセキュリティが確保され、ワークロードが外部攻撃から保護されます。以下の図は、CAA ベースのソリューションのアーキテクチャを示しています。
事前準備
TDX 機密コンピューティングには特定の制限事項があります。TDX 機密コンピューティングを使用する前に、これらの制限事項を理解していることを確認してください。
ACK マネージド Pro 版クラスターが作成されていること。クラスターは以下の要件を満たす必要があります。詳細については、「ACK マネージドクラスターの作成」をご参照ください。
パラメーター
説明
リージョンとゾーン
中国 (北京) リージョンのゾーン I とシンガポールリージョンのゾーン B のみがサポートされています。
vSwitch を作成するには、「vSwitch の作成と管理」をご参照ください。
Kubernetes バージョン
バージョン 1.34 のみがサポートされています。
ACK クラスターをアップグレードするには、「クラスターの手動アップグレード」をご参照ください。
ネットワークプラグイン
Flannel を選択します。
VPC の SNAT を設定
このチェックボックスをオンにします。この機能により、クラスターはインターネットにアクセスできるようになります。
この機能は、既存の ACK クラスターに対しても有効にできます。詳細については、「既存の ACK クラスターがインターネットにアクセスできるようにする」をご参照ください。
RRSA OIDC
有効化を選択します。RAM Roles for Service Accounts (RRSA) 機能を使用すると、特定の OSS ボリュームに対する API 操作を実行する権限を制限できます。これにより、クラウドリソースへのアクセスを詳細に制御し、クラスターのセキュリティを強化できます。
この機能は、既存の ACK クラスターに対しても有効にできます。詳細については、「RRSA を使用して異なる Pod が異なるクラウドサービスにアクセスすることを承認する」をご参照ください。
この機能を有効にした後、「URL と ARN 情報の取得」を参照して、認証用の OpenID Connect (OIDC) プロバイダーの Alibaba Cloud Resource Name (ARN) を取得します。
ステップ 1:RRSA の設定
CAA が機密 VM を管理および設定できるようにするには、CAA に ID (RAM ロール) を割り当て、必要な権限 (RAM ポリシー) を付与する必要があります。このセクションでは、Cloud API Adaptor が使用するサービスアカウントに、ECS インスタンスと Virtual Private Cloud (VPC) を管理する権限を付与する方法について説明します。これには、Pod 固有の権限制御が必要です。
1. RAM ロールの作成
「信頼できる IdP の RAM ロールの作成」を参照して、RAM ロールを作成します。この例では、RAM ロールの名前は ack-caa-demo です。以下の表に、RAM ロールの主要なパラメーターを示します。
パラメーター | 説明 |
ID プロバイダータイプ | OIDC を選択します。 |
ID プロバイダー | ack-rrsa-<CLUSTER_ID> を選択します。<CLUSTER_ID> は、ご利用のクラスターの ID を示します。 |
条件 |
|
ロール名 | ロール名を ack-caa-demo に設定します。 |
ロールを作成した後、ロールの詳細ページに移動し、基本情報セクションでロールの ARN を記録して認証に使用します。
2. RAM ポリシーの作成
以下のスクリプトを使用して、ECS と VPC へのアクセス権限を提供する
ack-caa-policyポリシーを作成します。詳細については、「カスタムポリシーの作成」をご参照ください。{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "ecs:RunInstances", "ecs:DeleteInstance", "ecs:DescribeInstanceAttribute", "ecs:CreateNetworkInterface", "ecs:DeleteNetworkInterface", "ecs:AttachNetworkInterface", "ecs:ModifyNetworkInterfaceAttribute", "ecs:DescribeNetworkInterfaceAttribute" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "vpc:DescribeVSwitchAttributes", "vpc:AllocateEipAddress", "vpc:ReleaseEipAddress", "vpc:AssociateEipAddress", "vpc:UnassociateEipAddress", "vpc:DescribeEipAddresses" ], "Resource": "*" } ] }作成した RAM ロールに
ack-caa-policyポリシーをアタッチします。詳細については、「RAM ロールへの権限付与」をご参照ください。
ステップ 2:ノードプールの作成とセキュリティグループルールの設定
CAA コントローラーをデプロイするために使用するノードプールを作成します。CAA が使用するポートを開くために、ノードプールのセキュリティグループルールを設定します。
ACK コンソールにログインします。左側のナビゲーションウィンドウで、クラスターをクリックします。
クラスターページで、管理するクラスターを見つけてその名前をクリックします。左側のナビゲーションウィンドウで、を選択します。
ノードプールの作成をクリックし、画面の指示に従ってノードプールの設定を完了します。
以下の表では、主要なパラメーターのみを説明しています。ノードプールのパラメーターの詳細については、「ノードプールの作成と管理」をご参照ください。
パラメーター
説明
マネージドノードプールの設定
無効化を選択します。
vSwitch
サポートされているゾーン下の vSwitch を選択します。ゾーン I のノードがノードプールに追加されます。
オペレーティングシステム
Ubuntu 22.04 64 ビットを選択します。
ノード数 (期待値)
ノードプールの初期ノード数です。少なくとも 1 つのノードを指定する必要があります。
詳細オプション (任意) を展開して、詳細設定を行います。
ノードラベル
CAA コントローラーのスケジューリングを容易にするために、以下のラベルを追加します。
キーを
node.kubernetes.io/workerに設定します。値は空のままにします。
ノードプールページに移動し、作成したノードプールの名前をクリックします。ノードプールの詳細ページで、概要タブをクリックします。ノードプール情報セクションで、セキュリティグループ ID をクリックしてセキュリティグループの詳細ページに移動します。
インバウンドタブで、ルールの追加をクリックして以下のルールを追加します。
プロトコル
ソース
宛先
説明
カスタム TCP
現在の VPC CIDR ブロック
15150
CAA コンポーネントが機密 VM と通信できるようにします。
カスタム UDP
現在の VPC CIDR ブロック
4789
Virtual Extensible Local Area Network (VXLAN) に基づくネットワーク管理を有効にします。
ステップ 3:CAA のデプロイ
以下の主要コンポーネントをデプロイします:
Confidential Containers (CoCo) Operator:このコンポーネントは、機密コンテナーが実行されるランタイム環境を自動的にデプロイおよび管理します。例えば、Kata Containers のリモートランタイムは Kata Remote Runtime です。
CAA DaemonSet:CAA は DaemonSet としてノードにデプロイされます。このコンポーネントは、クラスター内の Pod スケジューリング要件に基づいて、Pod のランタイムノードとして機密 VM を動的に作成します。
1. CoCo Operator のインストール
次のコマンドを実行して CoCo Operator をインストールします:
2. CAA DaemonSet のデプロイ
プロジェクトのソースコードをダウンロードします。
git clone https://github.com/confidential-containers/cloud-api-adaptor.git -b v0.17.0 cd cloud-api-adaptorsrc/cloud-api-adaptor/install/overlays/alibabacloud/kustomization.yamlの設定を変更します。パラメーター
説明
newTagCAA DaemonSet のコンテナイメージのバージョンタグです。この値を
v0.17.0-alibaba-alpha0に変更します。SECURITY_GROUP_IDSセキュリティグループ ID です。ステップ 2 で作成したノードプールのセキュリティグループ ID に設定します。
VSWITCH_IDvSwitch ID です。ステップ 2 で作成したノードプールが使用する vSwitch の ID に設定します。
IMAGEIDノードプール内のインスタンスを起動するために使用される VM イメージの ID です。
中国 (北京):この値を
m-2zef6zaa0j0qz3sunhjpに変更します。シンガポール:この値を
m-t4n9ocuen5sy6rhbxbk1に変更します。
src/cloud-api-adaptor/install/overlays/alibabacloud/alibabacloud-cred.envファイルを作成して認証情報を設定します。以下のコードはファイルの内容を示しています:<role_arn>を RAM ロールの ARN に、<provider_arn>を RRSA OIDC プロバイダーの ARN に置き換えます。ALIBABA_CLOUD_ROLE_ARN=<role_arn> ALIBABA_CLOUD_OIDC_PROVIDER_ARN=<provider_arn> ALIBABA_CLOUD_OIDC_TOKEN_FILE=/var/run/secrets/ack.alibabacloud.com/rrsa-tokens/tokenCAA ワークロードをデプロイします。
kubectl apply -k src/cloud-api-adaptor/install/overlays/alibabacloud3 分待ってから、デプロイの進捗を確認します。
kubectl -n confidential-containers-system get pod期待される出力:
NAME READY STATUS RESTARTS AGE cc-operator-controller-manager-5d79465b47-d8s2k 1/1 Running 0 2m11s cc-operator-daemon-install-trlvt 1/1 Running 0 108s cc-operator-pre-install-daemon-qpvzw 1/1 Running 0 117s cloud-api-adaptor-daemonset-46spp 1/1 Running 0 92s出力に
cc-operator-*とcloud-api-adaptor-daemonset-*が表示され、それらがRunning状態であれば、CAA ワークロードはデプロイされています。
ステップ 4:アプリケーションのデプロイ
以下の操作を実行してアプリケーションをデプロイします。アプリケーションの設定では、runtimeClassName: kata-remote の設定で機密コンテナーランタイムを指定します。Pod がスケジュールされると、Kata Remote は CAA をトリガーして TDX 機密 VM を動的に作成します。
クラスターを削除する前に、CAA によって作成された機密 VM リソースが残らないように、runtimeClassName: kata-remote を持つすべてのワークロードが削除されていることを確認してください。
以下の YAML テンプレートを使用して、機密コンテナーランタイムを使用する Pod を作成するための pod-caa-demo.yaml ファイルを作成します。
apiVersion: v1 kind: Pod metadata: name: pod-caa-demo spec: runtimeClassName: kata-remote containers: - image: alibaba-cloud-linux-3-registry.cn-hangzhou.cr.aliyuncs.com/alinux3/alinux3:latest name: hello command: - sh - -c - 'echo hello && sleep infinity'pod-caa-demo.yaml ファイルをデプロイします。
kubectl apply -f pod-caa-demo.yaml3 分待ってから、デプロイの進捗を確認します。
kubectl get pod pod-caa-demo期待される出力:
NAME READY STATUS RESTARTS AGE pod-caa-demo 1/1 Running 0 52sECS コンソールにログインします。左側のナビゲーションウィンドウで、インスタンスをクリックします。
podvm-で始まる名前の TDX 機密 VM が表示されている場合、CAA はアプリケーションの基盤となるコンピューティングリソースを作成しています。
よくある質問
kubectl -n confidential-containers-system get pod を実行した後、cc-operator-controller-manager Pod のみが実行中になるのはなぜですか?
考えられる原因
ワーカーノードに必要なラベルが欠落している可能性があります。これらのラベルがないと、Kubernetes スケジューラは関連する Pod をノードに配置できず、Pod は Pending 状態のままになり、すぐには表示されません。
解決策
ワーカーノードの現在のラベルを検査します。
kubectl get nodes --show-labels対象のノードに必要なラベルを追加します。
for NODE_NAME in $(kubectl get nodes -o jsonpath='{.items[*].metadata.name}'); do kubectl label node $NODE_NAME node.kubernetes.io/worker= doneスケジューラが Pod を配置するまで 1〜2 分待ってから、再度ステータスを確認します。
kubectl -n confidential-containers-system get pod
関連ドキュメント
お問い合わせ
ACK に関するご質問やご提案がございましたら、DingTalk グループ 30521601 にご参加の上、お問い合わせください。