サーバーワークスの村上です。
このブログでは掲題の件について、設定方法をご紹介します。
イメージ
設定イメージは以下のとおりです。
IAMユーザーとSageMaker AI Studioのユーザープロファイルにタグを付与し、それをアクセス制御に活用します。なお、IAMロールでも同じ考え方になります。IAMユーザーと記載しますが適宜読み替えてください。
前提
すでにSageMakerのドメインは作成されているものとします。
手順
SageMaker AI Studioのユーザープロファイル作成
通常の手順でユーザープロファイルを作成します。

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

IAMユーザーにタグを付与
次にIAMユーザーにタグを付与します。このとき、タグの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ポリシーは、公式ドキュメントと記載が異なります。
公式ドキュメントではAllowステートメントで記述しているのに対し、私のブログではDenyで記載しています。
公式ドキュメントでは指定のタグが付与されたユーザープロファイルにのみsagemaker:CreatePresignedDomainUrl
のアクションを許可しています。しかし、例えばSageMakerFullAccess
などの権限が強めのIAMポリシーを別途付与している場合、せっかく厳密に書いた許可アクションの上に更に強い権限を許可していることになり、結果、すべてのユーザープロファイルにアクセスできてしまうことになります。
よって本ブログで記載したIAMポリシーでは、「すべてのユーザープロファイルへのアクセスを拒否する。ただし指定のタグが付与されたユーザープロファイルは除く」というDenyステートメントを記載しています。こうすることで、別のIAMポリシーでユーザープロファイルへのアクセスが許可されていた場合でも、アクセスを制限できます(DenyはAllowよりも優先されるため)。
IAMユーザーにIAMポリシーを適用
IAMユーザーに先ほど作成したIAMポリシーを適用します。IAMユーザーが複数いる場合はIAMグループから適用することを推奨します。
以上で設定は完了です。
動作確認
別のユーザープロファイルへアクセスしたとき
アクセスが拒否されました。
アクセスが正しく拒否されるこの挙動は、仮にIAMユーザーがAdministrator権限などの広い権限を持っている場合でも同様の効果があります。Denyステートメントで記載したことに起因します。
自分のユーザープロファイルへアクセスしたとき
アクセスできました。
以上になります。