有奖捉虫:行业应用 & 管理与支持文档专题 HOT
文档中心 > TI-ONE 训练平台 > 最佳实践 > 使用 CAM 标签鉴权实现子用户间 TI-ONE 资源隔离

概述

一个主账号下有多个子用户或者协作者,主账号希望不同团队成员通过子用户登录,可以看到和操作的资源不同。 针对该场景,您可以通过标签授权来实现资源的隔离访问。

场景说明

标签授权需要支持资源级权限控制,TI-ONE 的主要资源已支持,具体所有支持资源级的业务接口清单请查看 支持 CAM 的业务接口。下面以资源组、在线服务为例,假设主账号用户有两个团队使用 TI-ONE 产品,有两个资源组,两个在线服务,对应的信息如下:
资源组 id
在线服务
所属标签
所属组织
rsg-wwb2hgrs
llm_text
team:llm_text
llm_text 团队
rsg-zbqrjvlz
llm_picture
team:llm_picture
llm_picture 团队
提前为 llm_text 团队创建 CAM 子用户 llm_text_user, llm_picture 团队创建 CAM 子用户 llm_picture_user。可参考文档:新建子用户

预期效果

资源组和在线服务均实现子用户之间资源隔离
1. 资源组
使用管理员账号查看上海地域资源组列表效果。
?
?
使用llm_text_user账号 查看上海地域资源组列表, 只能查看绑定 team:llm_text 标签的资源组:
?
?
2. 在线服务
使用管理员账号查看上海地域在线服务列表效果:
?
使用llm_text_user账号 查看上海地域在线服务列表, 只能查看绑定 team:llm_text 标签的在线服务:
?
?

操作步骤

第一步:新建标签并为资源组添加标签

1. 新建标签
进入 标签列表页面,单击新建标签 输入标签键和标签值,单击确定即可创建成功
?
?
2. 给资源组添加标签
资源组管理 页面选择要打标签的资源组,单击编辑,在标签中选择之前建立的team标签键,分别绑定对应标签值,单击确定即可。
?
?
3. 给在线服务添加标签
模型服务-在线服务 页面选择要打标签的服务,单击编辑标签,在标签中选择之前建立的 team 标签键,分别绑定对应标签值,单击确定即可。
?
?

第二步:新建自定义策略

目前TI-ONE部分接口不支持标签鉴权,所以需要设置两个策略,Policy_llm_text_tag是标签策略,Policy_llm_text_nontag是不支持标签的TI-ONE接口, 以及依赖其他云产品接口的策略。
?
1. 新建自定义策略Policy_llm_text_tag
进入 访问管理策略 页面,单击新建自定义策略
?
?
选择按标签授权
?
?
?
编辑策略选择 json。
?
?
?
策略内容,修改为如下内容,单击下一步
{
"version": "2.0",
"statement": [
{
"effect": "allow",
"action": [
"tione:*"
],
"resource": "*",
"condition": {
"for_any_value:string_equal": {
"qcs:resource_tag": [
"team&llm_text"
]
}
}
}
]
}
策略名称修改为 Policy_llm_text_tag,单击完成。
?
2. 新建自定义策略 Policy_llm_text_nontag
进入 访问管理策略 页面,单击新建自定义策略。选择按标签授权编辑策略选择 json,将策略内容,修改为如下内容,单击下一步
{
"version": "2.0",
"statement": [
{
"effect": "allow",
"action": [
"tione:CheckAlgoPlayer",
"tione:CheckAlgoVoucher",
"tione:CheckAutoMLTaskNameExist",
"tione:CheckDatasetName",
"tione:CheckModelAccTaskNameExist",
"tione:CheckPostPayInfo",
"tione:DescribeAlgoPlayerInfo",
"tione:DescribeAllModels",
"tione:DescribeAppStatus",
"tione:DescribeAutoMLIterationInstances",
"tione:DescribeAvailableRegions",
"tione:DescribeAvailableSWInstances",
"tione:DescribeBadcasePreviewStatus",
"tione:DescribeBatchJob",
"tione:DescribeBatchJobs",
"tione:DescribeBillingResourceInstanceRunningJobs",
"tione:DescribeBillingResourceInstanceRunningJobsBatch",
"tione:DescribeCodeRepositories",
"tione:DescribeCodeRepository",
"tione:DescribeComponentGroups",
"tione:DescribeCurrentTime",
"tione:DescribeDataPipelineConfig",
"tione:DescribeDataPipelineTask",
"tione:DescribeDataProcessConfig",
"tione:DescribeDatasetPreviewStatus",
"tione:DescribeDatasetSchema",
"tione:DescribeDemoDocument",
"tione:DescribeDemos",
"tione:DescribeExecutionJobLog",
"tione:DescribeExecutionJobs",
"tione:DescribeExecutionModel",
"tione:DescribeFavoriteJob",
"tione:DescribeFavoriteModels",
"tione:DescribeFavorites",
"tione:DescribeFileSystemsWithPathAccessibility",
"tione:DescribeFlowByDriveType",
"tione:DescribeFlowDataset",
"tione:DescribeFlowMetadata",
"tione:DescribeFlowOperatorCategories",
"tione:DescribeFlowOperators",
"tione:DescribeFlowParam",
"tione:DescribeFlowParamKeys",
"tione:DescribeFlowResource",
"tione:DescribeFlowScript",
"tione:DescribeFlowStatus",
"tione:DescribeHistoryFlows",
"tione:DescribeHistoryLogs",
"tione:DescribeHistoryParams",
"tione:DescribeInferTemplates",
"tione:DescribeInstanceLog",
"tione:DescribeInstanceSemiProgress",
"tione:DescribeInstanceTypes",
"tione:DescribeKmsAuthState",
"tione:DescribeLastExecution",
"tione:DescribeModel",
"tione:DescribeModelDeployInfo",
"tione:DescribeModelPath",
"tione:DescribeModels",
"tione:DescribeModules",
"tione:DescribeNotebookInstance",
"tione:DescribeNotebookInstances",
"tione:DescribeNotebookLifecycleScript",
"tione:DescribeNotebookLifecycleScripts",
"tione:DescribeNotebookSummary",
"tione:DescribeOutputPath",
"tione:DescribeOutputSample",
"tione:DescribeResourceInstances",
"tione:DescribeResultImage",
"tione:DescribeRunningFlow",
"tione:DescribeSavedModels",
"tione:DescribeSnapshot",
"tione:DescribeStatisticsOutputSample",
"tione:DescribeSubmitStatus",
"tione:DescribeSupportedInstanceType",
"tione:DescribeTAIJITemplate",
"tione:DescribeTAIJITemplateList",
"tione:DescribeTJResourceDetail",
"tione:DescribeTaskComparison",
"tione:DescribeTaskComparisons",
"tione:DescribeTensorBoardUrl",
"tione:DescribeTrainingJob",
"tione:DescribeTrainingJobs",
"tione:DescribeUserInfo",
"tione:DescribeVisualization",
"tione:GetComparedPredictions",
"tione:GetInstanceCredentials",
"tione:SendChatMessage",
"tione:AddFavor",
"tione:AddFavorModel",
"tione:CopyUserCosFile",
"tione:CreateAlgoNotebook",
"tione:CreateAlgoPlayer",
"tione:CreateAnnotateTask",
"tione:CreateAutoMLTask",
"tione:CreateBatchJob",
"tione:CreateBatchModelAccTasks",
"tione:CreateBatchTask",
"tione:CreateBillingResourceGroup",
"tione:CreateChatWhiteListUser",
"tione:CreateCodeRepo",
"tione:CreateCodeRepository",
"tione:CreateDataPipelineTask",
"tione:CreateDataProcessTask",
"tione:CreateDataset",
"tione:CreateFeedbackRecord",
"tione:CreateFlowResource",
"tione:CreateFlowScript",
"tione:CreateLifecycleScript",
"tione:CreateModelAccelerateTask",
"tione:CreateModelService",
"tione:CreateNotebook",
"tione:CreateNotebookImage",
"tione:CreateNotebookInstance",
"tione:CreateNotebookLifecycleScript",
"tione:CreatePresignedNotebookInstanceUrl",
"tione:CreatePrivateLink",
"tione:CreateProject",
"tione:CreateTaskComparison",
"tione:CreateTrainingJob",
"tione:CreateTrainingModel",
"tione:CreateTrainingTask",
"tione:DeleteBatchJob",
"tione:DeleteChatWhiteListUser",
"tione:DeleteCodeRepository",
"tione:DeleteDataPipelineTask",
"tione:DeleteDataProcessTask",
"tione:DeleteFavor",
"tione:DeleteFlowResource",
"tione:DeleteModel",
"tione:DeleteModelVersion",
"tione:DeleteNotebookImageRecord",
"tione:DeleteNotebookInstance",
"tione:DeleteNotebookLifecycleScript",
"tione:DeleteTaskComparison",
"tione:ForceKillFlow",
"tione:GrantAlgoVoucher",
"tione:ImportAlgo",
"tione:ModifyBadcasePreviewStatus",
"tione:ModifyDatasetPreviewStatus",
"tione:ModifyFavor",
"tione:ModifyFlowParam",
"tione:ModifyFlowResource",
"tione:ModifyFlowScript",
"tione:RebuildModelServicePod",
"tione:RenameFlow",
"tione:ResumeFlow",
"tione:RunHyperParameters",
"tione:SaveExecutionFlow",
"tione:SaveModel",
"tione:StartBatchJob",
"tione:StartNotebookInstance",
"tione:StopCreatingImage",
"tione:StopFlows",
"tione:StopNotebookInstance",
"tione:StopTaskComparison",
"tione:StopTrainingJob",
"tione:TransferResourceInstancesToResourceGroup",
"tione:UpdateAlgoPlayer",
"tione:UpdateBatchJob",
"tione:UpdateCodeRepository",
"tione:UpdateNotebookInstance",
"tione:UpdateNotebookLifecycleScript",
"tione:UpdateProject",
"tione:DescribeAPIConfigs",
"tione:DescribeDataPipelineTasks",
"tione:DescribeModelAccEngineVersions",
"tione:DescribePublicAlgoGroupList",
"tione:DescribePublicAlgoVersionList",
"tione:DescribeSceneList",
"cam:GetRole",
"cam:ListAttachedRolePolicies",
"vpc:DescribeVpcEx",
"vpc:DescribeSubnetEx",
"cls:DescribeLogsets",
"cls:DescribeTopics",
"tcr:DescribeInstances",
"tcr:DescribeNamespaces",
"tcr:DescribeRepositories",
"monitor:GetMonitorData",
"cos:GetService",
"cos:GetObject",
"cos:GetBucket",
"cos:HeadObject",
"cos:OptionsObject",
"tag:DescribeTagKeys",
"tag:DescribeTagValues",
"tag:AttachResourcesTag",
"tag:DetachResourcesTag",
"tag:GetResources",
"cfs:DescribeCfsFileSystems",
"emr:DescribeInstances",
"cvm:DescribeAddresses",
"emr:DescribeInstancesList",
"cfs:DescribeMountTargets",
"goosefs:DescribeFileSystems"
],
"resource": "*"
}
]
}
策略名称修改为Policy_llm_text_nontag, 单击完成。

第三步:子用户关联策略

用户列表页面找到要关联策略权限的子用户 llm_text_user,单击右侧的授权按钮;
?
?
选择 Policy_llm_text_tag Policy_llm_text_nontag,单击完成即可。
注意:
请确保子用户没有关联 TI-ONE 平台其他的 cam 策略。因 cam 策略是取并集操作,如果有其他 TI-ONE 策略可能会导致资源隔离失败。

第四步:验证

用关联策略的子用户 llm_text_user 身份登录 TI 控制台, 子用户仅能查看和操作关联标签 team:llm_text 的资源。符合预期效果。
?
针对 llm_picture 团队授权也参考上述的授权方法。
?
?
http://www.vxiaotou.com