当我进入 SageMaker 中的笔记本实例并在 linear_learner_mnist 示例中创建模型时,即使我具有附加了 AmazonSageMakerFullAccess 和 AssumeRole 附加策略的角色,我也会收到错误。 当我将 AdministratorAccesspolicy 添加到角色时 - 一切正常。我在这里缺少什么?
角色存在并附加
Resources:
SageMakerExecutionRole:
Condition: RoleArnEmpty
Type: "AWS::IAM::Role"
Properties:
AssumeRolePolicyDocument:
Statement:
- Effect: "Allow"
Principal:
Service:
- "sagemaker.amazonaws.com"
Action:
- sts:AssumeRole
ManagedPolicyArns:
- "arn:aws:iam::aws:policy/AmazonSageMakerFullAccess"
Path: "/service-role/"
Policies:
Fn::If:
- S3BucketNotEmpty
-
- PolicyName: SageMakerS3BucketAccess
PolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Action:
- s3:*
Resource:
- !Sub 'arn:aws:s3:::${SageMakerS3Bucket}'
- !Sub 'arn:aws:s3:::${SageMakerS3Bucket}/*'
- Ref: AWS::NoValue
ClientError:调用时发生错误(ValidationException) CreateTrainingJob 操作:无法承担角色 arn:aws:iam::XXX:role/sagemaker-stack-SageMakerExecutionRole-1JT7AT4OPUK9R。 请确保该角色存在并允许主体 “sagemaker.amazonaws.com”担任该角色。
令我惊讶的是,当您添加 AdministratorAccess 策略时,一切都正常。该错误以及如何更正该错误记录在 https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-roles.html。
Amazon SageMaker 用户可以使用 IAM 角色(称为执行角色)授予这些权限。用户在进行以下 API 调用时传递角色:CreateNotebookInstance、CreateHyperParameterTuningJob、CreateTrainingJob 和 CreateModel。
您将以下信任策略附加到 IAM 角色,该角色授予 Amazon SageMaker 委托人代入该角色的权限,并且对于所有执行角色都是相同的:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "sagemaker.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
在身份和访问管理 (IAM) 控制台中,我将上面的语句部分添加到我的角色的信任关系部分下的信任策略中,它为我修复了此错误。
我尝试根据您提供的 CloudFormation 模板创建 IAM 角色,并获得了 ARN 角色 - arn:aws:iam::xxx:role/service-role/test-iam-SageMakerExecutionRole-187YIQM7UMMXF。
我认为问题是您在创建训练作业时设置的角色 ARN 不正确。您可能需要在角色名称前添加“/service-role”。