设置权限 - 亚马逊 SageMaker AI

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

设置权限

插件及其依赖项所需的角色

上的 SageMaker 空间需要 IAM 角色 SageMaker HyperPod

(EKS) 集群上启用 SageMaker Spaces SageMaker HyperPod (又名 SageMaker IDE /笔记本)功能时,必须创建和分配多个 IAM 角色。这些角色支持安全访问、路由、远程 IDE 会话和 EBS 存储资源调配。下表汇总了这四个角色以及何时需要这些角色。

角色摘要表

IAM 角色 必填? 用途 谁在使用它? SageMaker 控制台允许自定义?

Spaces 插件执行角色

总是必填的

允许 Spaces 控制器管理空间、生成预签名 URLs、管理 SSM 会话

附加控制器 pod(特权)

✔ 是的

集群内路由器角色

要访问 WebUI 是必需的

允许路由器容器执行 KMS 操作以进行 JWT 签名(WebUI 身份验证)

集群内路由器 Pod(特权)

✔ 是的

SSM 托管实例角色

需要进行远程 IDE 访问

由 SSM 代理边车用于 SSH-over-SSM远程 IDE 会话

Space IDE 容器中的 SSM 代理(不是附加窗格)

✔ 是的

EBS CSI 驱动程序插件的 IAM 角色

总是必填的

允许 EBS CSI 驱动程序访问空间工作create/attach/modify负载的卷

EBS CSI 驱动程序附加组件

自动创建

外部 DNS 附加组件的 IAM 角色

要访问 WebUI 是必需的

它确保可以在客户的 Route 53 托管区域中自动为空间端点和集群内组件分配 DNS 名称。

外部 DNS 插件

自动创建

1. Spaces 插件执行角色(必填)

Spaces 插件执行角色始终是必需的,因为它由 SageMaker Spaces 插件控制器 pod 使用,该容器是通过 EKS 插件安装的管理组件。此角色允许控制器管理空间、配置资源、与 SSM 交互以及 URLs 为远程 IDE 和 WebUI 访问生成预签名。它还支持用于请求签名的 KMS 访问,用于对 WebUI https 请求进行身份验证。通过 SageMaker 控制台安装 SageMaker Spaces 插件时,可以自动创建此角色。对于手动创建,AWS提供AmazonSageMakerSpacesControllerPolicy托管策略。

参考信任政策

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "pods.eks.amazonaws.com" }, "Action": [ "sts:AssumeRole", "sts:TagSession" ], "Condition": { "StringEquals": { "aws:SourceAccount": "{{accountId}}", "aws:SourceArn": "arn:aws:eks:{{region}}:{{accountId}}:cluster/{{eksClusterName}}" } } } ] }

2. 集群内路由器角色(WebUI 身份验证所必需的)

集群内路由器角色由路由器 pod 使用,这是对 Sp aces WebUI 会话进行身份验证的特权组件。路由器使用 KMS 密钥创建和签署授权用户访问特定空间的 JWT 令牌。此角色允许路由器 pod 生成数据密钥并对其进行解密。与控制器角色类似,它使用基于标签和集群的范围限制来强制执行安全性。通过AWSSageMaker 控制台安装 Spaces 插件时,可以自动生成此角色,但客户可以手动创建。

参考信任政策

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "pods.eks.amazonaws.com" }, "Action": [ "sts:AssumeRole", "sts:TagSession" ], "Condition": { "StringEquals": { "aws:SourceAccount": "{{accountId}}", "aws:SourceArn": "arn:aws:eks:{{region}}:{{accountId}}:cluster/{{eksClusterName}}" } } } ] }

参考权限政策

{ "Version": "2012-10-17", "Statement": [ { "Sid": "KMSDescribeKey", "Effect": "Allow", "Action": [ "kms:DescribeKey" ], "Resource": "arn:aws:kms:{{region}}:{{accountId}}:key/{{kmsKeyId}}" }, { "Sid": "KMSKeyOperations", "Effect": "Allow", "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": "arn:aws:kms:{{region}}:{{accountId}}:key/{{kmsKeyId}}", "Condition": { "StringEquals": { "kms:EncryptionContext:sagemaker:component": "amazon-sagemaker-spaces", "kms:EncryptionContext:sagemaker:eks-cluster-arn": "${aws:PrincipalTag/eks-cluster-arn}" } } } ] }

3. SSM 托管实例角色(远程 IDE 访问所必需的)

注册 SSM 托管实例以启用远程 IDE 访问权限时,将传递 SSM 托管实例角色。此角色允许 SSM 代理将 pod 注册为 SSM 托管实例,并使用 SSM 会话管理器通道进行远程 IDE (ssh-over-SSM) 连接。它可以在使用AWS SageMaker 控制台时自动创建。对于手动部署,客户必须创建此角色并将其提供给 Spaces 插件。控制器 pod 本身并不扮演这个角色;它只在调用时才提供这个角色ssm:CreateActivation

参考信任政策

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ssm.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": "{{account}}" }, "ArnEquals": { "aws:SourceArn": "arn:aws:ssm:{{region}}:{{account}}:*" } } } ] }

参考权限政策

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:DescribeAssociation" ], "Resource": [ "arn:aws:ssm:{{region}}:{{account}}:association/*", "arn:aws:ssm:{{region}}:{{account}}:document/*", "arn:aws:ec2:{{region}}:{{account}}:instance/*", "arn:aws:ssm:{{region}}:{{account}}:managed-instance/*" ] }, { "Effect": "Allow", "Action": [ "ssm:GetDocument", "ssm:DescribeDocument" ], "Resource": "arn:aws:ssm:{{region}}:{{account}}:document/*" }, { "Effect": "Allow", "Action": [ "ssm:GetParameter", "ssm:GetParameters" ], "Resource": "arn:aws:ssm:{{region}}:{{account}}:parameter/*" }, { "Effect": "Allow", "Action": [ "ssm:ListInstanceAssociations" ], "Resource": [ "arn:aws:ec2:{{region}}:{{account}}:instance/*", "arn:aws:ssm:{{region}}:{{account}}:managed-instance/*" ] }, { "Effect": "Allow", "Action": [ "ssm:PutComplianceItems" ], "Resource": [ "arn:aws:ec2:{{region}}:{{account}}:instance/*", "arn:aws:ssm:{{region}}:{{account}}:managed-instance/*" ] }, { "Effect": "Allow", "Action": [ "ssm:UpdateAssociationStatus" ], "Resource": [ "arn:aws:ssm:{{region}}:{{account}}:document/*", "arn:aws:ec2:{{region}}:{{account}}:instance/*", "arn:aws:ssm:{{region}}:{{account}}:managed-instance/*" ] }, { "Effect": "Allow", "Action": [ "ssm:UpdateInstanceAssociationStatus" ], "Resource": [ "arn:aws:ssm:{{region}}:{{account}}:association/*", "arn:aws:ec2:{{region}}:{{account}}:instance/*", "arn:aws:ssm:{{region}}:{{account}}:managed-instance/*" ] }, { "Effect": "Allow", "Action": [ "ssm:UpdateInstanceInformation" ], "Resource": [ "arn:aws:ec2:{{region}}:{{account}}:instance/*", "arn:aws:ssm:{{region}}:{{account}}:managed-instance/*" ] }, { "Effect": "Allow", "Action": [ "ssm:GetDeployablePatchSnapshotForInstance", "ssm:GetManifest", "ssm:ListAssociations", "ssm:PutInventory", "ssm:PutConfigurePackageResult" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ssmmessages:CreateControlChannel", "ssmmessages:CreateDataChannel", "ssmmessages:OpenControlChannel", "ssmmessages:OpenDataChannel" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2messages:AcknowledgeMessage", "ec2messages:DeleteMessage", "ec2messages:FailMessage", "ec2messages:GetEndpoint" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2messages:GetMessages", "ec2messages:SendReply" ], "Resource": "*", "Condition": { "ArnLike": { "ssm:SourceInstanceARN": "arn:aws:ssm:{{region}}:{{account}}:managed-instance/*" } } } ] }

4. EBS CSI 驱动程序插件的 IAM 角色

EBS CSI 驱动程序的 IAM 角色是必需的,因为 EBS CSI 驱动程序会为 Spaces 工作负载配置永久卷。虽然AWS托管的 Amazon EBSCSIDriver 策略提供了基本权限,但 SageMaker HyperPod 集群需要其他功能,例如创建快速快照恢复、标记集群拥有的卷以及 attaching/detaching 为托管节点创建卷。 HyperPod这些权限还包括 SageMaker特定权限, APIs 例如。sagemaker:AttachClusterNodeVolume如果未安装 EBS CSI 驱动程序,则 SageMaker 控制台现在将在 Spaces 插件安装期间自动创建此角色,无需客户进行任何操作

5. 外部 DNS 附加组件的 IAM 角色

外部 DNS 插件管理 HyperPod 集群上服务和入口资源的 DNS 记录。它确保可以在客户的 Route 53 托管区域中自动为空间端点和集群内组件分配 DNS 名称。如今,客户经常通过 EKS 控制台中的一键式选项手动安装外部 DNS。作为改善 SageMaker Spaces 体验的一部分,此角色现在将由 SageMaker 控制台在 Spaces 插件安装期间自动创建,无需客户进行任何操作

AWSToolkit 访问 SageMaker 空间的权限设置

要允许 AWS VS Code Toolkit 资源浏览器侧面板发现和连接 SageMaker 空间,需要以下 IAM 权限。这些权限允许 Toolkit 列出可用 SageMaker HyperPod 集群、检索集群详细信息以及获取关联的 Amazon EKS 集群的连接令牌。

必需的 IAM 政策

{ "Version": "2012-10-17", "Statement": [ { "Sid": "SageMakerListClusters", "Effect": "Allow", "Action": "sagemaker:ListClusters", "Resource": "*" }, { "Sid": "SageMakerDescribeCluster", "Effect": "Allow", "Action": "sagemaker:DescribeCluster", "Resource": "arn:aws:sagemaker:{{region}}:{{account}}:cluster/cluster-name" }, { "Sid": "EksDescribeCluster", "Effect": "Allow", "Action": "eks:DescribeCluster", "Resource": "arn:aws:eks:{{region}}:{{account}}:cluster/cluster-name" }, { "Sid": "EksGetToken", "Effect": "Allow", "Action": "eks:GetToken", "Resource": "*" } ] }

范围界定建议

  • 将 cluster-name 替换为用户需要访问的特定 SageMaker HyperPod 集群。

  • eks: GetToken 操作目前不支持资源级限制,必须使用资源:“*”。这是一项AWS服务限制。客户端身份验证通过 EKS 访问条目执行。