【Security Hub修復手順】[SageMaker.16] SageMaker モデルはプライマリコンテナの VPC のプライベートレジストリを使用する必要があります
こんにちは!スライマンです。
皆さん、お使いのAWS環境のセキュリティチェックはしていますか?
本記事では、AWS Security HubによるAWS環境のセキュリティ状況スコアリングに該当する項目についての修復手順をご紹介します。
本記事の対象コントロール
[SageMaker.16] SageMaker モデルはプライマリコンテナの VPC のプライベートレジストリを使用する必要があります
[SageMaker.16] SageMaker models should use private registry in VPC for primary containers
前提条件
本記事はAWS Security Hubで「AWS基礎セキュリティのベストプラクティススタンダード」を利用されている方向けの内容となります。
AWS Security Hubの詳細についてはこちらのブログをご覧ください。
対象コントロールの説明
このコントロールは、SageMaker AIモデルのプライマリコンテナが、VPC内のプライベートレジストリからコンテナイメージを取得する設定になっているかチェックします。
イメージ設定のリポジトリアクセスモード(RepositoryAccessMode)をVpcにすると、このコントロールは成功します。
イメージが設定されていない場合、またはリポジトリアクセスモードがPlatformの場合、このコントロールは失敗します。
SageMaker AIモデルのプライマリコンテナは、推論に使用するイメージの取得元をリポジトリアクセスモードで制御します。
Platformを指定するとSageMaker AIが管理する経路でイメージを取得し、Vpcを指定すると自身のVPC内に用意したプライベートレジストリからイメージを取得します。
特別な要件がない限り、リポジトリアクセスモードをVpcに設定し、VPC内のプライベートレジストリを利用してください。
イメージがVPCエンドポイント経由で取得され、パブリックインターネットを経由しないためです。
なお、プライベートレジストリはモデルに指定するVPCと同じVPCからアクセスできる必要があり、公的な認証局のTLS証明書で保護されている必要があります。
また、Amazon ECRはVpcモードに対応していません。
そのため、リポジトリアクセスモードをVpcに設定する場合は、ECRとは別にDocker Registry等のプライベートレジストリをVPC内に構築する必要があります。
パブリックな経路でコンテナイメージを取得する場合、信頼できないレジストリからの取得や、通信経路でのイメージ改ざんのリスクがあります。改ざんされたあるいは不正なイメージが推論コンテナとして起動されると、推論結果の汚染や、コンテナ内で扱うデータの窃取につながるおそれがあります。
VPC内のプライベートレジストリを利用することで、イメージの取得元を信頼できる範囲に限定し、通信をVPC内に閉じることができます。
改ざんされたあるいは不正なイメージの実行を防ぎ、コンテナが扱うデータを保護するため、対応が必須です。
なお、リポジトリアクセスモードはモデル作成時にのみ指定できる項目のため、既存モデルの設定を後から変更することはできません。
是正する場合はモデルの再作成が必要になります。
修復手順
コントロールの確認方法
- AWS Security Hub コンソールを開く
- 左メニューから「検出結果」を選択
- フィルターで
コンプライアンスセキュリティコントロールIDにSageMaker.16を指定し、コンプライアンスのステータスがFAILEDの検出結果を確認する

- 検出されたリソースを確認し、対応が必要なモデルを特定する

ステークホルダーに確認
修復を行う前に、以下の点をステークホルダーに確認してください。
- VPC内にアクセス可能なプライベートDockerレジストリを用意できるか(準備期間・運用コスト)
- プライベートレジストリが認証を必要とする場合、認証情報を提供するLambda関数を用意できるか
修復手順
モデルの設定は作成後に変更できないため、新しいモデルを作成する必要があります。
RepositoryAccessModeはSageMaker AIコンソールの「モデルの作成」画面からは指定できないパラメータのため、AWS CLIまたはAWS SDK(boto3等)を使用します。
① 既存のモデル設定を確認する
SageMakerコンソールからもモデルの確認は可能ですが、このコントロールがチェックするImageConfigの設定値は表示されません。そのため、AWS CLIで確認します。
aws sagemaker describe-model \
--model-name <モデル名> \
--region <リージョン>
PrimaryContainer.ImageConfigが存在しない、またはRepositoryAccessModeがPlatformになっていることが、コントロール違反の原因です。
あわせて、以下の設定値を確認しておきます(新しいモデルの作成時に必要です)。
- モデル名
- コンテナのイメージURI
- 環境変数
- ExecutionRoleArn
- VpcConfig(設定されている場合)
- タグ(設定されている場合)
② プライベートDockerレジストリを構築する
RepositoryAccessMode: Vpcを使用するには、VPC内にプライベートDockerレジストリを構築する必要があります。Amazon ECRはVpcモードに対応していないため、ECRとは別にDocker Registry等の自前のレジストリをVPC内に構築します。
プライベートDockerレジストリの構築手順は、公式ドキュメントを参照してください。
構築にあたっては、以下の要件を満たす必要があります。
- Docker Registry HTTP API V2に準拠したレジストリをVPC内にホストする
- レジストリを既知の認証局(CA)が発行したTLS証明書で保護する
- プライベートレジストリが認証を必要とする場合は、認証を行うLambda関数を作成する
- SageMakerモデルの実行ロールに、VPCリソースへのアクセス権限を付与する
③ ImageConfigを設定したモデルを作成する
プライベートレジストリにイメージを格納したら、ImageConfigにRepositoryAccessMode: Vpcを設定して、新しいモデルを作成します。
--vpc-configでプライベートレジストリと同じVPC内のサブネットとセキュリティグループを指定します。
指定するセキュリティグループは、プライベートレジストリへのインバウンド通信を許可している必要があります。
aws sagemaker create-model \
--model-name <新しいモデル名> \
--primary-container Image=<プライベートレジストリのイメージURI>,ImageConfig={RepositoryAccessMode=Vpc} \
--vpc-config SecurityGroupIds=<セキュリティグループID>,Subnets=<サブネットID1>,<サブネットID2> \
--execution-role-arn <実行ロールのARN> \
--region <リージョン>
- 認証情報を提供するLambda関数を使用する場合は、
ImageConfigにRepositoryAuthConfig={RepositoryCredentialsProviderArn=<Lambda関数のARN>}を追加してください。
④ エンドポイントの更新(該当する場合)
旧モデルを使用しているエンドポイントがある場合は、新しいモデルを参照するようにエンドポイント設定を更新します。
- 新しいモデルを参照するエンドポイント設定を作成する
aws sagemaker create-endpoint-config \
--endpoint-config-name <新しいエンドポイント設定名> \
--production-variants VariantName=<バリアント名>,ModelName=<新しいモデル名>,InitialInstanceCount=<インスタンス数>,InstanceType=<インスタンスタイプ> \
--region <リージョン>
- エンドポイントを新しいエンドポイント設定で更新する
aws sagemaker update-endpoint \
--endpoint-name <エンドポイント名> \
--endpoint-config-name <新しいエンドポイント設定名> \
--region <リージョン>
- 動作確認後、不要になった旧モデル・旧エンドポイント設定を削除する(任意)
aws sagemaker delete-endpoint-config --endpoint-config-name <旧エンドポイント設定名> --region <リージョン>
aws sagemaker delete-model --model-name <旧モデル名> --region <リージョン>
修復確認
本コントロールはモデルのリポジトリアクセスモード設定にて変更がトリガーされた際に評価されるため、モデル作成後に比較的早く結果が PASSED として表示されます。
設定自体の確認はモデルのリポジトリアクセスモードがVpcになっていることを確認します。
describe-modelでImageConfigを確認します。
aws sagemaker describe-model \
--model-name <新しいモデル名> \
--region <リージョン> \
--query 'PrimaryContainer.ImageConfig'
実行結果の例:
{
"RepositoryAccessMode": "Vpc",
"RepositoryAuthConfig": {}
}
PrimaryContainer.ImageConfig.RepositoryAccessModeがVpcになっていることを確認してください。
修復後、Security Hubで検出結果が「PASSED」になることを確認します。

最後に
今回は、AWS Security HubによるAWS環境のセキュリティ状況スコアリングに該当する項目についての修正手順をご紹介しました。
このコントロールへの対応には、VPC内にプライベートDockerレジストリを構築し、コンテナイメージをそのレジストリから取得する設定が必要です。Amazon ECRはRepositoryAccessMode: Vpcに対応していないため、ECRとは別にレジストリを用意する必要がある点にご注意ください。
なお、類似コントロールの[SageMaker.19]は、マルチコンテナ推論パイプラインに対する同様のチェックです。マルチコンテナ構成と単一コンテナ構成の両方を使用している場合は、あわせて対応をご検討ください。
コントロールを修正して、お使いのAWS環境のセキュリティをパワーアップさせましょう!
最後までお読みいただきありがとうございました!どなたかのお役に立てれば幸いです。
以上、スライマンでした!







