You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让AWS SageMaker批量转换使用目标S3桶默认KMS密钥?

解决SageMaker批量转换输出强制使用目标S3桶默认KMS密钥的问题

问题原因

SageMaker批量转换任务默认会使用执行该任务的IAM角色所属账号的KMS密钥(即源账号密钥)加密输出对象,即使目标S3桶已配置默认加密,也不会自动触发桶的默认加密规则,导致跨账号下载时因无权限访问源账号KMS密钥而报错。

解决方案

方案一:在Transformer中显式指定目标桶的默认KMS密钥

直接在Transformer初始化时添加output_kms_key参数,指定目标S3桶默认配置的KMS密钥ARN,强制SageMaker用该密钥加密输出。

修改后的代码:

batch_output_path= f"s3://test_bucket/folder"
# 替换为目标账号test_bucket的默认KMS密钥ARN
TARGET_KMS_KEY_ARN = "arn:aws:kms:区域ID:目标账号ID:key/密钥UUID"

from sagemaker.transformer import Transformer

transformer = Transformer(
   model_name=step_create_model.properties.ModelName,
   instance_type="ml.c5.xlarge",
   instance_count=1,
   strategy='MultiRecord',
   assemble_with='Line',
   max_payload=1,
   max_concurrent_transforms=10,
   output_path=batch_output_path,
   output_kms_key=TARGET_KMS_KEY_ARN,  # 新增:指定目标KMS密钥
   sagemaker_session=pipeline_session
)

权限配置要求:

  1. 目标账号的KMS密钥策略需添加源账号SageMaker执行角色的ARN,允许以下权限:
    • kms:GenerateDataKey(用于加密输出对象)
    • kms:Decrypt(若后续需要读取输出对象)
  2. 源账号的SageMaker执行角色需拥有目标S3桶的s3:PutObject权限。

方案二:配置目标S3桶强制覆盖加密设置

通过S3桶级配置,强制所有上传到该桶的对象使用桶的默认加密密钥,忽略上传时指定的密钥(包括SageMaker默认的源账号密钥)。

操作步骤:

  1. 登录目标账号的AWS控制台,进入S3服务,找到test_bucket。
  2. 切换到「属性」标签页,找到「默认加密」模块,点击「编辑」。
  3. 确认已选中桶的默认KMS密钥,勾选**「覆盖上传到存储桶的对象的现有加密设置」**选项。
  4. 点击「保存更改」完成配置。

权限配置要求:

源账号的SageMaker执行角色需拥有目标KMS密钥的kms:GenerateDataKey权限(S3会代表角色调用该密钥完成加密),需在目标账号的KMS密钥策略中添加源角色ARN并授权该权限。

总结

  • 方案一适合仅针对SageMaker任务指定加密密钥的场景,需修改代码;
  • 方案二是全局桶级配置,无需修改代码,所有上传到该桶的对象都会强制使用桶默认密钥,更省心。

内容的提问来源于stack exchange,提问作者Mark Andrew

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 06:35:20