SageMaker 工作負載的 IAM、KMS 與 VPC,是每個生產 ML 系統的安全骨幹——MLA-C01 考試重點測試這個層次,因為它正是工程師考生容易失分的地方。Domain 4 Task 4.3 要求你設計具有最小權限的執行角色、用客戶管理的 KMS 金鑰加密訓練資料和模型產出物、在沒有網路存取的 VPC 內隔離訓練任務和端點,並證明整個架構能抵禦混亂代理人攻擊和跨帳戶濫用。陷阱是具體的:KMS 金鑰策略遺漏了 SageMaker 服務主體、VPC 設定在沒有 S3 VPC 端點的情況下啟動、網路隔離開關與訓練任務需要的 Docker 映像拉取衝突。本指南端到端地涵蓋 SageMaker 的 IAM、KMS 和 VPC,然後介紹 MLA-C01 在場景題幹中植入的 AccessDenied 場景的疑難排解決策樹。
本指南為 MLA-C01 ML 工程師視角設計。它假設你可以啟動 SageMaker 訓練任務並建立端點,但想了解 SageMaker 的 IAM、KMS 和 VPC 如何組合成滿足受監管工作負載——HIPAA、PCI-DSS、FedRAMP——以及考試喜歡設置的合規演練的生產等級安全架構。我們涵蓋 IAM 執行角色、跨帳戶訓練的角色鏈、靜態和傳輸中的 KMS、帶有私有子網的 VPC 隔離、網路隔離模式開關、S3 VPC 端點要求、PrivateLink 介面端點和 CloudTrail 稽核。每個標注都指向官方 AWS 文件,使 SageMaker IAM、KMS 和 VPC 的真實來源只需一次點擊。
什麼是 SageMaker 的 IAM、KMS 和 VPC?
SageMaker 的 IAM、KMS 和 VPC 是 AWS 期望你對每個 SageMaker 工作負載應用的三層安全模型。IAM 控制誰和什麼可以呼叫 SageMaker API,以及這些呼叫者在 SageMaker 任務執行後可以做什麼。KMS 控制靜態資料——S3 中的訓練資料集、附加到訓練實例的 EBS 磁碟區、模型產出物、端點儲存——如何使用你擁有且可以撤銷的金鑰加密。VPC 控制訓練容器或推論容器運行的網路邊界、它是否可以到達公共網際網路,以及它可以透過私有端點與哪些 AWS 服務通信。這三個層共同形成了 SageMaker 工作負載的安全封包。
為何是三層而非一層
常見的工程錯誤是假設 IAM 單獨就足夠了。IAM、KMS 和 VPC 各自保護不同的攻擊面。IAM 保護攻擊者竊取憑證並嘗試呼叫 SageMaker API 的情況。KMS 保護攻擊者從 S3 儲存桶或 EBS 快照讀取位元組但沒有金鑰的情況。VPC 保護攻擊者坐在訓練容器內部——透過惡意依賴或被污染的基礎映像——並嘗試透過公共網際網路竊取資料的情況。架構良好的 SageMaker 工作負載假設任何一層都可能被突破,但資料仍然保留在安全封包內。MLA-C01 考試透過兩層正確、一層遺漏的場景題幹測試這種分層思維。
共同責任界線在哪裡
AWS 管理 SageMaker 控制平面、執行訓練容器的 EC2 主機和底層網路結構。客戶管理 IAM 執行角色、KMS 金鑰和金鑰策略、VPC 和子網設計、安全組、限定訓練資料存取的 S3 儲存桶策略,以及容器程式碼本身。對於 SageMaker 的 IAM、KMS 和 VPC,客戶端是考試問題所在之處。AWS 不給你「預設安全」的 SageMaker——你必須設定每一層。
白話文解釋 SageMaker 的 IAM、KMS 和 VPC
三個具體類比讓 SageMaker IAM、KMS 和 VPC 的結構更容易記憶。選擇符合你心智模型的那個。
類比一——醫院研究實驗室
想像一家研究患者基因資料的醫院研究實驗室。SageMaker 的 IAM、KMS 和 VPC 對應三種現實控制:實驗室存取徽章(IAM 執行角色),說明哪些研究人員可以進入哪些房間以及他們可以操作哪些設備;生物特徵金庫(KMS),持有患者樣本,只有在首席醫療官的指紋授權特定研究人員檢索特定樣本時才打開;以及隔離室(帶有網路隔離模式的 VPC 私有子網),其中分析危險病原體的研究人員在與外界密封的房間中工作——只有過濾通風口(S3 VPC 端點、ECR VPC 端點)將他們連接到供應室。竊取徽章的壞人在沒有金庫的情況下無法檢索樣本。沒有研究人員憑證就闖入金庫的壞人被拒絕。在隔離室內的壞人無法將樣本洩漏到外面,因為隔離室沒有網際網路門。這種三重控制模式正是 SageMaker 的 IAM、KMS 和 VPC 所執行的。
類比二——銀行內的金庫在圍牆內
想像一家帶有圍界牆、銀行大樓、金庫室和保管箱的私人銀行。圍界牆和警衛(VPC 和安全組)決定誰可以進入物業以及他們可以接近哪些門。金庫門禁卡(IAM 執行角色)決定哪些員工可以刷卡進入金庫室。保管箱鑰匙(KMS 客戶管理金鑰)決定哪些具體的箱子一名員工在到達金庫後可以打開。一個翻越圍界牆但沒有門禁卡的劫匪無法進入金庫。一個帶著被竊門禁卡到達金庫但沒有箱子鑰匙的劫匪無法打開任何存款箱。一個以某種方式竊取了全部三者的劫匪仍然受到雙重控制規則(KMS 授予結合 IAM 條件和 CloudTrail 稽核)的約束,要求兩個主體授權提取高價值物品。這是 SageMaker 的 IAM、KMS 和 VPC 建立的分層縱深防禦模式。
類比三——最高機密工作室
想像一家國防承包商的最高機密研發工作室。員工身份證和許可級別(IAM 執行角色和 IAM 條件)說明哪個工程師可以登錄哪個工作站以及他們可以執行哪些工作。每個工作站的加密硬碟(KMS 加密 EBS 磁碟區)意味著如果竊賊偷走了工作站,沒有企業 HSM 就無法讀取資料。安全隔離設施(帶私有子網、網路隔離模式和 PrivateLink 端點的 VPC)意味著工作室沒有公共電話線——工程師只能透過密封的氣動管(S3 VPC 端點),安全官(VPC 端點策略)在每個包裹上檢查,與零件倉庫(S3)通信。已完成項目的工程師仍然無法洩露設計,因為房間沒有外部網路。這就是生產中 SageMaker 的 IAM、KMS 和 VPC。
SageMaker IAM 執行角色——基礎
SageMaker 執行角色是 SageMaker 服務在代表你執行訓練任務、處理任務或託管端點時假設的 IAM 角色。它是 SageMaker IAM、KMS 和 VPC 中測試最頻繁的 IAM 概念。
執行角色實際上做什麼
當你呼叫 CreateTrainingJob 時,你傳遞一個 RoleArn。SageMaker 假設該角色,並使用產生的憑證在任務期間代表你做所有事情:從 ECR 拉取 Docker 映像、從 S3 下載訓練資料、將檢查點寫回 S3、將日誌寫入 CloudWatch、用 KMS 加密 EBS 磁碟區、在 VPC 中附加 ENI,以及將最終模型產出物上傳到 S3。訓練容器需要的每個 API 呼叫都由執行角色的權限授權。如果你省略了訓練資料前綴的 s3:GetObject,任務在資料下載期間就以 AccessDenied 失敗。如果你省略了資料集 KMS 金鑰的 kms:Decrypt,任務在訓練開始前就失敗。
信任策略——誰可以假設角色
執行角色的信任策略必須允許 SageMaker 服務主體 sagemaker.amazonaws.com 假設該角色。為了防止混亂代理人攻擊,新增將角色固定到你的 AWS 帳戶 ID 的 aws:SourceAccount 條件,以及固定到特定資源(訓練任務 ARN、端點 ARN)的 aws:SourceArn 條件。沒有這些條件,錯誤設定的帳戶可能被欺騙讓另一個客戶的 SageMaker 任務假設你的角色。
SageMaker 角色的權限邊界模式
生產團隊將權限邊界附加到執行角色,限制角色可能擁有的最大權限。這保護免受開發人員意外將 iam:* 新增到角色策略的情況——邊界仍然阻止它。對於 SageMaker 的 IAM、KMS 和 VPC,典型的邊界允許 S3 讀寫特定儲存桶前綴、從特定存放庫拉取 ECR、特定金鑰的 KMS 加密/解密、CloudWatch Logs 寫入,以及只在標記 VPC 內的 EC2 ENI 操作。其他任何事情都被拒絕,即使內聯策略嘗試授予它。
SageMaker 執行角色是大多數 AWS 帳戶中許可過度的單一最常見 IAM 角色。 因為 AWS 主控台精靈提供 AmazonSageMakerFullAccess 管理策略作為預設,團隊帶著 s3:* 在每個儲存桶和 iam:PassRole 在 * 上投入生產。兩者都違反最小權限。對於 SageMaker 的 IAM、KMS 和 VPC,將執行角色限定於:輸入資料和輸出產出物的特定 S3 儲存桶前綴、訓練映像的特定 ECR 存放庫、特定 KMS 金鑰的加密/解密、任務的特定 CloudWatch Logs 群組,以及對同一執行角色的 iam:PassRole 用於巢狀操作。使用 SageMaker Role Manager 或從 API 權限參考手動設計策略。永遠不要將 AmazonSageMakerFullAccess 投入生產。
跨帳戶 SageMaker 工作流程的角色鏈
真實的 ML 組織將資料分散在各帳戶——資料帳戶擁有精心策劃的 S3 資料集,建模帳戶擁有 SageMaker 訓練,生產帳戶擁有端點。角色鏈是 SageMaker IAM、KMS 和 VPC 跨越這些帳戶的方式。
三帳戶模式
資料帳戶的 S3 儲存桶策略授予建模帳戶的 SageMaker 執行角色 ARN 對資料集前綴的 s3:GetObject。資料帳戶中資料集的 KMS 金鑰策略授予同一建模帳戶角色 kms:Decrypt。建模帳戶的執行角色在其內聯策略中針對資料帳戶儲存桶和金鑰擁有 s3:GetObject 和 kms:Decrypt。跨帳戶許可的兩側都必須對齊——儲存桶策略授予和執行角色策略允許。
管線跨帳戶角色假設
對於跨帳戶協調訓練的 SageMaker Pipelines 或 CodePipeline,編排角色在目標帳戶中假設部署角色。部署角色上的信任策略允許帶有 aws:PrincipalTag 條件的編排帳戶主體。編排角色對目標部署角色 ARN 有 sts:AssumeRole 權限。鏈——編排角色 → 假設 → 部署角色 → 假設 → 執行角色——是生產 CI/CD 模式。
為何 aws:SourceArn 在跨帳戶設定中很重要
「來自帳戶 222 的任何 SageMaker 角色」形式的儲存桶策略授予是混亂代理人漏洞。如果他們的角色 ARN 被重用或猜到,另一個客戶的 SageMaker 訓練任務可能讀取你的資料。始終將 aws:SourceArn 固定到特定的訓練任務 ARN 或特定的角色 ARN,並與 aws:SourceAccount 條件配對。MLA-C01 考試植入儲存桶策略缺少這些條件的題幹並詢問「安全漏洞是什麼」——答案是混亂代理人。
SageMaker 的 KMS 加密——靜態和傳輸中
SageMaker IAM、KMS 和 VPC 中的 KMS 是受監管工作負載通過或失敗稽核的地方。考試測試三個加密面:訓練資料、模型產出物和端點儲存。
訓練資料加密——S3 端
SageMaker 在任務開始時從 S3 下載訓練資料。如果儲存桶使用帶有客戶管理金鑰的 SSE-KMS,執行角色必須對金鑰有 kms:Decrypt,且金鑰策略必須允許角色主體呼叫 Decrypt。兩側——IAM 策略和金鑰策略——都必須對齊。金鑰策略是把關層;如果金鑰策略拒絕,沒有 IAM 授予可以覆蓋它。這是 MLA-C01 考試中最常見的 KMS 失敗情況。
EBS 磁碟區加密——訓練實例端
當 SageMaker 配置訓練實例時,附加的 EBS 磁碟區可以用 AWS 管理的 KMS 金鑰或透過 CreateTrainingJob API 上的 VolumeKmsKeyId 參數提供的客戶管理金鑰加密。對於受監管的工作負載,始終使用客戶管理金鑰——它給你金鑰輪換控制和每次加密/解密呼叫的 CloudTrail 稽核。執行角色需要對磁碟區金鑰的 kms:CreateGrant,因為 SageMaker 在任務開始時建立一個允許底層 EC2 主機加密和解密磁碟區的授予。
模型產出物加密——輸出端
訓練任務在完成時將模型產出物(model.tar.gz)上傳到 S3。用客戶管理的 KMS 金鑰加密輸出前綴——如果你想要強制執行不同的存取模式,可以與輸入資料金鑰分開。透過 OutputDataConfig.KmsKeyId 參數傳遞輸出 KMS 金鑰 ARN。執行角色需要輸出金鑰的 kms:Encrypt、kms:GenerateDataKey 和 kms:Decrypt。
端點儲存加密——推論端
當你建立端點時,SageMaker 配置帶有 EBS 磁碟區的推論實例。端點設定接受加密這些磁碟區的 KmsKeyId 參數。對於帶有網路隔離的即時端點,這是防止磁碟層資料洩漏所必需的。對於非同步端點,輸入和輸出 S3 位置也需要設定 KMS。
SageMaker 的客戶管理 KMS 金鑰需要執行角色上的 IAM 授予和 KMS 金鑰策略中的匹配授予——兩者單獨都不夠。 KMS 金鑰策略是授權閘道;如果金鑰策略不將 SageMaker 執行角色主體列為相關操作(Decrypt、Encrypt、GenerateDataKey、CreateGrant)的允許,角色上的 IAM 策略無法覆蓋拒絕。反之亦然——如果金鑰策略允許角色但角色的 IAM 策略不允許,呼叫仍然失敗。兩者都必須對齊。主控台精靈正確建立策略;CloudFormation 或 Terraform 設定定期遺漏金鑰策略更新,並在任務開始時產生靜默的 KMSAccessDenied。
分散式訓練的容器間流量加密
對於多實例分散式訓練,在訓練任務上設定 EnableInterContainerTrafficEncryption=true。這用 TLS 加密訓練節點之間的 AllReduce 流量。HIPAA、PCI-DSS 和 FedRAMP 對齊的工作負載需要它。取捨是小的吞吐量損失——通常 5 到 10%——因為 TLS 終止消耗 CPU。對於單實例訓練,該標誌是無操作的。
VPC 隔離用於 SageMaker 訓練任務
VPC 設定是 SageMaker IAM、KMS 和 VPC 的網路層。合規演練所在之處。
預設模式——無 VPC
沒有訓練任務的 VPC 設定,SageMaker 在具有完整網際網路存取的 AWS 管理 VPC 中執行訓練容器。這對非敏感工作負載可以,但對受監管資料不可接受。容器可以到達任何網際網路端點、竊取資料或下載惡意程式碼。始終為生產設定 VPC。
客戶 VPC 模式——私有子網
將帶有子網和安全組的 VpcConfig 傳遞給 CreateTrainingJob。SageMaker 在你的子網中建立 ENI,並用這些 ENI 作為其唯一的網路介面執行訓練容器。子網應是私有的——沒有到網際網路閘道的路由。出站流量透過 NAT Gateway(如果允許網際網路)或透過 VPC 端點(如果阻止網際網路)流動。
網路隔離模式——完全無網際網路
設定 EnableNetworkIsolation=true 以阻止訓練容器的所有網路存取。容器無法到達網際網路、無法直接到達 S3、無法到達任何 AWS 服務,除了 SageMaker 為日誌傳遞和指標發布建立的有限容器到主機通道。這是最高安全模式。對於訓練資料引入,SageMaker 在容器啟動之前將資料下載到 EBS 磁碟區,因此容器不需要網路存取來讀取資料。對於 S3 輸出,SageMaker 在容器退出之後從主機上傳。
S3 VPC 端點要求
當訓練任務在 VPC 中且允許網際網路存取(網路隔離關閉),但 S3 儲存桶策略限制於你的 VPC 時,你需要訓練子網路由表中的 S3 閘道 VPC 端點。沒有它,SageMaker 主機對 S3 的呼叫就會穿越公共網際網路,儲存桶策略的 aws:SourceVpc 條件拒絕它,訓練任務無法下載資料。S3 閘道端點是免費的;始終包含它。
映像拉取的 ECR VPC 端點
訓練容器映像存在於 ECR 中。當網路隔離開啟且 VPC 沒有網際網路路由時,主機必須透過介面 VPC 端點——com.amazonaws.<region>.ecr.api 和 com.amazonaws.<region>.ecr.dkr——加上 S3 閘道端點(ECR 在 S3 內部儲存映像層)到達 ECR。遺忘 ECR 端點是「網路隔離模式無法啟動」的標準失敗。
網路隔離模式不等同於 VPC 模式,不加思考地組合它們會破壞訓練任務。 VPC 模式將容器的網路介面放在你的子網中,但容器仍然可以透過 NAT 或 VPC 端點到達網際網路。網路隔離模式阻止容器進行任何出站網路呼叫——甚至到 AWS 服務。如果你在沒有 S3 閘道端點、ECR API 端點、ECR DKR 端點和 CloudWatch Logs 介面端點的情況下啟用網路隔離,SageMaker 主機就無法拉取映像、記錄到 CloudWatch 或上傳模型產出物。任務在訓練開始前就失敗。MLA-C01 考試植入「安全團隊啟用了網路隔離,現在訓練任務失敗」的題幹——答案是遺漏的 VPC 端點,而非隔離標誌本身。
SageMaker 端點的 VPC 設定
端點是推論,不是訓練,但 SageMaker IAM、KMS 和 VPC 的 VPC 故事是對稱的。
端點 VPC 設定
將帶有子網和安全組的 VpcConfig 傳遞給 CreateEndpointConfig。SageMaker 在你的子網中配置帶有 ENI 的推論實例。即時端點客戶端(你的應用程式)透過公共 SageMaker Runtime API(在 AWS 網路內部路由)或透過 SageMaker Runtime VPC 介面端點(用於完全私有的呼叫路徑)到達端點。
SageMaker API 的 PrivateLink 介面端點
兩個不同的端點:com.amazonaws.<region>.sagemaker.api 用於控制平面 SageMaker API(CreateModel、CreateEndpoint、DescribeEndpoint),以及 com.amazonaws.<region>.sagemaker.runtime 用於資料平面 InvokeEndpoint API。對於完全 VPC 隔離的工作負載,兩個端點必須存在於消費帳戶的 VPC 中。Runtime 端點使推論呼叫透過 PrivateLink 而非公共網際網路流動——許多合規制度需要它。
SageMaker VPC 端點上的端點策略
VPC 介面端點接受限制哪些 SageMaker 資源可以透過它呼叫的端點策略。常見模式:Runtime 端點策略只允許帳戶擁有的端點上的 sagemaker:InvokeEndpoint,帶有 aws:ResourceTag 條件,限制為標記 Environment=prod 的端點。這在憑證洩漏發生時阻止意外呼叫其他帳戶的端點。
跨 VPC 推論
對於多 VPC 架構,推論端點存在於一個 VPC 中,但其他 VPC 中的消費者需要它。兩種模式:每個消費者 VPC 執行自己的 SageMaker Runtime VPC 端點並透過端點名稱呼叫(最簡潔),或 Transit Gateway 連接 VPC,消費者路由到端點 VPC 的內部 IP。端點策略和安全組規則控制哪些消費者可以連接。
端點的資料擷取——加密
資料擷取(Model Monitor 使用的請求/回應記錄)寫入 S3。擷取設定接受 KmsKeyId 參數。對於 SageMaker 的 IAM、KMS 和 VPC,始終加密擷取資料——請求負載可以包含 PII,輸出負載可以包含敏感預測。端點執行角色需要擷取金鑰的 kms:Encrypt 和 kms:GenerateDataKey。
SageMaker 的 CloudTrail 稽核
CloudTrail 捕捉每個 SageMaker API 呼叫——CreateTrainingJob、CreateEndpoint、UpdateEndpointWeightsAndCapacities、所有設定變更。對於 SageMaker IAM、KMS 和 VPC 合規稽核,啟用多區域組織 trail 並:
- 過濾
eventSource = sagemaker.amazonaws.com以找到所有 SageMaker 活動。 - 監視更改窗口外的
eventName = UpdateEndpoint——未排程的更新是安全信號。 - 對來自不熟悉主體的
eventName = DeleteTrainingJob或快速CreateTrainingJob發出告警。 - 使用 CloudTrail Lake 以 SQL 查詢訓練任務建立模式。
CloudTrail 預設不捕捉 SageMaker 的資料平面事件——InvokeEndpoint 呼叫不在 CloudTrail 中。對於推論稽核,在端點上啟用資料擷取並使用 Model Monitor 的請求日誌。
使用 IAM 條件金鑰將 SageMaker 訓練任務鎖定到核准的實例類型、KMS 金鑰和 VPC 設定。 條件金鑰 sagemaker:InstanceTypes、sagemaker:VolumeKmsKey、sagemaker:NetworkIsolation 和 sagemaker:VpcSubnets 在任務建立時評估。「除非 sagemaker:NetworkIsolation = true 否則拒絕 CreateTrainingJob」形式的陳述在整個帳戶範圍強制執行網路隔離。「除非 sagemaker:VolumeKmsKey 在 [清單] 中否則拒絕 CreateTrainingJob」形式的陳述強制執行客戶管理的 KMS 金鑰。這些條件是將 SageMaker IAM、KMS 和 VPC 變成防護欄而非文件指南的方式。
SageMaker 中的 AccessDenied 疑難排解——決策樹
這個部分是 MLA-C01 Task 4.3 的核心。記住症狀到原因的映射。
訓練任務立即失敗,S3 返回 AccessDenied
症狀:訓練任務狀態在幾秒鐘內變為 Failed,錯誤訊息引用輸入資料路徑的 S3 GetObject AccessDenied。
決策樹:
- 驗證執行角色在儲存桶和前綴上有
s3:GetObject和s3:ListBucket。 - 驗證 S3 儲存桶策略沒有明確拒絕角色主體。
- 驗證儲存桶的 KMS 金鑰策略允許角色呼叫 Decrypt——最常見的失敗。
- 驗證 OU 層級的任何 SCP 沒有拒絕角色的 S3 動作。
- 驗證訓練任務的 VPC 設定(如果使用)在子網路由表中包含 S3 閘道端點——沒有它,儲存桶策略的
aws:SourceVpc條件拒絕呼叫。
訓練任務在 EBS 磁碟區掛載期間失敗,返回 KMSAccessDenied
症狀:訓練任務狀態 Failed,錯誤訊息提到 KMS 或 VolumeKmsKey。
決策樹:
- 驗證執行角色在磁碟區 KMS 金鑰上有
kms:CreateGrant、kms:Decrypt、kms:Encrypt、kms:GenerateDataKey。 - 驗證 KMS 金鑰策略在允許主體陳述中列出了執行角色主體,適用於相同操作。
- 驗證 KMS 金鑰與訓練任務在同一區域——跨區域 KMS 用於 EBS 不起作用。
- 驗證金鑰已啟用且不處於待刪除狀態。
端點建立掛起或失敗
症狀:端點狀態異常長時間保持 InService,或以 InternalServerError 失敗。
決策樹:
- 檢查端點容器的 CloudWatch Logs——日誌群組
/aws/sagemaker/Endpoints/<endpoint-name>。容器的 stdout/stderr 將打印失敗。 - 如果日誌顯示 ECR 拉取失敗:VPC 設定已設定帶有網路隔離,但 ECR VPC 端點遺漏。
- 如果日誌顯示 S3 模型產出物下載失敗:執行角色在產出物路徑上遺漏 S3 GetObject,或在產出物金鑰上遺漏 KMS Decrypt。
- 如果日誌顯示「應用程式在 X 秒內啟動失敗」:容器內的模型伺服器正在健康檢查失敗。增加
ContainerStartupHealthCheckTimeoutInSeconds並檢查容器的啟動日誌。
網路隔離模式導致容器掛起
症狀:訓練任務狀態 Starting 非常長時間,沒有日誌輸出,最終超時。
決策樹:
- 驗證 VPC 端點存在於
com.amazonaws.<region>.s3(閘道)、com.amazonaws.<region>.ecr.api(介面)、com.amazonaws.<region>.ecr.dkr(介面)、com.amazonaws.<region>.logs(介面)。 - 驗證子網路由表關聯閘道端點。
- 驗證訓練 ENI 上的安全組允許到 VPC 端點的出站 HTTPS(443)。
- 驗證介面端點的 DNS 已啟用(私有 DNS),使容器將 AWS 服務主機名解析為私有 IP。
CloudTrail 顯示來自意外來源的 InvokeEndpoint 失敗
症狀:CloudTrail Lake 查詢顯示當策略期望只有 VPC 內部時,來自公共網際網路 IP 的 InvokeEndpoint 拒絕。
決策樹:
- 確認 SageMaker Runtime VPC 介面端點存在於消費者 VPC 中。
- 確認消費者應用程式使用端點的區域 DNS,而非公共 DNS。
- 確認 Runtime VPC 端點上的端點策略限制為內部主體。
- 如果使用帶有
EndpointConfig.VpcConfig的 SageMaker 端點,確認消費者在對等 VPC 中或共享同一 Transit Gateway。
SageMaker Studio 安全——不同的面
SageMaker Studio 網域有自己的 IAM 模型——網域執行角色、用戶配置文件執行角色和 notebook 執行角色——與 SageMaker IAM、KMS 和 VPC 互動。網域層級的 VPC 設定將 Studio 的應用程式實例放在 VPC 中。Studio 支援相同的網路隔離模式開關。Studio 的 EFS 儲存的 KMS 金鑰在網域建立時設定,之後無法更改。考試可以植入 Studio 場景,其中用戶配置文件角色缺少訓練執行角色的 iam:PassRole——用戶可以開啟 notebook 但無法啟動訓練任務。
SageMaker IAM、KMS 和 VPC 常見考試陷阱
陷阱一——AmazonSageMakerFullAccess 適合生產環境
錯誤。管理策略在每個儲存桶上授予 s3:*,在 * 上授予 iam:PassRole。始終用限定的內聯策略替換。
陷阱二——當 IAM 策略允許時不需要 KMS 金鑰策略更新
錯誤。KMS 金鑰策略是授權閘道。如果金鑰策略也不列出主體,IAM 策略單獨無法授予 KMS 存取。
陷阱三——網路隔離模式取代 VPC 模式
錯誤。它們是獨立的開關。單獨的網路隔離(沒有 VPC 設定)阻止容器網際網路存取;VPC 模式單獨將容器放在你的子網中,但允許透過 NAT 的網際網路。結合兩者以獲得最大隔離。
陷阱四——S3 VPC 端點需要費用
對閘道端點(S3 和 DynamoDB)是錯的——它們是免費的。介面端點(大多數其他服務)每小時和每 GB 收費。始終為 SageMaker 訓練資料使用 S3 閘道端點。
陷阱五——容器間流量加密影響單實例訓練
錯誤。該標誌只影響多實例分散式訓練。對於單實例任務,該標誌沒有效果。
陷阱六——CloudTrail 捕捉 InvokeEndpoint 呼叫
錯誤。SageMaker InvokeEndpoint 是資料平面 API,不在標準 CloudTrail 中。使用端點資料擷取記錄呼叫。
陷阱七——客戶管理的 KMS 金鑰像 AWS 管理的金鑰一樣自動輪換
部分正確。AWS 管理的金鑰每年自動輪換。客戶管理的金鑰只有在你啟用 EnableKeyRotation 時才每年輪換。沒有它,相同的金鑰材料被永遠使用。
陷阱八——VPC 中的 SageMaker 端點無法從網際網路呼叫
錯誤。端點仍然可以透過公共 SageMaker Runtime API 到達,除非你也透過端點策略限制或專門使用 Runtime VPC 介面端點。端點上的 VPC 設定控制推論容器的出站網路,而非入站呼叫路徑。
陷阱九——訓練任務繼承 Notebook 的 IAM 角色
錯誤。每個訓練任務都有自己的透過 RoleArn 傳遞的執行角色。Notebook 角色呼叫 CreateTrainingJob,必須對執行角色 ARN 有 iam:PassRole。
陷阱十——禁用訓練儲存桶上的公共存取是足夠的網路隔離
錯誤。儲存桶層面的公共存取阻止入站;它不影響訓練容器可以到達的出站目標。只有網路隔離模式和 VPC 端點策略控制容器的出站流量。
對於完全隔離的 SageMaker 訓練任務——VPC 模式加上網路隔離模式加上客戶管理的 KMS 加上容器間加密——你必須在訓練子網中配置恰好五個 VPC 端點:S3 閘道端點、ECR API 介面端點、ECR DKR 介面端點、CloudWatch Logs 介面端點,以及(如果從容器呼叫其他 AWS 服務)STS 介面端點。 跳過其中任何一個,任務就會失敗:遺漏 S3 端點阻止資料下載,遺漏 ECR 端點阻止映像拉取,遺漏 CloudWatch Logs 端點靜默丟失訓練日誌,遺漏 STS 端點阻止任何呼叫 AssumeRole 的容器程式碼。這個五端點模式是 SageMaker IAM、KMS 和 VPC 完全隔離題幹的最終答案。
SageMaker IAM、KMS 和 VPC 必記數字與重要事實
IAM
iam:PassRole是呼叫 CreateTrainingJob 以傳遞執行角色的主體所需的- AmazonSageMakerFullAccess 僅用於原型;永遠不用於生產
- 權限邊界上限了最大許可,即使內聯策略授予更多
aws:SourceArn和aws:SourceAccount條件防止混亂代理人
KMS
- 金鑰策略是授權閘道;IAM 無法覆蓋
- 客戶管理的金鑰除非
EnableKeyRotation = true否則不輪換 - VolumeKmsKeyId 加密訓練實例的 EBS
- OutputDataConfig.KmsKeyId 加密 S3 中的模型產出物
- KMS 金鑰是區域性的;跨區域需要多區域金鑰
VPC
- VPC 模式和網路隔離模式是獨立的開關
- 網路隔離需要 S3 閘道、ECR API、ECR DKR、CloudWatch Logs 介面端點
- S3 和 DynamoDB 閘道端點是免費的;介面端點每小時和每 GB 收費
- SageMaker API 和 SageMaker Runtime 是不同的 VPC 端點
- 容器間加密只適用於多實例分散式訓練
MLA-C01 exam priority — SageMaker 工作負載的 IAM、KMS 與 VPC — MLA-C01 ML Engineer 學習筆記. This topic carries weight on the MLA-C01 exam. Master the trade-offs, decision boundaries, and the cost/performance triggers each AWS service exposes — the exam will test scenarios that hinge on knowing which service is the wrong answer, not just which is right.
FAQ——SageMaker IAM、KMS 和 VPC 熱門問題
Q1——訓練任務立即以 KMSAccessDenied 失敗。執行角色上的 IAM 策略允許 kms:Decrypt。為什麼?
資料帳戶中的 KMS 金鑰策略沒有列出建模帳戶執行角色主體。KMS 金鑰策略是授權閘道,IAM 層面的允許無法覆蓋金鑰策略的靜默。修復:開啟金鑰策略,新增允許執行角色 ARN 呼叫 Decrypt 和 CreateGrant 的陳述,然後重新執行。這是 MLA-C01 考試中最常見的 KMSAccessDenied 場景——它測試你是否理解 KMS 是策略對策略,而非策略或策略。
Q2——如何強制帳戶中的所有 SageMaker 訓練任務使用客戶管理的 KMS 金鑰,而非 AWS 管理的金鑰?
在 SCP 層級(組織)或用戶層級(帳戶)附加帶有 Deny 陳述的 IAM 策略,當 sagemaker:VolumeKmsKey 為 null 或不在核准清單中時,拒絕 sagemaker:CreateTrainingJob。條件金鑰在 API 呼叫時評估,拒絕遺漏磁碟區金鑰參數的任務。配對對 sagemaker:OutputKmsKey 類似的 Deny 以強制模型產出物加密。這種模式將 KMS 變成防護欄而非指南。
Q3——訓練任務處於網路隔離模式但容器在啟動時掛起。我們忘了什麼?
SageMaker 在主機層級需要的 AWS 服務的 VPC 端點:S3 閘道端點(用於 SageMaker 在容器啟動前執行的資料下載)、ECR API 和 ECR DKR 介面端點(用於映像拉取),以及 CloudWatch Logs 介面端點(用於日誌傳遞)。沒有這些端點,SageMaker 主機無法完成其引導程序,容器永遠不會啟動。在子網的路由表中檢查閘道端點,在 VPC 的介面端點清單中檢查 ECR 和 CloudWatch,以及在主機 ENI 的安全組上檢查到端點私有 IP 的出站 HTTPS。
Q4——如何防止用未核准的實例類型建立 SageMaker 訓練任務?
在 Deny 陳述中使用 sagemaker:InstanceTypes IAM 條件金鑰。範例:"Condition": {"ForAnyValue:StringNotEquals": {"sagemaker:InstanceTypes": ["ml.m5.large", "ml.m5.xlarge", "ml.p3.2xlarge"]}}。附加到角色或 OU 層級的 SCP。條件在 CreateTrainingJob 時評估,拒絕請求清單中任何不在清單中的實例類型的任務。結合 sagemaker:MaxRuntimeInSeconds 以限制任務持續時間並防止失控成本。
Q5——VPC 中的 SageMaker 端點可以透過 SageMaker Runtime API 從公共網際網路呼叫。如何阻止?
端點上的 VPC 設定控制推論容器的出站網路,而非入站呼叫路徑。阻止公共網際網路呼叫:(1) 在消費者 VPC 中配置 SageMaker Runtime VPC 介面端點,(2) 在 Runtime VPC 端點上附加端點策略,只允許你帳戶端點上的 sagemaker:InvokeEndpoint,以及 (3) 使用 SCP 或 IAM 策略,透過檢查 aws:SourceVpce 條件,拒絕不透過 VPC 端點的 sagemaker:InvokeEndpoint 呼叫。組合強制所有呼叫透過 PrivateLink 流動,並拒絕公共網際網路呼叫。
Q6——跨帳戶 SageMaker 訓練中,資料存在帳戶 A,訓練在帳戶 B 執行。最簡潔的設定模式是什麼?
三個組件:(1) 帳戶 A 的 S3 儲存桶策略授予帳戶 B 訓練執行角色 ARN 對資料集前綴的 s3:GetObject 和 s3:ListBucket,帶有 aws:SourceArn 和 aws:SourceAccount 條件用於混亂代理人保護。(2) 帳戶 A 的 KMS 金鑰策略授予同一角色主體 kms:Decrypt——儲存桶策略和金鑰策略都必須對齊。(3) 帳戶 B 的訓練執行角色的內聯策略授予跨帳戶儲存桶和金鑰 ARN 的 s3:GetObject 和 kms:Decrypt。在生產前用只下載單個文件然後退出的試運行訓練任務進行測試。
Q7——如何稽核是誰啟動了洩露資料的 SageMaker 訓練任務?
CloudTrail 捕捉帶有呼叫主體、角色 ARN、輸入資料 S3 路徑和 VPC 設定的 CreateTrainingJob 事件。使用 SQL 查詢 CloudTrail Lake:SELECT eventTime, userIdentity.arn, requestParameters FROM trail WHERE eventName='CreateTrainingJob' AND eventTime > TIMESTAMP'2026-04-01'。要稽核實際的資料下載,S3 伺服器存取日誌或 CloudTrail 中的 S3 資料事件顯示每個帶有請求角色 ARN 的 GetObject 呼叫。使用角色 ARN 和時間視窗交叉參考訓練任務建立事件與 S3 GetObject 事件。對於推論洩漏,啟用端點資料擷取並審查擷取的請求/回應負載。
延伸閱讀——SageMaker IAM、KMS 和 VPC 官方 AWS 文件
權威的 AWS 來源是:SageMaker 開發人員指南安全章節(尤其是 IAM、靜態加密、傳輸中加密、train-vpc 和 host-vpc 部分)、IAM 使用者指南(尤其是混亂代理人和條件金鑰)、KMS 開發人員指南(金鑰策略結構和授予),以及 VPC 使用者指南(閘道和介面端點)。AWS 安全參考架構白皮書整理了多帳戶模式。AWS re:Inforce 大會存檔包含 SageMaker 安全架構的多次深度研討。對於 SageMaker IAM、KMS 和 VPC 合規制度——HIPAA、PCI-DSS、FedRAMP——AWS 合規中心記錄了每個服務滿足的控制項。