翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
モデルパッケージデプロイへのアーティファクトアクセスを制限する
アカウント間でモデルパッケージを共有する場合、消費アカウントの実行ロールは、生成アカウントのモデルアーティファクトs3:GetObjectに必要です。デフォルトでは、このアクセス許可はロールが使用されるたびに適用されます。その結果、ロールを使用するプリンシパルは、モデルパッケージのデプロイ中だけでなく、ノートブック、トレーニングジョブ、または直接 API コールを通じてアーティファクトを読み取ることができます。
モデルパッケージのデプロイのみがアーティファクトを読み取れるように、そのアクセスを絞り込むことができます。デプロイ中、SageMaker AI は引き受ける実行ロールセッションsagemaker:ModelPackageArnにセッションタグを適用します。タグ値は、デプロイされるモデルパッケージの ARN です。したがって、このタグを必要とするバケットポリシーは、デプロイセッションへのアクセスのみを許可します。
これには、3 つの要素が連携する必要があります。3 つすべてが設定するユーザーです。SageMaker AI はセッションタグのみを提供します。
-
信頼ポリシー
ManagedBy=SageMakerが SageMaker AI サービスプリンシパルのみが引き受けることを許可する、タグ付けされた実行ロール。 -
SageMaker AI 以外のユーザーがそのロールを引き受けたり、
sagemaker:ModelPackageArnタグキーを設定したりできないようにするサービスコントロールポリシー。これがないと、 を呼び出すアクセス許可を持つプリンシパルがタグ自体を提供する AWS STS 可能性があります。 -
セッションに タグが付いていて、呼び出し元が組織にあり、ロールに がタグ付けされている
s3:GetObject場合にのみ に付与する Amazon S3 バケットポリシーManagedBy=SageMaker。
重要
SCP は、セッションタグを信頼できるものにします。SCP なしでバケットポリシーを適用すると、実行ロールを直接引き受けることができるプリンシパルは、タグを独自のセッションsagemaker:ModelPackageArnにアタッチし、バケットポリシーを満たすことができます。
ステップ 1: 実行ロールにタグを付けてスコープを設定する
消費アカウントで、実行ロールにタグを付けManagedBy=SageMaker、その信頼ポリシーを SageMaker AI サービスプリンシパルに制限します。信頼ポリシーでは、 sts:AssumeRoleと の両方を許可する必要がありますsts:TagSession。がない場合sts:TagSession、SageMaker AI はsagemaker:ModelPackageArnセッションタグを適用できず、Amazon S3 はステップ 3 のバケットポリシーに必要なすべての読み取りを拒否します。
{ "RoleName": "GovernedModelExecutionRole", "Tags": [ { "Key": "ManagedBy", "Value": "SageMaker" } ], "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": { "Service": "sagemaker.amazonaws.com" }, "Action": [ "sts:AssumeRole", "sts:TagSession" ] }] } }
ステップ 2: サービスコントロールポリシーを追加する
組織に次の SCP をアタッチします。最初のステートメントでは、SageMaker AI サービスプリンシパルのみが にタグ付けされたロールを引き受けることができますManagedBy=SageMaker。2 番目では、SageMaker AI のみがsagemaker:ModelPackageArnタグキーを設定できます。タグキーは、バケットポリシーが評価する唯一のタグキーです。詳細については、「サービスコントロールポリシーの作成、更新、削除」を参照してください。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyNonSageMakerAssumeOnManagedRoles", "Effect": "Deny", "Action": "sts:AssumeRole", "Resource": "*", "Condition": { "StringEquals": { "aws:ResourceTag/ManagedBy": "SageMaker" }, "StringNotEquals": { "aws:PrincipalServiceName": "sagemaker.amazonaws.com" } } }, { "Sid": "DenyTaggingProtectedKeysUnlessSageMaker", "Effect": "Deny", "Action": [ "iam:TagRole", "iam:UntagRole", "sts:TagSession" ], "Resource": "*", "Condition": { "StringLike": { "aws:RequestTag/sagemaker:ModelPackageArn": "*" }, "StringNotEquals": { "aws:PrincipalServiceName": "sagemaker.amazonaws.com" } } } ] }
注記
どちらのステートメントも StringNotEqualsで を使用します。キーがない場合aws:PrincipalServiceName、 は true に評価されます。したがって、SCP は、サービスプリンシパルをまったく持たないセッションを含め、メンバーアカウントのすべての IAM ユーザーとロールに対してこれらのアクションを拒否します。SCPsは、 AWS サービスが独自のサービスプリンシパルに対して行う呼び出しには適用されません。SageMaker AI サービスプリンシパルにのみアクセス権を付与するロールの信頼ポリシーは、他の AWS サービスを除外するものです。
ステップ 3: Amazon S3 バケットポリシーを追加する
生成アカウントで、モデルアーティファクトを保持するバケットに次のポリシーを適用します。3 つの条件はすべて保持する必要があります。Amazon S3 は、欠落しているセッションを拒否します。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowOnlyModelPackageDeployments", "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::model-artifacts-bucket/model-package-prefix/*", "Condition": { "StringLike": { "aws:PrincipalTag/sagemaker:ModelPackageArn": "arn:aws:sagemaker:*:producer-account-id:model-package/model-package-group/*" }, "StringEquals": { "aws:PrincipalOrgID": "o-organization-id", "aws:PrincipalTag/ManagedBy": "SageMaker" } } } ] }
これらの条件Principalとともに の値*で を使用すると、ManagedBy=SageMakerデプロイタグが付けられた組織内の任意のロールがアーティファクトを読み取ることができます。消費ロールごとにポリシーを編集する必要はありません。モデルパッケージ ARN のワイルドカードは、グループ内のすべてのバージョンを対象としています。
重要
単一のモデルパッケージグループのアーティファクトResourceの範囲を指定します。セッションタグはオブジェクトパスではなくグループのワイルドカードに対してチェックされるため、複数のグループにまたがるプレフィックスを使用すると、1 つのモデルパッケージのデプロイで別のグループのアーティファクトを読み取ることができます。
アーティファクトがカスタマーマネージド AWS KMS キーで暗号化されている場合、実行ロールkms:Decryptはそのキーにも必要です。キーポリシーで付与します。IAM ポリシーだけでは不十分です。
アーティファクトアクセスのモニタリング
アカウントは、セッションのタグ付けとその結果のアクセス決定の両方を記録します。
-
CloudTrail では、実行ロールの
AssumeRoleイベントに の下のセッションタグが一覧表示されますrequestParameters。sagemaker:ModelPackageArnが存在し、デプロイしたモデルパッケージと一致することを確認します。 -
Amazon S3 データイベントまたはサーバーアクセスログでは、アーティファクトプレフィックスに対する
GetObjectリクエストは、各読み取りが許可または拒否されたかどうかを示すため、デプロイ以外のアクセスが拒否されたことを確認できます。
ポリシーを本番稼働用バケットに適用する前に、IAM Policy Simulator でポリシーを評価して、デプロイセッションが許可され、 タグのないセッションが拒否されたことを確認できます。詳細については、「IAM Policy Simulator を使用した IAM ポリシーのテスト」を参照してください。