Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
Comment puis-je déterminer l’instance de bloc-notes SageMaker qui a effectué un appel d’API particulier si toutes les instances utilisent le même rôle IAM ?
J’ai plusieurs instances de blocs-notes Amazon SageMaker. Ils utilisent tous le même rôle AWS Identity and Access Management (IAM). L’événement AWS CloudTrail pour chaque action d’API affiche le même PrincipalID (nom de session), quelle que soit l’instance de bloc-notes qui a effectué l’action. Je dois déterminer quelle instance de bloc-notes a effectué quelle action d’API.
Brève description
Lorsque plusieurs instances de SageMaker ont le même rôle IAM, un événement CloudTrail n’identifie pas l’instance qui a effectué une action d’API.
L’exemple de journal des événements CloudTrail suivant indique que le PrincipalID est « SageMaker ». Par défaut, PrincipalID n’identifie pas les instances spécifiques de SageMaker.
{ "eventVersion": "1.05", "userIdentity": { "type": "AssumedRole", "principalId": "AAAAAAAAAAAAAAAAAA:SageMaker",
Résolution
Pour créer un script de bloc-notes qui fait la distinction entre les instances, procédez comme suit :
-
Créez un rôle d’exécution IAM pour l’instance de bloc-notes SageMaker. Vous pouvez également utiliser un rôle d’exécution qui existe déjà. Dans les étapes suivantes, le nom de ressource Amazon (ARN) pour le rôle d’exécution est arn:aws:iam::111122223333:role/service-role/AmazonSageMaker-ExecutionRole. Votre ARN pour le rôle d’exécution sera différent.
-
Attachez une politique IAM qui inclut sts:AssumeRole au rôle d’exécution. L’action sts:AssumeRole permet au rôle d’exécution de s’attribuer un nom de session différent.
Exemple :
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::111122223333:role/service-role/AmazonSageMaker-ExecutionRole" } ] }3. Vérifiez que la politique de confiance du rôle d'exécution inclut les autorisations suivantes.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "sagemaker.amazonaws.com" }, "Action": "sts:AssumeRole" }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:root" }, "Action": "sts:AssumeRole", "Condition": { "StringLike": { "aws:PrincipalArn": "arn:aws:iam::111122223333:role/service-role/AmazonSageMaker-ExecutionRole" } } } ] } -
Créez un script de configuration du cycle de vie de Démarrer le bloc-notes similaire au suivant. Cet exemple de script extrait le nom de l’instance du bloc-notes, puis l’utilise comme nom de session. Pour plus d’informations, consultez la section Personnalisation d’une instance de bloc-notes SageMaker à l’aide d’un script LCC.
#Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. #Permission is hereby granted, free of charge, to any person obtaining a copy of this #software and associated documentation files (the "Software"), to deal in the Software #without restriction, including without limitation the rights to use, copy, modify, #merge, publish, distribute, sublicense, and/or sell copies of the Software, and to #permit persons to whom the Software is furnished to do so. #THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, #INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A #PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT #HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION #OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE #SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #!/bin/bash set -ex # Obtain the name of the notebook instance nbname=$(jq -r '.ResourceName' /opt/ml/metadata/resource-metadata.json) echo "Notebook Name = $nbname" # Use the AWS Command Line Interface (AWS CLI) to obtain the Amazon Resource Name (ARN) of the IAM execution role nbinfo=$(aws sagemaker describe-notebook-instance --notebook-instance-name $nbname) nbrole=$(jq -r '.RoleArn' <<< "$nbinfo") echo "Notebook Role = $nbrole" # Obtain the Region of the notebook instance nbregion=$(aws configure get region) echo "Notebook Region = $nbregion" # Write Assume Role Provider Settings to a new config file echo "Writing new config file" cat > /home/ec2-user/.aws/config.new <<EOF1 [default] region=$nbregion role_arn = $nbrole credential_source = Ec2InstanceMetadata role_session_name = $nbname sts_regional_endpoints = regional EOF1 echo "Moving new config to config file" sudo mv /home/ec2-user/.aws/config.new /home/ec2-user/.aws/config # Secure the "config" file so that it can't be deleted/updated without root user permissions sudo chattr +i /home/ec2-user/.aws/config -
Créez ensuite une instance de bloc-notes SageMaker (par exemple, test-2), puis joignez le script de configuration du cycle de vie que vous avez créé à l’étape précédente sous Configuration supplémentaire.
Remarque : Pour créer l’instance de bloc-notes ci-dessus avec l’accès root désactivé, consultez la section Utiliser le contrôle de l’accès root à une instance de bloc-notes SageMaker. Après avoir créé l’instance de bloc-notes, définissez le champ RootAccess sur Désactivé. Cette action empêche l’utilisateur de supprimer ou de mettre à jour les fichiers de configuration.
Identifiez l’instance du bloc-notes dans CloudTrail
Pour identifier l’instance de bloc-notes qui a effectué une action d’API, consultez l’événement CloudTrail. Sous l’objet UserIdentity, les PrincipalID et arn indiquent le nom de l’instance de bloc-notes.
Par exemple, le détail de l’événement suivant montre que l’instance de bloc-notes SageMaker test-2 a effectué l’appel d’API.
{ "eventVersion": "1.05", "userIdentity": { "type": "AssumedRole", "principalId": "AAAAAAAAAAAAAAAAAAAA:test-2", "arn": "arn:aws:sts::111122223333:assumed-role/AmazonSageMaker-ExecutionRole/test-2", "accountId": "111122223333", "accessKeyId": "AAAAAAAAAAAAAAAAAAAA", "sessionContext": { "sessionIssuer": { "type": "Role", "principalId": "AAAAAAAAAAAAAAAAAAAA", "arn": "arn:aws:iam::111122223333:role/service-role/AmazonSageMaker-ExecutionRole", "accountId": "111122223333", "userName": "AmazonSageMaker-ExecutionRole" }, "webIdFederationData": {}, "attributes": { "mfaAuthenticated": "false", "creationDate": "2020-09-12T00:45:04Z" } }, "invokedBy": "im.amazonaws.com" }, "eventTime": "2020-09-12T00:49:04Z", "eventSource": "sagemaker.amazonaws.com", "eventName": "CreateEndpoint", "awsRegion": "us-east-1", "sourceIPAddress": "im.amazonaws.com", "userAgent": "im.amazonaws.com", "requestParameters": { "endpointName": "sagemaker-mxnet-ep", "endpointConfigName": "sagemaker-mxnet-epc", "tags": [] }, "responseElements": { "endpointArn": "arn:aws:sagemaker:us-east-1:111122223333:endpoint/sagemaker-mxnet-ep" }, "requestID": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "eventID": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "eventType": "AwsApiCall", "recipientAccountId": "111122223333" }
Informations connexes
- Balises
- Amazon SageMaker
- Langue
- Français

Contenus pertinents
- demandé il y a 3 ans
- demandé il y a 2 ans
- Réponse acceptéedemandé il y a 3 mois
- demandé il y a 3 ans
- demandé il y a 2 ans
AWS OFFICIELA mis à jour il y a 4 ans