【Security Hub修復手順】[SageMaker.10] SageMaker モデルの説明可能性ジョブ定義では、コンテナ間のトラフィック暗号化を有効にする必要があります
こんにちは!SREチームの乃万です。
皆さん、お使いのAWS環境のセキュリティチェックはしていますか?
本記事では、AWS Security HubによるAWS環境のセキュリティ状況スコアリングに該当する項目についての修復手順をご紹介します。
本記事の対象コントロール
[SageMaker.10] SageMaker モデルの説明可能性ジョブ定義では、コンテナ間のトラフィック暗号化を有効にする必要があります
[SageMaker.10] SageMaker model explainability job definitions should have inter-container traffic encryption enabled
前提条件
本記事はAWS Security Hubで「AWS基礎セキュリティのベストプラクティススタンダード」を利用されている方向けの内容となります。
AWS Security Hubの詳細についてはこちらのブログをご覧ください。
対象コントロールの説明
このコントロールは、SageMakerモデルの説明可能性ジョブ定義でコンテナ間のトラフィック暗号化が有効になっているかチェックします。MonitoringNetworkConfig の EnableInterContainerTrafficEncryption が true に設定されていると、コントロールはPASSEDになります。
SageMakerのモデル説明可能性モニタリング(Amazon SageMaker Clarify)は、MLモデルの予測にどの特徴量がどの程度影響しているかを分析する機能です。分散処理を行う場合、複数のMLコンピューティングインスタンス間でモデルデータや中間処理結果などのデータが送受信されます。
コンテナ間のトラフィックを暗号化しない場合、分散処理中に転送されるモデルパラメータや処理結果が傍受されるリスクがあります。本番環境の機密性の高いMLデータを保護するために、コンテナ間のトラフィック暗号化を有効にすることが必要です。
なお、本番以外の環境では、機密性の高いMLデータを扱わない場合は対応を必須としません。
修復手順
コントロールの確認方法
まず、Security Hubコンソールで対象リソースを確認します。
- AWS マネジメントコンソールにサインインし、Security Hubを開く
- 左メニューから「検出結果」を選択
- フィルターで「コントロールID」に
SageMaker.10を入力して検索

- FAILEDになっているリソースの「リソース」列からジョブ定義名を確認する

ステークホルダーに確認
修復を行う前に、以下の点をステークホルダーに確認してください。
- 対象のモデル説明可能性ジョブ定義を参照しているモニタリングスケジュールがあるか(ある場合、スケジュールも更新が必要)
- ジョブ定義の再作成による業務影響の有無(実行中のモニタリングジョブがないか)
修復手順
既存のジョブ定義はコンテナ間のトラフィック暗号化設定を後から変更できません。新しいジョブ定義を作成し、古いものを削除する手順で対応します。
この設定はマネジメントコンソールのGUIからは変更できないため、AWS CLIまたはSDKを使用します。
1. 既存ジョブ定義の設定を確認する
Security Hubの検出結果から対象のジョブ定義名を取得し、現在の設定を確認します。
# 対象のジョブ定義名を変数に設定する(Security Hubの検出結果から確認)
JOB_DEF_NAME="<ジョブ定義名>"
REGION="ap-northeast-1"
# 現在の設定を確認
aws sagemaker describe-model-explainability-job-definition \
--job-definition-name ${JOB_DEF_NAME} \
--region ${REGION}

2. 新しいジョブ定義を作成する(コンテナ間暗号化を有効化)
既存のジョブ定義と同じ設定で、EnableInterContainerTrafficEncryption を true にした新しいジョブ定義を作成します。既存のジョブ定義名に -encrypted などのサフィックスを付けて命名してください。
NEW_JOB_DEF_NAME="${JOB_DEF_NAME}-encrypted"
# 既存のジョブ定義の設定を取得して変数に格納
EXISTING=$(aws sagemaker describe-model-explainability-job-definition \
--job-definition-name ${JOB_DEF_NAME} \
--region ${REGION})
# 新しいジョブ定義を作成(既存の設定を引き継ぎ、暗号化を有効化)
aws sagemaker create-model-explainability-job-definition \
--job-definition-name ${NEW_JOB_DEF_NAME} \
--model-explainability-app-specification "$(echo ${EXISTING} | jq -r '.ModelExplainabilityAppSpecification | {ImageUri, ConfigUri} | to_entries | map("\(.key)=\(.value)") | join(",")')" \
--model-explainability-job-input "$(echo ${EXISTING} | jq -c '.ModelExplainabilityJobInput')" \
--model-explainability-job-output-config "$(echo ${EXISTING} | jq -c '.ModelExplainabilityJobOutputConfig')" \
--job-resources "$(echo ${EXISTING} | jq -c '.JobResources')" \
--role-arn "$(echo ${EXISTING} | jq -r '.RoleArn')" \
--network-config '{"EnableInterContainerTrafficEncryption": true}' \
--region ${REGION}
注意: jq コマンドが必要です。インストールされていない場合は brew install jq(macOS)または sudo apt install jq(Linux)でインストールしてください。

3. モニタリングスケジュールがある場合は更新する
対象のジョブ定義を参照しているモニタリングスケジュールがある場合、新しいジョブ定義名で更新します。
SCHEDULE_NAME="<モニタリングスケジュール名>"
aws sagemaker update-monitoring-schedule \
--monitoring-schedule-name ${SCHEDULE_NAME} \
--monitoring-schedule-config \
"MonitoringJobDefinitionName=${NEW_JOB_DEF_NAME},MonitoringType=ModelExplainability" \
--region ${REGION}
モニタリングスケジュールがない場合はこの手順はスキップしてください。
4. 古いジョブ定義を削除する
新しいジョブ定義が正常に作成されたことを確認してから、古いジョブ定義を削除します。
aws sagemaker delete-model-explainability-job-definition \
--job-definition-name ${JOB_DEF_NAME} \
--region ${REGION}
修復確認
修復後、Security Hubで検出結果が「PASSED」になることを確認します。
Security Hubのコントロール評価は変更トリガー型(Change triggered)のため、ジョブ定義の再作成後に数分で結果が更新されます。
- Security Hubコンソールの「検出結果」で
SageMaker.10を再検索する - 修復したリソースのステータスが「PASSED」に変わったことを確認する

最後に
今回は、AWS Security HubによるAWS環境のセキュリティ状況スコアリングに該当する項目についての修正手順をご紹介しました。
コントロールを修正して、お使いのAWS環境のセキュリティをパワーアップさせましょう!
最後までお読みいただきありがとうございました!どなたかのお役に立てれば幸いです。
以上、乃万でした!







