SageMakerノートブックインスタンスにおけるCMKによる暗号化について

このブログシリーズ 「クラウドセキュリティ 実践集」 では、一般的なセキュリティ課題を取り上げ、「なぜ危険なのか?」 というリスクの解説から、「どうやって直すのか?」 という具体的な修復手順(コンソール、AWS CLI、Terraformなど)まで、分かりやすく解説します。
今回は、Amazon SageMakerノートブックインスタンスで、保存データの暗号化について、そのリスクと対策を解説します。

リスク
Amazon SageMakerは、機械学習モデルの開発、トレーニング、デプロイを支援するフルマネージドサービスです。SageMakerノートブックインスタンスは、Jupyterノートブック環境を提供し、データ分析やモデル開発に利用されます。SageMakerは、ノートブックインスタンスのEBSボリューム上のデータを、デフォルトでAWSが所有する暗号化キーを使用して暗号化します。コンプライアンスの基準に応じてCMKを利用するようにしましょう。
修復方法
SageMakerノートブックインスタンスをカスタマー管理キーで暗号化する方法は、AWSコンソールまたはTerraformで行えます。この設定は、インスタンスの作成時のみに行うことができます。既存のインスタンスの暗号化キーを変更することはできません。
AWSコンソールでの修復手順
AWSコンソールを使用して、新しいSageMakerノートブックインスタンスを作成する際にカスタマー管理キーを指定します。
- SageMakerサービスへ移動: AWSコンソールにログインし、Amazon SageMaker サービスを開きます。
- ノートブックインスタンスへ移動: 左側のナビゲーションペインで「ノートブック」の下の「ノートブックインスタンス」を選択します。
- インスタンスの作成:
- 「ノートブックインスタンスの作成」をクリックします。
- 「アクセス許可と暗号化」の設定:
- ドロップダウンメニューから、使用したいKMSカスタマー管理キーを選択します。注: 選択肢に表示されない場合は、事前にKMSサービスで新しいキーを作成しておく必要があります。

- インスタンスの作成:
- 変更内容を確認し、「ノートブックインスタンスの作成」をクリックして、設定を保存します。
これで、新しく作成されるノートブックインスタンスのEBSボリュームは、指定されたCMKで暗号化され、より強力なセキュリティが確保されます。
Terraformでの修復手順
TerraformでSageMakerノートブックインスタンスをカスタマー管理キーで暗号化するには、aws_sagemaker_notebook_instance
リソースの kms_key_id
パラメータを使用します。
# 1. KMSカスタマー管理キー(CMK)を作成
resource "aws_kms_key" "my_sagemaker_key" {
description = "KMS key for SageMaker notebook encryption"
deletion_window_in_days = 10
policy = jsonencode({
Version = "2012-10-17"
Statement = [
{
Sid = "Enable IAM User Permissions",
Effect = "Allow",
Principal = {
AWS = "arn:aws:iam::${data.aws_caller_identity.current.account_id}:root"
},
Action = "kms:*",
Resource = "*"
},
{
Sid = "Allow SageMaker to use the key",
Effect = "Allow",
Principal = {
Service = "sagemaker.amazonaws.com"
},
Action = [
"kms:Encrypt",
"kms:Decrypt",
"kms:ReEncrypt*",
"kms:GenerateDataKey*",
"kms:DescribeKey"
],
Resource = "*"
}
]
})
}
# 2. SageMakerノートブックインスタンスを作成し、CMKを指定
resource "aws_sagemaker_notebook_instance" "my_secure_notebook" {
name = "my-secure-notebook"
role_arn = aws_iam_role.sagemaker_execution_role.arn
instance_type = "ml.t3.medium"
# **重要: 作成したKMSキーのARNを指定**
kms_key_id = aws_kms_key.my_sagemaker_key.arn
tags = {
Name = "MySageMakerNotebook"
Environment = "Dev"
}
}
# (関連リソースの例)
resource "aws_iam_role" "sagemaker_execution_role" {
name = "sagemaker-execution-role"
assume_role_policy = jsonencode({
Version = "2012-10-17",
Statement = [
{
Effect = "Allow",
Principal = {
Service = "sagemaker.amazonaws.com"
},
Action = "sts:AssumeRole"
}
]
})
}
上記のTerraformコードでは、まずaws_kms_key
リソースでCMKを作成し、そのキーポリシーでSageMakerサービスにキーの使用を許可しています。次に、aws_sagemaker_notebook_instance
リソースのkms_key_id
パラメータに、作成したCMKのARNを指定することで、EBSボリュームの暗号化に使用するキーをCMKに設定しています。
terraform apply
を実行すると、指定されたCMKで暗号化された、セキュアなノートブックインスタンスがプロビジョニングされます。
最後に
この記事では、SageMakerノートブックインスタンスのデータをカスタマー管理キーで暗号化することの重要性について解説しました。この設定は、データの機密性を高め、キーのライフサイクルを完全に制御し、コンプライアンス要件を満たすために不可欠です。 貴社のSageMakerノートブックインスタンスは、より安全なカスタマー管理キーで暗号化されていますか?この機会にぜひ設定を確認・強化してみてください。 こちらの内容の検出は弊社が提供するSecurifyのCSPM機能で簡単に検出及び管理する事が可能です。運用が非常にラクに出来る製品になっていますのでぜひ興味がある方はお問い合わせお待ちしております。
最後までお読みいただきありがとうございました。この記事が皆さんの役に立てば幸いです。