本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用角色管理器 (Amazon CDK)
使用 wit Amazon Cloud Development Kit (Amazon CDK) h Amazon SageMaker 角色管理器以编程方式创建角色和设置权限。您可以使用 Amazon CDK 来完成使用可以执行的任何任务 Amazon Web Services Management Console。的编程访问CDK使您可以更轻松地提供权限,让您的用户能够访问特定资源。有关的更多信息 Amazon CDK,请参阅什么是 Amazon CDK?
重要
必须使用 SageMaker 计算角色角色来创建 SageMaker 计算角色。有关计算角色的更多信息,请参阅 SageMaker 计算机角色。有关可用于在中创建计算角色的代码 Amazon CDK,请参阅向计算角色授予权限。
以下是可在 Amazon CDK中执行的任务示例:
-
为机器学习 (ML) IAM 角色创建具有精细权限的角色,例如数据科学家和MLOps工程师。
-
向来自机器学习角色或机器学习活动的CDK构造授予权限。
-
设置机器学习活动条件参数。
-
启用全球 Amazon VPC 和 Amazon Key Management Service 条件并为其设置值。
-
为用户提供各种版本的机器学习活动供选择,而不会导致他们的访问中断。
有些与机器学习 (ML) 相关的常见 Amazon 任务 SageMaker 需要特定的IAM权限。在 Amazon SageMaker 角色管理器中,执行任务的权限定义为机器学习活动。机器学习活动指定了一组与该IAM角色关联的权限。例如,Amazon SageMaker Studio Classic 的机器学习活动拥有用户访问 Studio Classic 所需的所有权限。有关机器学习活动的更多信息,请参阅 机器学习活动参考。
创建角色时,首先要定义机器学习角色或机器学习活动的构造。构造是 Amazon CDK 堆栈中的资源。例如,结构可以是 Amazon S3 存储桶、Amazon VPC 子网或IAM角色。
创建角色或活动时,您可以将与该角色或活动关联的权限限制为特定资源。例如,您可以将活动自定义为仅提供对 Amazon 内特定子网的权限VPC。
定义权限后,您可以创建角色,然后将这些角色传递给其他资源,例如 SageMaker 笔记本实例。
以下是 Typescript 中可用于完成的任务的代码示例。CDK创建活动时,需要为活动的构造指定 ID 和选项。这些选项是指定活动所需参数(如 Amazon S3)的字典。您可以为没有必需参数的活动传递一个空字典。
以下代码创建了一个数据科学家机器学习角色,其中包含一组特定于该角色的机器学习活动。来自机器学习活动的权限仅适用于角色结构中指定的Amazon VPC 和 Amazon KMS 配置。以下代码为数据科学家角色创建了一个类。活动列表中定义了机器学习活动。VPC权限和KMS权限被定义为活动列表之外的可选参数。
定义类后,可以在 Amazon CDK 堆栈中创建角色作为构造。您也可以创建笔记本实例。使用您在以下代码中创建的IAM角色的用户可以在登录自己的 Amazon 账户时访问笔记本实例。
export class myCDKStack extends cdk.Stack { constructor(scope: cdk.App, id: string, props?: cdk.StackProps) { super(scope, id, props); const persona = new Persona(this, 'example-persona-id', { activities: [ Activity.accessAwsServices(this, '
example-id1
', {}) ] }); const role = persona.createRole(this, 'example-IAM-role-id
', 'example-IAM-role-name
'); } }
以下代码创建了一个数据科学家机器学习角色,其中包含一组特定于该角色的机器学习活动。来自机器学习活动的权限仅适用于角色结构中指定的VPC和KMS配置。以下代码为数据科学家角色创建了一个类。活动列表中定义了机器学习活动。Amazon VPC 权限和 Amazon KMS 权限定义为活动列表之外的可选参数。
定义类后,可以在 Amazon CDK 堆栈中创建角色作为构造。您也可以创建笔记本实例。使用您在以下代码中创建的IAM角色的用户可以在登录自己的 Amazon 账户时访问笔记本实例。
export class myCDKStack extends cdk.Stack { constructor(scope: cdk.App, id: string, props?: cdk.StackProps) { super(scope, id, props); const persona = new Persona(this, '
example-persona-id
', { activities: [ Activity.runStudioAppsV2(this, 'example-id1
', {}), Activity.manageJobs(this, 'example-id2
', {rolesToPass: [iam.Role.fromRoleName('example-IAM-role-name
')]}), Activity.manageModels(this, 'example-id3
', {rolesToPass: [iam.Role.fromRoleName('example-IAM-role-name
')]}), Activity.manageExperiments(this, 'example-id4
', {}), Activity.visualizeExperiments(this, 'example-id5
', {}), Activity.accessS3Buckets(this, 'example-id6
', {s3buckets: [s3.S3Bucket.fromBucketName('amzn-s3-demo-bucket
')]}) ], // optional: to configure VPC permissions subnets: [ec2.Subnet.fromSubnetId('example-VPC-subnet-id
')], securityGroups: [ec2.SecurityGroup.fromSecurityGroupId('example-VPC-security-group-id
')], // optional: to configure KMS permissions dataKeys: [kms.Key.fromKeyArn('example-KMS-key-ARN
')], volumeKeys: [kms.Key.fromKeyArn('example-KMS-key-ARN
')], }); const role = persona.createRole(this, 'example-IAM-role-id
', 'example-IAM-role-name
'); const notebookInstance = new CfnNotebookInstance(this, 'example-notebook-instance-name
', { RoleArn: role.RoleArn, ...}); } }
以下代码创建了一个机器学习 Ops 角色,其中包含一组特定于该角色的机器学习活动。来自机器学习活动的权限仅适用于角色结构中指定的Amazon VPC 和 Amazon KMS 配置。以下代码为机器学习 Ops 角色创建了一个类。活动列表中定义了机器学习活动。VPC权限和KMS权限被定义为活动列表之外的可选参数。
定义类后,可以在 Amazon CDK 堆栈中创建角色作为构造。您也可以创建 Amazon SageMaker Studio 经典版用户个人资料。使用您在以下代码中创建的IAM角色的用户可以在登录自己的 Amazon 账户时打开 SageMaker Studio Classic。
export class myCDKStack extends cdk.Stack { constructor(scope: cdk.App, id: string, props?: cdk.StackProps) { super(scope, id, props); const persona = new Persona(this, '
example-persona-id
', { activities: [ Activity.runStudioAppsV2(this, 'example-id1
', {}), Activity.manageModels(this, 'example-id2
', {rolesToPass: [iam.Role.fromRoleName('example-IAM-role-name
')]}), Activity.manageEndpoints(this, 'example-id3
',{rolesToPass: [iam.Role.fromRoleName('example-IAM-role-name
')]}), Activity.managePipelines(this, 'example-id4
', {rolesToPass: [iam.Role.fromRoleName('example-IAM-role-name
')]}), Activity.visualizeExperiments(this, 'example-id5
', {}) ], subnets: [ec2.Subnet.fromSubnetId('example-VPC-subnet-id
')], securityGroups: [ec2.SecurityGroup.fromSecurityGroupId('example-VPC-security-group-id
')], dataKeys: [kms.Key.fromKeyArn('example-KMS-key-ARN
')], volumeKeys: [kms.Key.fromKeyArn('example-KMS-key-ARN
')], }); const role = persona.createRole(this, 'example-IAM-role-id
', 'example-IAM-role-name
'); let userProfile = new CfnNUserProfile(this, 'example-Studio Classic-profile-name
', { RoleName: role.RoleName, ... }); } }
以下代码创建了一个机器学习 Ops 角色,其中包含一组特定于该角色的机器学习活动。以下代码为机器学习 Ops 角色创建了一个类。活动列表中定义了机器学习活动。
定义类后,可以在 Amazon CDK 堆栈中创建角色作为构造。您也可以创建笔记本实例。该代码向 Lambda 函数的IAM角色授予机器学习活动的权限。
export class myCDKStack extends cdk.Stack { constructor(scope: cdk.App, id: string, props?: cdk.StackProps) { super(scope, id, props); const persona = new Persona(this, '
example-persona-id
', { activities: [ Activity.runStudioAppsV2(this, 'example-id1
', {}), Activity.manageModels(this, 'example-id2
', {rolesToPass: [iam.Role.fromRoleName('example-IAM-role-name
')]}), Activity.manageEndpoints(this, 'example-id3
',{rolesToPass: [iam.Role.fromRoleName('example-IAM-role-name
')]}), Activity.managePipelines(this, 'example-id4
', {rolesToPass: [iam.Role.fromRoleName('example-IAM-role-name
')]}), Activity.visualizeExperiments(this, 'example-id5
', {}) ], }); const lambdaFn = lambda.Function.fromFunctionName('example-lambda-function-name
'); persona.grantPermissionsTo(lambdaFn); } }
以下代码创建了一个机器学习活动,并从该活动中创建了一个角色。该活动的权限仅适用于您为用户指定的VPC和KMS配置。
export class myCDKStack extends cdk.Stack { constructor(scope: cdk.App, id: string, props?: cdk.StackProps) { super(scope, id, props); const activity = Activity.manageJobs(this, '
example-activity-id
', { rolesToPass: [iam.Role.fromRoleName('example-IAM-role-name
')], subnets: [ec2.Subnet.fromSubnetId('example-VPC-subnet-id
')], securityGroups: [ec2.SecurityGroup.fromSecurityGroupId('example-VPC-security-group-id
')], dataKeys: [kms.Key.fromKeyArn('example-KMS-key-ARN
')], volumeKeys: [kms.Key.fromKeyArn('example-KMS-key-ARN
')], }); const role = activity.createRole(this, 'example-IAM-role-id
', 'example-IAM-role-name
'); } }
以下代码为单个 ML 活动创建IAM角色。
export class myCDKStack extends cdk.Stack { constructor(scope: cdk.App, id: string, props?: cdk.StackProps) { super(scope, id, props); const activity = Activity.manageJobs(this, '
example-activity-id
', { rolesToPass: [iam.Role.fromRoleName('example-IAM-role-name
')], }); activity.create_role(this, 'example-IAM-role-id
', 'example-IAM-role-name
') } }