Terraform创建SageMaker项目报产品不存在或访问被拒绝
报错根因
你收到的ValidationException: Product prod-xxxxxxxxxxxx does not exist or access was denied报错,和产品实际是否存在无关,本质是SageMaker预置Service Catalog产品时的权限链路不通,或Terraform配置缺失必填参数。
修复配置步骤
- 配置Portfolio信任与访问权限
找到目标产品所属的Service Catalog Portfolio,首先将SageMaker服务添加为受信任访问主体,再给执行Terraform操作的IAM身份(用户/角色)授予该Portfolio的访问权限,至少要包含servicecatalog:DescribeProduct、servicecatalog:ProvisionProduct、servicecatalog:ListLaunchPaths三个操作的权限,确保调用方可以正常查询产品信息、枚举启动路径。 - 配置产品启动约束
必须为目标产品在所属Portfolio下添加启动约束,绑定一个具备SageMaker项目资源创建、Service Catalog产品预置权限的IAM角色,角色信任策略需要允许servicecatalog.amazonaws.com服务代入。这是SageMaker对接自定义项目模板的强制要求,未配置启动约束时SageMaker无法完成产品预置操作。 - 补全Terraform配置必填参数
你当前使用的配置缺失了必填的产品版本、启动路径参数,会直接触发校验报错。补全后的参考配置如下:resource "aws_sagemaker_project" "test-project" { project_name = "test-project" service_catalog_provisioning_details { product_id = "prod-xxxxxxxxxxxx" # 替换为目标产品对应可用版本的ID,可在Service Catalog产品详情页查询 provisioning_artifact_id = "pa-xxxxxxxxxxxx" # 替换为产品对应的启动路径ID,可通过AWS CLI list-launch-paths命令查询 path_id = "lpv-xxxxxxxxxxxx" } }
排查验证技巧
配置完成后,先使用执行Terraform的IAM身份调用AWS CLI执行aws servicecatalog describe-product --id prod-xxxxxxxxxxxx:
- 如果CLI调用返回权限错误,优先修复IAM身份的Service Catalog权限
- 如果CLI可以正常返回产品详情,再检查启动约束绑定的角色权限是否充足、配置里填写的provisioning_artifact_id、path_id是否和产品实际信息匹配
你提到的为产品配置启动约束、为终端用户授予对应Portfolio访问权限的操作是必须的,属于自定义SageMaker项目模板的标准前置配置,缺失任意一项都会触发本次遇到的访问报错。
内容的提问来源于stack exchange,提问作者awscoder
相关产品推荐
相关产品推荐

