More Info:
Sagemaker output and storage data encrypted with KMS Customer Managed KeysRisk Level
MediumAddress
SecurityCompliance Standards
- APRA CPS 234 (Australia)
- BSI C5 (Germany)
- Brazil LGPD
- CCPA / CPRA (California)
- CIS Critical Security Controls v8
- CMMC 2.0
- CSA Cloud Controls Matrix v4
- DPDPA
- Digital Operational Resilience Act (EU)
- ISO 27001
- ISO/IEC 27018
- ISO/IEC 27701
- MAS Technology Risk Management (Singapore)
- MITRE ATT&CK (Cloud)
- NIST SP 800-171
- NYDFS 23 NYCRR 500
- SOC2
- SWIFT Customer Security Controls Framework
- Sarbanes-Oxley IT General Controls
- UK NCSC Cyber Assessment Framework
Triage and Remediation
- Remediation
Remediation
Using Console
Using Console
Below are step‑by‑step AWS Console instructions to ensure SageMaker output and storage data are encrypted with KMS customer managed keys (CMKs). This covers:
- S3 output data from jobs
- Attached storage (EBS volumes) for training/processing
- Notebook instance volumes (where applicable)
1. Create or Select a Customer Managed KMS Key
- In the AWS Console, go to Key Management Service (KMS).
- In the left menu, choose Customer managed keys.
- Click Create key.
- Key type: Symmetric → Next.
- Define Alias (e.g.,
alias/sagemaker-cmk). - Set Key administrators and Key users:
- Ensure that the IAM roles used by SageMaker (e.g., SageMaker execution roles) are added as Key users.
- Finish the wizard and Enable the key.
2. Encrypt SageMaker Training Job Output + Storage (EBS)
When you create a new training job:- Go to Amazon SageMaker → Training → Training jobs.
- Click Create training job.
- Under Permissions and encryption:
- KMS key for output data (or Output data configuration section):
- Choose Enter a KMS key or Choose from your AWS KMS keys.
- Select your CMK (e.g.,
alias/sagemaker-cmk).
- KMS key for storage volume (may appear under Resource configuration or similar):
- Set Volume KMS key / VolumeKmsKeyId to your CMK.
- KMS key for output data (or Output data configuration section):
- Complete the rest of the training job configuration and Create training job.
Existing training jobs cannot be edited; create new jobs with the CMK configured.
3. Encrypt SageMaker Processing / Batch Transform Jobs
For Processing jobs:- SageMaker → Processing → Processing jobs → Create processing job.
- Under Permissions and encryption:
- KMS key for output data: select your CMK.
- KMS key for volume storage (if shown): select your CMK.
- Configure the job and click Create.
- SageMaker → Inference → Batch transform jobs → Create batch transform job.
- Under Output data:
- KMS key for output data: select your CMK.
- If there is a Volume KMS key field, set it to your CMK.
- Create the job.
4. Encrypt Model Artifacts (for Endpoints)
When creating a model:- SageMaker → Inference → Models → Create model.
- In Container definition / Primary container:
- If a KMS key for model artifacts (or similar) field is present, choose your CMK.
- Complete and create the model.
- Use this model for Endpoints or Batch Transform so artifacts stay encrypted with CMK.
5. Encrypt Notebook Instance Volumes (Where Needed)
You cannot change the encryption key of an existing notebook instance. Create a new one:- SageMaker → Notebook → Notebook instances → Create notebook instance.
- Under Encryption key:
- Choose your CMK (e.g.,
alias/sagemaker-cmk).
- Choose your CMK (e.g.,
- Migrate notebooks/code from the old instance (via Git, S3 sync, etc.), then delete the old instance.
6. Encrypt SageMaker Studio (If You Use Studio)
For a new Studio Domain:- SageMaker → SageMaker Domain → Create domain.
- In Encryption key, choose your CMK.
- Finish the domain creation.
Changing the key on an existing domain may not be supported via console; if not, you’d create a new domain using the CMK and migrate workloads.
7. Confirm the Misconfiguration Is Resolved
- For a training/processing/batch job, open the job details and ensure:
- KMS key for output data = your CMK.
- KMS key for volume storage = your CMK.
- For notebooks and Studio, check the Encryption key field in their respective configuration pages.
- Optionally, in KMS → Key usage, verify that your CMK is being used by SageMaker.
Using CLI
Using CLI
Below are concise, CLI‑focused steps to ensure SageMaker output and storage are encrypted with KMS Customer Managed Keys (CMKs).
Get the key ID/ARN:Use the CMK ARN in the following steps, e.g.:
Note:
Existing training jobs cannot be changed; apply this to all future jobs.
Model artifacts in S3 should be encrypted with the same CMK via S3 bucket default encryption or per-object encryption:
Then create or update the endpoint:For existing endpoints, create a new endpoint config with
Apply these patterns to all new SageMaker notebooks, training jobs, models, and endpoints to meet the “Output and Storage Data Encrypted With KMS CMKs” requirement.
1. Create (or identify) a KMS CMK
If you don’t already have a CMK:arn:aws:kms:<region>:<account-id>:key/<key-id>2. Encrypt Notebook Instance Storage (EBS)
You cannot modify an existing notebook instance’s KMS key. You must recreate it with--kms-key-id.- Get current notebook config:
InstanceTypeRoleArnSubnetId/SecurityGroupsVolumeSizeInGBDirectInternetAccess, etc.
- Stop and delete old notebook:
- Recreate with CMK:
3. Encrypt Training Job Output (S3) and Storage (Volumes)
When starting new training jobs, specify:--output-data-config KmsKeyId=<cmk-arn>,S3OutputPath=<s3-uri>--resource-config VolumeKmsKeyId=<cmk-arn>,...
4. Encrypt Model Artifacts and Endpoints
4.1 Create Model with KMS Key
If your model artifacts are in S3, create the model with--enable-network-isolation as needed and --primary-container using ModelKmsKeyId for volumes (or use --vpc-config + KMS key for attached volumes):5. Encrypt Endpoint Storage (Production Variants / Volumes)
When creating or updating an endpoint configuration, specifyVolumeSizeInGB and VolumeKmsKeyId in the production variants where supported:VolumeKmsKeyId and:6. Verify Encryption
- Notebook:
- Training job output/storage:
- S3 bucket:
Using Python
Using Python
To remediate this finding, you need to ensure all SageMaker artifacts (notebooks, training jobs, models, endpoints, processing jobs, etc.) use KMS customer-managed keys (CMK) instead of AWS‑managed or unencrypted storage.Below are concise, step‑by‑step instructions with Python/boto3.
Or use an existing CMK ID/ARN:Make sure the CMK key policy allows SageMaker and your IAM principals to use it (
Existing notebook (must stop first; some settings are immutable, so recreate if needed):If update fails (field immutable), create a new notebook with
For endpoints, ensure the endpoint configuration uses volumes with KMS:
Repeat for notebooks, processing jobs, endpoints, data capture, etc.
If you tell me exactly which SageMaker resource (notebook, training job, endpoint, processing job, pipeline) your security tool flagged, I can give a focused Python snippet tailored to that specific type.
1. Prerequisites
2. Create or identify a KMS CMK
If you don’t already have a CMK for SageMaker:kms:Encrypt, kms:Decrypt, kms:GenerateDataKey, etc.).3. Encrypt SageMaker Notebook Instances
New notebook:KmsKeyId and migrate.4. Encrypt Training Jobs (output, model artifacts & volume)
5. Encrypt Models and Endpoints
Model (stores container settings & model data location):6. Encrypt Processing Jobs
7. Encrypt Pipelines (Pipeline Execution Storage)
When creating/updating pipelines, specifyPipelineDefinitionS3Location with a bucket encrypted by your CMK, and for each step (training, processing, transform, etc.), pass KmsKeyId/VolumeKmsKeyId/OutputDataConfig.KmsKeyId as above.If you use the SageMaker Python SDK (sagemaker library), most high‑level classes (Estimator, ProcessingJob, Transformer, etc.) accept output_kms_key, volume_kms_key, or encrypt_inter_container_traffic parameters that map to the same fields.8. Verify Encryption
Usedescribe_* calls to confirm KmsKeyId and VolumeKmsKeyId are set:If you tell me exactly which SageMaker resource (notebook, training job, endpoint, processing job, pipeline) your security tool flagged, I can give a focused Python snippet tailored to that specific type.

