はじめに
こちらのサイト を参考に Sagemaker を触ってみようとしたところ、
トレーニング部分で sagemaker unable to assume role
という
エラーが発生しました。
結論としては下の図のようにSagemakerにアタッチするロールのパスを
/service-role/
に必要があったのですが、その設定がコンソール上から
出来ず、aws cli で行う必要がありました。
同じようなことがあったときに迷わないようにメモしておきます。
設定方法
今回作るのはSagemakerのサービスロールなので、こういうファイルを作成します。
$ cat sage.json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "sagemaker.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
以下のコマンドを実行すれば、パスが /service-role/
のロールが出来ます。
$ aws iam create-role --role-name [ロール名] --path /service-role/ --assume-role-policy-document file://sage.json
{
"Role": {
"Path": "/service-role/",
"RoleName": "[ロール名]",
"RoleId": "XXXXXXXXXXXX",
"Arn": "arn:aws:iam::XXXXXXXX:role/service-role/[ロール名]",
"CreateDate": "2018-12-08T19:20:28Z",
"AssumeRolePolicyDocument": {
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Principal": {
"Service": "sagemaker.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
}
}
}
後は AmazonSageMakerFullAccess など必要なポリシーをアタッチすればOK。
注意
json ファイルの指定には、file://sage.json
のようにする必要があります。
file://
無しだとエラーが返されました。
$ aws iam create-role --role-name TestRole --path /service-role/ --assume-role-policy-document sage.json
An error occurred (MalformedPolicyDocument) when calling the CreateRole operation: This policy contains invalid Json