[Amazon SageMaker]ノートブックインスタンスへのアクセスを特定のユーザーに制限する

2019.08.09

コンニチハ、千葉です。

SageMakerを利用する場合、IAMユーザーによってアクセスするノートブックインスタンスを分けたいという場合があります。「IPアドレスでノートブックインスタンスへのアクセスを制限する」という方法が、公式ドキュメントにありますが、今回はIPアドレスではなく、特定のIAMユーザーならアクセスできるという制限を入れてみます。

やってみた

公式ドキュメントを参照すると、ノートブックインスタンスにアクセスする場合、CreatePresignedNotebookInstanceUrl が呼ばれノートブックへのアクセス用のURLが発行されます。動作としては、マネージメントコンソールからノートブックにアクセスするリンクをクリックした時にコールされます。そのため、マネージメントコンソールにログインしているIAMユーザー(またはIAMグループ、IAMロール)のIAMポリシーに制限を追加します。

特定のノートブックへのアクセス

AWSへログインしたIAMユーザーに対して、特定の1つのノートブックのみにアクセスを限定します。 現在AWSへログインしているIAMユーザー、グループ、IAMロールのポリシーに以下を追加しましょう。指定したのノートブックのみにアクセスできます。

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Action": "sagemaker:CreatePresignedNotebookInstanceUrl",
"NotResource": "arn:aws:sagemaker:ap-northeast-1:1234567890:notebook-instance/chiba42"
},
{
"Effect": "Allow",
"Action": "sagemaker:CreatePresignedNotebookInstanceUrl",
"Resource": "arn:aws:sagemaker:ap-northeast-1:1234567890:notebook-instance/chiba42"
}
]
}

NotResourceResource には、SageMakerノートブックインスタンスのARNを指定します。

特定のタグがついてるインスタンスへのアクセス

次は、進化版です。特定タグがついてるノートブックへアクセスできるようにしてみます。例えば5インスタンスあって、Aチームに自由に使ってもらうみたいなケースです。 これは、ノートブックに特定のタグがあったら利用できるみたいにします。

例えば、ノートブックインスタンスにkey: TeamNameValue: A というタグをつけます。このタグを付けたインスタンスのみにアクセスできるIAMポリシーを考えます。

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Action": "sagemaker:CreatePresignedNotebookInstanceUrl",
"Resource": "*",
"Condition": {
"StringNotEquals": {
"sagemaker:ResourceTag/TeamName": "A"
}
}
},
{
"Effect": "Allow",
"Action": "sagemaker:CreatePresignedNotebookInstanceUrl",
"Resource": "*",
"Condition": {
"StringEquals": {
"sagemaker:ResourceTag/TeamName": "A"
}
}
}
]
}

こちらを、IAMユーザーにアタッチすると、タグに付いたノートブックのみしかアクセスできなくなります。

さいごに

SageMaker ノートブックインスタンスへのアクセス制限を、IAMベースでやってみました。アクセスを分離したい場合にお試しください!

参考