SageMaker AI Studioのユーザープロファイルに特定のユーザーだけアクセスできるようにする

記事タイトルとURLをコピーする

サーバーワークスの村上です。

このブログでは掲題の件について、設定方法をご紹介します。

イメージ

設定イメージは以下のとおりです。

IAMユーザーとSageMaker AI Studioのユーザープロファイルにタグを付与し、それをアクセス制御に活用します。なお、IAMロールでも同じ考え方になります。IAMユーザーと記載しますが適宜読み替えてください。

前提

すでにSageMakerのドメインは作成されているものとします。

手順

SageMaker AI Studioのユーザープロファイル作成

通常の手順でユーザープロファイルを作成します。

作成済みのドメインを選択しAdd userを選択する

作成の際、忘れずにタグを付与しましょう

忘れずにタグを付与する

IAMユーザーにタグを付与

次にIAMユーザーにタグを付与します。このとき、タグのValueはユーザープロファイルに付与したタグのValueと同じにすることに注意です。

タグのValueはユーザープロファイルに付与したタグのValueと同じにする

IAMポリシーを作成

次にIAMポリシーを作成します。

ポリシー作成時はJSONで編集する画面に切り替えてください。

ポリシーの内容は以下のとおりです。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "DenySageMakerProfileAccessUnlessTagsMatch",
            "Effect": "Deny",
            "Action": [
                "sagemaker:CreatePresignedDomainUrl"
            ],
            "Resource": "arn:aws:sagemaker:*:*:user-profile/*",
            "Condition": {
                "StringNotEquals": {
                    "sagemaker:ResourceTag/studiouserid": "${aws:PrincipalTag/studiouserid}"
                }
            }
        },
        {
            "Sid": "AmazonSageMakerPresignedUrlPolicy",
            "Effect": "Allow",
            "Action": [
                "sagemaker:List*",
                "sagemaker:Describe*",
                "sagemaker:CreatePresignedDomainUrl"
            ],
            "Resource": "*"
        }
    ]
}

補足

上記のIAMポリシーは、公式ドキュメントと記載が異なります。

docs.aws.amazon.com

公式ドキュメントではAllowステートメントで記述しているのに対し、私のブログではDenyで記載しています。

公式ドキュメントでは指定のタグが付与されたユーザープロファイルにのみsagemaker:CreatePresignedDomainUrlのアクションを許可しています。しかし、例えばSageMakerFullAccessなどの権限が強めのIAMポリシーを別途付与している場合、せっかく厳密に書いた許可アクションの上に更に強い権限を許可していることになり、結果、すべてのユーザープロファイルにアクセスできてしまうことになります。

よって本ブログで記載したIAMポリシーでは、「すべてのユーザープロファイルへのアクセスを拒否する。ただし指定のタグが付与されたユーザープロファイルは除く」というDenyステートメントを記載しています。こうすることで、別のIAMポリシーでユーザープロファイルへのアクセスが許可されていた場合でも、アクセスを制限できます(DenyはAllowよりも優先されるため)。

IAMユーザーにIAMポリシーを適用

IAMユーザーに先ほど作成したIAMポリシーを適用します。IAMユーザーが複数いる場合はIAMグループから適用することを推奨します。

以上で設定は完了です。

動作確認

別のユーザープロファイルへアクセスしたとき

アクセスが拒否されました。

アクセスが正しく拒否されるこの挙動は、仮にIAMユーザーがAdministrator権限などの広い権限を持っている場合でも同様の効果があります。Denyステートメントで記載したことに起因します。

自分のユーザープロファイルへアクセスしたとき

アクセスできました。

以上になります。

村上博哉 (執筆記事の一覧)

2020年4月入社。機械学習が好きです。記事へのご意見など:hiroya.murakami@serverworks.co.jp