使用角色管理器 (Amazon CDK) - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用角色管理器 (Amazon CDK)

将 Amazon Cloud Development Kit (Amazon CDK) 与 Amazon SageMaker 角色管理器配合使用,以编程方式创建角色并设置权限。您可以使用 Amazon CDK 来完成任何可以使用 Amazon Web Services Management Console 执行的任务。通过 CDK 的编程访问权限,可以更轻松地为用户提供访问特定资源的权限。有关 Amazon CDK 的更多信息,请参阅什么是 Amazon CDK?

重要

您必须使用“SageMaker 计算角色”角色来创建 SageMaker 计算角色。有关计算角色的更多信息,请参阅 SageMaker 计算角色。有关可用于在 Amazon CDK 中创建计算角色的代码,请参阅向计算角色授予权限

以下是可在 Amazon CDK 中执行的任务示例:

  • 为数据科学家和 MLOps 工程师等机器学习 (ML) 角色创建具有精细权限的 IAM 角色。

  • 为来自机器学习角色或机器学习活动的 CDK 构造授予权限。

  • 设置机器学习活动条件参数。

  • 启用全局 Amazon VPC 和 Amazon Key Management Service 条件并为其设置值。

  • 为用户提供各种版本的机器学习活动供选择,而不会导致他们的访问中断。

有些与 SageMaker 的机器学习 (ML) 相关的常见 Amazon 任务需要特定的 IAM 权限。在 Amazon SageMaker 角色管理器中,执行任务的权限定义为机器学习活动。机器学习活动指定了一组与 IAM 角色关联的权限。例如,Amazon SageMaker Studio 的机器学习活动拥有用户访问 Studio 所需的所有权限。有关机器学习活动的更多信息,请参阅 机器学习活动参考

创建角色时,首先要定义机器学习角色或机器学习活动的构造。构造是 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('DOC-EXAMPLE-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。

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-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'); } }

以下代码为单个机器学习活动创建了 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') } }