【Security Hub修復手順】[SageMaker.17] SageMaker 特徴量グループのオフラインストアは AWS KMS キーで暗号化する必要があります
こんにちは、クラウド事業統括本部コンサルティング部の村瀬です。
皆さん、お使いの AWS 環境のセキュリティチェックはしていますか?
本記事では、AWS Security Hub による AWS 環境のセキュリティ状況スコアリングに該当する項目についての修復手順をご紹介します。
本記事の対象コントロール
[SageMaker.17] SageMaker 特徴量グループのオフラインストアは AWS KMS キーで暗号化する必要があります
[SageMaker.17] SageMaker feature group offline stores should be encrypted with AWS KMS keys
前提条件
本記事は AWS Security Hub で「AWS 基礎セキュリティのベストプラクティススタンダード」を利用されている方向けの内容となります。
AWS Security Hub の詳細についてはこちらのブログをご覧ください。
対象コントロールの説明
このコントロールは、SageMaker 特徴量グループ(Feature Group)のオフラインストアが、AWS KMS キーで保管時に暗号化されているかチェックします。
オフラインストアの S3 ストレージに KMS キーが指定されていない場合、このコントロールは失敗します。
オフラインストアは、モデルの学習やバッチ推論に使用する特徴量の履歴データを Amazon S3 に蓄積するストアです。
特徴量グループの作成時に KMS キーを指定しなかった場合も、データは AWS マネージドキーによって暗号化されます。
ただし、このコントロールを成功させるには、作成時にカスタマーマネージドキーの ARN を明示的に指定する必要があります。
カスタマーマネージドキーを指定しない場合、次の 3 点ができません。
- キーポリシーによる、オフラインストアのデータへのアクセス制御
- AWS CloudTrail による、キーの使用状況の監査
- キーの無効化による、データへのアクセス遮断
オフラインストアには学習データとして再利用される特徴量が長期間蓄積されます。
そのため、S3 バケットのポリシー設定ミスや IAM 権限の過剰付与によってデータが読み取られた場合、キーによる制御ができず情報漏洩に直結します。
なお、KMS キーはオンラインストアとオフラインストアで個別に指定できるため、データの機密度に応じてキーを使い分けられます。
重要な制約
オフラインストアの暗号化キーは、特徴量グループの作成時にのみ指定できます。
作成後に変更できるのはスループットモード、Time to Live(TTL)、特徴量定義のみで、暗号化キーは変更できません[1]。
したがって本コントロールの修復は、カスタマーマネージドキーを指定した特徴量グループの再作成となります。
コントロールの確認方法
-
AWS Security Hub コンソールを開く
-
左メニューから「検出結果」を選択

-
フィルターで対象のコントロール ID「SageMaker.17」を検索

検出結果を選択し、「リソース」タブで対象の特徴量グループ名を確認します。

現在の設定の確認
対象の特徴量グループに KMS キーが指定されているかを確認します。
暗号化キーは Amazon SageMaker Studio の詳細画面に表示されないため、AWS CLI を使用します。
aws sagemaker describe-feature-group \
--feature-group-name sagemaker-sh-test-17-fg \
--query 'OfflineStoreConfig.S3StorageConfig'
{
"S3Uri": "s3://sagemaker-sh-test-17-******-ap-northeast-1/offline",
"ResolvedOutputS3Uri": "s3://sagemaker-sh-test-17-******-ap-northeast-1/offline/******/sagemaker/ap-northeast-1/offline-store/sagemaker-sh-test-17-fg-1785303696/data"
}
KmsKeyId が出力されない場合、カスタマーマネージドキーが未指定の状態です。
ステークホルダーに確認
再作成が必要な修復のため、事前に以下の点をステークホルダーに確認してください。
- 対象の特徴量グループを利用している学習ジョブ、バッチ推論、特徴量取り込み処理の停止可否と停止可能な時間帯
- 既存のオフラインストアに蓄積されたデータを新しい特徴量グループへ再取り込みする必要があるか
- 特徴量グループ名を引き継ぐか、新しい名前で作成するか
- カスタマーマネージドキーの月額料金と API リクエスト料金の追加が許容できるか
- 既存のカスタマーマネージドキーを流用するか、この用途のために新規作成するか
修復手順
手順 1: カスタマーマネージドキーの準備
暗号化に使用するカスタマーマネージドキーを準備します。
新規にキーを作成する場合と、既存のキーを流用する場合で作業が異なります。どちらか一方を実施してください。
新規にキーを作成する場合
-
AWS KMS コンソールを開く
-
「カスタマー管理型のキー」を選択し、「キーの作成」を選択
-
「キーのタイプ」で「対称」、「キーの使用法」で「暗号化および復号化」を選択

SageMaker Feature Store は対称キーのみをサポートするため、非対称キーは指定できません[2]。
-
「エイリアス」と「説明」を入力

エイリアス、説明、タグは AWS CloudTrail ログに平文で出力されるため、機密情報は入力しないでください。
-
「キーの管理アクセス許可を定義」の「キー管理者」で、キーを運用管理する IAM ロールを選択
「キー管理者」はキーポリシーの編集やキーの削除を行うロールで、暗号化・復号の権限とは別です。
通常は、コンソールを操作している IAM ロール(管理者ロール)を選択してください。 -
「キーの使用法アクセス許可を定義」の「キーユーザー」で、特徴量グループに渡す IAM ロールを選択

ここで選択した IAM ロールには、キーポリシーの
Allow use of the keyステートメントとして次の権限が自動で付与されます。kms:Encryptkms:Decryptkms:ReEncrypt*kms:GenerateDataKey*kms:DescribeKey
オフラインストアの暗号化に必要な
kms:GenerateDataKeyはここに含まれるため、キーポリシーを手動で編集する必要はありません。 -
キーポリシーと設定内容を確認して「完了」を選択

-
作成したキーの ARN を控える

既存のキーを流用する場合
既存のカスタマーマネージドキーを使う場合は、キーポリシーを編集します。
CreateFeatureGroup に渡す IAM ロールに、オフラインストアの KMS キーに対する kms:GenerateDataKey 権限が必要です。
-
AWS KMS コンソールで対象のキーを選択
-
「キーポリシー」で「ポリシービューへの切り替え」を選択し、「編集」を選択

-
特徴量グループに指定する IAM ロールを
Principalとして、kms:GenerateDataKeyを許可するステートメントを追加
キーポリシーに追加するステートメント{ "Sid": "AllowFeatureStoreRoleToGenerateDataKey", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/<特徴量グループに指定するIAMロール名>" }, "Action": "kms:GenerateDataKey", "Resource": "*" }オンラインストアと同じキーを共用する場合、キーポリシーに
kms:ViaService条件を指定しないでください。
kms:ViaService条件はオンラインストア専用であり、オンラインストアとオフラインストアで同じキーを使うとCreateFeatureGroupが失敗します[3]。
手順 2: KMS リクエストコストの抑制(推奨)
オフラインストアの S3 バケットで S3 バケットキーを有効化すると、KMS リクエストコストを最大 99% 削減できます[4]。
特徴量グループでバケットを使用する前に有効化してください。
-
Amazon S3 コンソールでオフラインストア用のバケットを開く
-
「プロパティ」タブの「デフォルトの暗号化」で「編集」を選択
-
「バケットキー」を「有効にする」に設定し、「変更の保存」を選択

手順 3: 特徴量グループの再作成
カスタマーマネージドキーを指定して特徴量グループを作成します。
-
Amazon SageMaker AI コンソールから Amazon SageMaker Studio を起動し、左のナビゲーションペインから「Feature Store」を選択

-
「Create feature group」を選択
-
「Feature group details」の「Feature group name」に特徴量グループ名を入力

-
「Feature group storage configuration」の「Store configuration」で「Offline storage」を選択
-
「S3 bucket url」にオフラインストアの保存先を入力し、「Table format」を選択
-
「IAM role ARN」で、キーの使用権限を付与した IAM ロールを選択

ここで指定するのは、SageMaker がオフラインストアの S3 バケットへ書き込むときに引き受けるロールです。
信頼ポリシーに sagemaker.amazonaws.com を設定し、S3 への書き込み権限を付与したロールを選択してください。
-
「Offline store encryption key」で「Enter a KMS key ARN」を選択し、「Offline store encryption key ARN」に手順 1 のキー ARN を入力

ここで「Use AWS managed KMS key (default)」を選択すると、
KmsKeyIdが指定されないため本コントロールは失敗したままになります。 -
「Continue」を選択し、「Specify feature definitions」で既存の特徴量グループと同じ「Feature name」と「Feature type」を入力

-
「Select required features」で「Record identifier feature name」と「Event time feature name」を選択

-
「Add feature group tags」でタグを必要に応じて設定し、「Review feature group」で内容を確認して「Create feature group」を選択

作成後、AWS CLI で暗号化キーが反映されていることを確認します。
aws sagemaker describe-feature-group \
--feature-group-name sagemaker-sh-test-17-fg-encrypted \
--query 'OfflineStoreConfig.S3StorageConfig'
{
"S3Uri": "s3://sagemaker-sh-test-17-******-ap-northeast-1/offline/",
"KmsKeyId": "arn:aws:kms:ap-northeast-1:******:key/b89caa6e-acf0-460b-befb-b5f4fdf8f81e",
"ResolvedOutputS3Uri": "s3://sagemaker-sh-test-17-******-ap-northeast-1/offline/******/sagemaker/ap-northeast-1/offline-store/sagemaker-sh-test-17-fg-encrypted-1786348365/data"
}
KmsKeyId に指定した KMS キーの ARN が出力されれば設定完了です。
手順 4: 旧特徴量グループの削除
新旧の特徴量グループは同じ S3 バケットを使っていても、書き込み先のディレクトリが異なります。
そのため、旧データは新しい特徴量グループからは参照されません。
過去の特徴量を引き続き利用する場合は、旧特徴量グループを削除する前に、Amazon Athena で旧データを取得し、BatchWriteRecord で新しい特徴量グループへ取り込んでください。
取り込みが不要な場合は、そのまま削除して問題ありません。
-
Amazon SageMaker Studio の「Feature Store」で、「Feature Group Catalog」タブから旧特徴量グループを選択

-
「Delete feature group」を選択

削除時の注意点は以下の通りです[5]。
- 特徴量グループを削除しても、オフラインストアの S3 データは削除されません
- オフラインストア用に自動作成された AWS Glue データベースとテーブルも削除されません
- 旧オフラインストアの S3 データが不要な場合は、S3 コンソールから個別に削除してください
- 残った旧データは AWS マネージドキーで暗号化されたままです。過去データもカスタマーマネージドキーで保護する場合は、取り込み直したうえで削除してください
修復確認
修復後、AWS Security Hub で検出結果が「PASSED」になることを確認します。

本コントロールの AWS Config ルールは変更をトリガーとするため、検出結果の更新まで時間がかかる場合があります[6]。
最後に
今回は、AWS Security Hub による AWS 環境のセキュリティ状況スコアリングに該当する項目についての修復手順をご紹介しました。
コントロールを修復して、お使いの AWS 環境のセキュリティをパワーアップさせましょう!
参考リンク
- [SageMaker.17] SageMaker 特徴量グループのオフラインストアは AWS KMS キーで暗号化する必要があります - AWS Security Hub
- sagemaker-featuregroup-encryption-at-rest - AWS Config
- セキュリティとアクセスコントロール - Amazon SageMaker AI
- コンソールでの Amazon SageMaker 特徴量ストアの使用 - Amazon SageMaker AI
- オフラインストア - Amazon SageMaker AI
- Amazon S3 バケットキーを使用した SSE-KMS のコストの削減 - Amazon S3
- DeleteFeatureGroup - Amazon SageMaker AI API リファレンス






