当我在 python 中从 sagemaker 调用 get_execution_role() 时出现错误。我已经附上了同样的错误。
我已将 SagemakerFullAccess 策略添加到角色和用户。
get_execution_role()是Amazon SageMaker 示例 GitHub 存储库中使用的函数助手。
这些示例是从 Amazon SageMaker 提供的完全托管的 Jupyter 笔记本中执行的。
在这些笔记本中,get_execution_role()将返回作为笔记本创建的一部分传入的 IAM 角色名称。这允许在不更改代码的情况下执行笔记本示例。
在这些笔记本之外,get_execution_role()将返回异常,因为它不知道 SageMaker 需要的角色名称是什么。
要解决此问题,请传递 IAM 角色名称,而不是使用 get_execution_role()。
代替:
role = get_execution_role()
kmeans = KMeans(role=role,
train_instance_count=2,
train_instance_type='ml.c4.8xlarge',
output_path=output_location,
k=10,
data_location=data_location)
你需要做:
role = 'role_name_with_sagemaker_permissions'
kmeans = KMeans(role=role,
train_instance_count=2,
train_instance_type='ml.c4.8xlarge',
output_path=output_location,
k=10,
data_location=data_location)
我为此苦苦挣扎了一段时间,有一些不同的部分,但我相信这些是解决的步骤(根据this doc)
您必须将角色添加到您的 aws 配置文件。转到终端并输入:
~/.aws/config
添加您自己的个人资料
[profile marketingadmin]
role_arn = arn:aws:iam::123456789012:role/marketingadmin
source_profile = default
然后在 AWS 仪表板中编辑信任关系:
添加并更新:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "sagemaker.amazonaws.com",
"AWS": "arn:aws:iam::XXXXXXX:user/YOURUSERNAME"
},
"Action": "sts:AssumeRole"
}
]
}
最后,我点击了上面写着的链接
将此链接提供给可以在控制台中切换角色的用户
添加我的凭据后-它起作用了。
感谢您试用 SageMaker!
您看到的异常已经说明了原因。您使用的凭据不是角色凭据,但很可能是用户。“用户”凭据的格式如下所示:
'arn:aws:iam::accid:user/name' 与角色相对:'arn:aws:iam::accid:role/name'
希望这可以帮助!