

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Gestion d'accès IAM
<a name="build-and-manage-access"></a>

Les sections suivantes décrivent les exigences Gestion des identités et des accès AWS (IAM) pour Amazon SageMaker Pipelines. Pour obtenir un exemple de la façon dont vous pouvez implémenter ces autorisations, consultez [Conditions préalables](define-pipeline.md#define-pipeline-prereq).

**Topics**
+ [Autorisations de rôle de pipeline](#build-and-manage-role-permissions)
+ [Autorisations d’étape de pipeline](#build-and-manage-step-permissions)
+ [Configuration CORS avec des compartiments Amazon S3](#build-and-manage-cors-s3)
+ [Personnalisation de la gestion des accès pour les tâches de pipelines](#build-and-manage-step-permissions-prefix)
+ [Personnalisation de l’accès aux versions d’un pipeline](#build-and-manage-step-permissions-version)
+ [Politiques de contrôle des services avec les pipelines](#build-and-manage-scp)

## Autorisations de rôle de pipeline
<a name="build-and-manage-role-permissions"></a>

Votre pipeline nécessite un rôle d'exécution de pipeline IAM qui est transmis à Pipelines lorsque vous créez un pipeline. Le rôle de l'instance d' SageMaker IA que vous utilisez pour créer le pipeline doit avoir une politique avec l'`iam:PassRole`autorisation qui spécifie le rôle d'exécution du pipeline. Cela est dû au fait que l'instance a besoin d'une autorisation pour transmettre votre rôle d'exécution de pipeline au service Pipelines afin de l'utiliser pour créer et exécuter des pipelines. Pour plus d’informations sur les rôles IAM, consultez [Rôles IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html).

Votre rôle d’exécution de pipeline nécessite les autorisations suivantes :
+ Vous pouvez utiliser un rôle unique ou personnalisé pour chacune des étapes d'une tâche d' SageMaker IA de votre pipeline (plutôt que le rôle d'exécution du pipeline, qui est utilisé par défaut). Assurez-vous que votre rôle d'exécution de pipeline a ajouté une politique avec l'`iam:PassRole`autorisation qui spécifie chacun de ces rôles.
+  Les autorisations `Create` et `Describe` pour chacun des types de tâches dans le pipeline. 
+  Autorisations Amazon S3 pour l'utilisation de la fonction `JsonGet`. Vous contrôlez l’accès à vos ressources Amazon S3 à l’aide de politiques basées sur les ressources et de politiques basées sur l’identité. Une politique basée sur les ressources est appliquée à votre compartiment Amazon S3 et accorde à Pipelines l’accès au compartiment. Une politique basée sur l’identité permet à votre pipeline de passer des appels Amazon S3 à partir de votre compte. Pour plus d’informations sur les politiques basées sur l’identité et les politiques basées sur les ressources, consultez [Politiques basées sur l’identité et politiques basées sur une ressource](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_identity-vs-resource.html). 

  ```
  {
      "Action": [
          "s3:GetObject"
      ],
      "Resource": "arn:aws:s3:::<your-bucket-name>/*",
      "Effect": "Allow"
  }
  ```

## Autorisations d’étape de pipeline
<a name="build-and-manage-step-permissions"></a>

Les pipelines incluent des étapes qui exécutent des tâches d' SageMaker IA. Pour que les étapes de pipeline puissent exécuter ces tâches, elles nécessitent un rôle IAM dans votre compte qui fournit l’accès à la ressource nécessaire. Ce rôle est transmis au responsable du service SageMaker AI par votre pipeline. Pour plus d’informations sur les rôles IAM, consultez [Rôles IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html). 

Par défaut, chaque étape assume le rôle d'exécution du pipeline. Vous pouvez éventuellement transmettre un rôle différent à l'une des étapes de votre pipeline. Cela garantit que le code de chaque étape n'a pas la capacité d'affecter les ressources utilisées dans d'autres étapes, sauf s'il existe une relation directe entre les deux étapes spécifiées dans la définition du pipeline. Vous passez ces rôles lors de la définition du processeur ou de l’estimateur de votre étape. Pour des exemples expliquant comment inclure ces rôles dans ces définitions, consultez la [documentation du SDK SageMaker AI Python](https://sagemaker.readthedocs.io/en/stable/overview.html#using-estimators). 

## Configuration CORS avec des compartiments Amazon S3
<a name="build-and-manage-cors-s3"></a>

Pour garantir que vos images sont importées dans vos pipelines à partir d’un compartiment Amazon S3 de manière prévisible, une configuration CORS doit être ajoutée aux compartiments Amazon S3 d’où les images sont importées. Cette section fournit des instructions de définition de la configuration CORS requise pour votre compartiment Amazon S3. L’élément `CORSConfiguration` XML requis pour les pipelines est différent de celui figurant dans [Exigence CORS pour les données d’image d’entrée](sms-cors-update.md), sinon vous pouvez utiliser les informations qui s’y trouvent pour en savoir plus sur l’exigence CORS relative aux compartiments Amazon S3.

Utilisez le code de configuration CORS suivant pour les compartiments Amazon S3 qui hébergent vos images. Pour obtenir des instructions de configuration CORS, consultez [Configuration du partage des ressources entre origines multiples (CORS)](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/add-cors-configuration.html) dans le Guide de l’utilisateur Amazon Simple Storage Service. Si vous utilisez la console Amazon S3 pour ajouter la stratégie à votre compartiment, vous devez utiliser le format JSON.

**JSON**

```
[
    {
        "AllowedHeaders": [
            "*"
        ],
        "AllowedMethods": [
            "PUT"
        ],
        "AllowedOrigins": [
            "*"
        ],
        "ExposeHeaders": [
            "Access-Control-Allow-Origin"
        ]
    }
]
```

**XML**

```
<CORSConfiguration>
 <CORSRule>
   <AllowedHeader>*</AllowedHeader>
   <AllowedOrigin>*</AllowedOrigin>
   <AllowedMethod>PUT</AllowedMethod>
   <ExposeHeader>Access-Control-Allow-Origin</ExposeHeader>
 </CORSRule>
</CORSConfiguration>
```

Le fichier GIF suivant présente les instructions contenues dans la documentation Amazon S3 pour ajouter une stratégie d’en-tête CORS à l’aide de la console Amazon S3.

![\[Fichier GIF illustrant comment ajouter une stratégie d’en-tête CORS à l’aide de la console Amazon S3.\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/images/sms/gifs/cors-config.gif)


## Personnalisation de la gestion des accès pour les tâches de pipelines
<a name="build-and-manage-step-permissions-prefix"></a>

Vous pouvez personnaliser davantage vos politiques IAM afin que les membres sélectionnés de votre organisation puissent exécuter une ou toutes les étapes de pipeline. Par exemple, vous pouvez autoriser certains utilisateurs à créer des tâches d'entraînement, autoriser un autre groupe d'utilisateurs à créer des tâches de traitement et autoriser tous vos utilisateurs à exécuter les étapes restantes. Pour utiliser cette fonctionnalité, vous devez sélectionner une chaîne personnalisée qui préfixe votre nom de tâche. Votre administrateur ajoute le préfixe autorisé ARNs au préfixe tandis que votre data scientist inclut ce préfixe dans les instanciations de pipeline. Étant donné que la politique IAM pour les utilisateurs autorisés contient un ARN de tâche avec le préfixe spécifié, les tâches suivantes de votre étape de pipeline disposent des autorisations nécessaires pour continuer. Le préfixage des tâches est désactivé par défaut. Vous devez activer cette option dans votre classe `Pipeline` pour pouvoir l'utiliser. 

Pour les tâches dont le préfixage est désactivé, le nom de tâche est formaté comme indiqué et est une concaténation des champs décrits dans le tableau suivant :

`pipelines-<executionId>-<stepNamePrefix>-<entityToken>-<failureCount>`


| Champ | Définition | 
| --- | --- | 
|  pipelines   |  Chaîne statique toujours ajoutée au début. Cette chaîne identifie le service d'orchestration de pipeline comme source de la tâche.  | 
|  executionId  |  Mémoire tampon aléatoire pour l'instance d'exécution du pipeline.  | 
|  stepNamePrefix  |  Nom d'étape spécifié par l'utilisateur (indiqué dans l'argument `name` de l'étape du pipeline), limité aux 20 premiers caractères.  | 
|  entityToken  |  Jeton aléatoire pour garantir l'idempotence de l'entité d'étape.  | 
|  failureCount  |  Nombre actuel de nouvelles tentatives pour terminer la tâche.  | 

Dans ce cas, aucun préfixe personnalisé n'est ajouté au nom de la tâche et la politique IAM correspondante doit correspondre à cette chaîne.

Pour les utilisateurs qui activent le préfixage de tâche, le nom de tâche sous-jacent prend la forme suivante, le préfixe personnalisé étant spécifié en tant que `MyBaseJobName` :

*<MyBaseJobName>*-*<executionId>*-*<entityToken>*-*<failureCount>*

Le préfixe personnalisé remplace la `pipelines` chaîne statique pour vous aider à affiner la sélection d'utilisateurs autorisés à exécuter le job SageMaker AI dans le cadre d'un pipeline.

**Restrictions concernant la longueur des préfixes**

Les noms des tâches sont soumis à des contraintes de longueur internes spécifiques aux étapes de pipeline individuelles. Cette contrainte limite également la longueur du préfixe autorisé. Les exigences relatives à la longueur du préfixe sont les suivantes :


| Étape de pipeline | Longueur du préfixe | 
| --- | --- | 
|   `[TrainingStep](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html#trainingstep)`, `[ModelStep](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#step-collections)`, `[TransformStep](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html#transformstep)`, `[ProcessingStep](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html#processingstep)`, `[ClarifyCheckStep](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html#clarifycheckstep)`, `[QualityCheckStep](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html#qualitycheckstep)`, `[RegisterModelStep](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#step-collections)`   |  38  | 
|  `[TuningStep](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html#tuningstep)`, `[AutoML](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html#automlstep)`  |  6  | 

### Application de préfixes de tâche à une politique IAM
<a name="build-and-manage-step-permissions-prefix-iam"></a>

Votre administrateur crée des politiques IAM permettant aux utilisateurs de préfixes spécifiques de créer des tâches. L'exemple de politique suivant permet aux scientifiques des données de créer des tâches d'entraînement s'ils utilisent le préfixe `MyBaseJobName`. 

```
{
    "Action": "sagemaker:CreateTrainingJob",
    "Effect": "Allow",
    "Resource": [
        "arn:aws:sagemaker:region:account-id:*/MyBaseJobName-*"
    ]
}
```

### Application de préfixes de tâche aux instanciations de pipeline
<a name="build-and-manage-step-permissions-prefix-inst"></a>

Vous spécifiez votre préfixe avec l'argument `*base_job_name` de la classe d'instances de tâche.

**Note**  
Vous transmettez votre préfixe de tâche avec l'argument `*base_job_name` à l'instance de tâche avant de créer une étape de pipeline. Cette instance de tâche contient les informations nécessaires pour que la tâche s'exécute en tant qu'étape d'un pipeline. Cet argument varie en fonction de l'instance de tâche utilisée. La liste suivante indique l'argument à utiliser pour chaque type d'étape de pipeline :  
`base_job_name` pour les classes `[Estimator](https://sagemaker.readthedocs.io/en/stable/api/training/estimators.html)` (`[TrainingStep](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html#trainingstep)`), `[Processor](https://sagemaker.readthedocs.io/en/stable/api/training/processing.html)` (`[ProcessingStep](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html#processingstep)`) et `[AutoML](https://sagemaker.readthedocs.io/en/stable/api/training/automl.html)` (`[AutoMLStep](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html#automlstep)`)
`tuning_base_job_name` pour la classe `[Tuner](https://sagemaker.readthedocs.io/en/stable/api/training/tuner.html)` (`[TuningStep](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html#tuningstep)`)
`transform_base_job_name` pour la classe `[Transformer](https://sagemaker.readthedocs.io/en/stable/api/inference/transformer.html)` (`[TransformStep](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html#transformstep)`)
`base_job_name` ou `[CheckJobConfig](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#checkjobconfig)` pour les classes `[QualityCheckStep](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html#qualitycheckstep)` (Vérification de la qualité) et `[ClarifyCheckstep](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html#clarifycheckstep)` (Vérification Clarify)
Pour la classe `[Model](https://sagemaker.readthedocs.io/en/stable/api/inference/model.html)`, l'argument utilisé diffère si vous exécutez `create` ou `register` sur votre modèle avant de transmettre le résultat à `[ModelStep](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#step-collections)`.  
Si vous appelez `create`, le préfixe personnalisé provient de l'argument `name` lorsque vous construisez votre modèle (c'est-à-dire, `Model(name=)`)
Si vous appelez `register`, le préfixe personnalisé provient de l'argument `model_package_name` de votre appel à `register` (c'est-à-dire, `my_model.register(model_package_name=)`)

L'exemple suivant montre comment spécifier un préfixe pour une nouvelle instance de tâche d'entraînement.

```
# Create a job instance
xgb_train = Estimator(
    image_uri=image_uri,
    instance_type="ml.m5.xlarge",
    instance_count=1,
    output_path=model_path,
    role=role,
    subnets=["subnet-0ab12c34567de89f0"],
    base_job_name="MyBaseJobName"
    security_group_ids=["sg-1a2bbcc3bd4444e55"],
    tags = [ ... ]
    encrypt_inter_container_traffic=True, 
)

# Attach your job instance to a pipeline step
step_train = TrainingStep(
    name="TestTrainingJob",
    estimator=xgb_train, 
    inputs={
        "train": TrainingInput(...), 
        "validation": TrainingInput(...) 
    }
)
```

Le préfixage de tâche est désactivé par défaut. Pour activer cette fonctionnalité, utilisez l'option `use_custom_job_prefix` de `PipelineDefinitionConfig` comme indiqué dans l'extrait suivant :

```
from sagemaker.workflow.pipeline_definition_config import PipelineDefinitionConfig
        
# Create a definition configuration and toggle on custom prefixing
definition_config = PipelineDefinitionConfig(use_custom_job_prefix=True);

# Create a pipeline with a custom prefix
 pipeline = Pipeline(
     name="MyJobPrefixedPipeline",
     parameters=[...]
     steps=[...]
     pipeline_definition_config=definition_config
)
```

Créez et exécutez votre pipeline. L'exemple suivant crée et exécute un pipeline, et il montre également comment désactiver le préfixage des tâches et réexécuter votre pipeline.

```
pipeline.create(role_arn=sagemaker.get_execution_role())

# Optionally, call definition() to confirm your prefixed job names are in the built JSON
pipeline.definition()
pipeline.start()
      
# To run a pipeline without custom-prefixes, toggle off use_custom_job_prefix, update the pipeline 
# via upsert() or update(), and start a new run
definition_config = PipelineDefinitionConfig(use_custom_job_prefix=False)
pipeline.pipeline_definition_config = definition_config
pipeline.update()
execution = pipeline.start()
```

De même, vous pouvez activer cette fonctionnalité pour les pipelines existants et démarrer une nouvelle exécution utilisant des préfixes de tâche.

```
definition_config = PipelineDefinitionConfig(use_custom_job_prefix=True)
pipeline.pipeline_definition_config = definition_config
pipeline.update()
execution = pipeline.start()
```

Enfin, vous pouvez consulter votre tâche préfixée de façon personnalisée en appelant `list_steps` sur l’exécution du pipeline.

```
steps = execution.list_steps()

prefixed_training_job_name = steps['PipelineExecutionSteps'][0]['Metadata']['TrainingJob']['Arn']
```

## Personnalisation de l’accès aux versions d’un pipeline
<a name="build-and-manage-step-permissions-version"></a>

Vous pouvez accorder un accès personnalisé à des versions spécifiques d'Amazon SageMaker Pipelines à l'aide de la clé de `sagemaker:PipelineVersionId` condition. Par exemple, la politique ci-dessous autorise l’accès pour démarrer des exécutions ou mettre à jour la version du pipeline uniquement pour les ID de version 6 et ultérieurs.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": {
        "Sid": "AllowStartPipelineExecution",
        "Effect": "Allow",
        "Action": [
            "sagemaker:StartPipelineExecution",
            "sagemaker:UpdatePipelineVersion"
        ],
        "Resource": "*",
        "Condition": {
            "NumericGreaterThanEquals": {
                "sagemaker:PipelineVersionId": 6
            }
        }
    }
}
```

------

Pour plus d'informations sur les clés de condition prises en charge, consultez [Clés de condition pour Amazon SageMaker AI](https://docs.aws.amazon.com//service-authorization/latest/reference/list_amazonsagemaker.html#amazonsagemaker-policy-keys).

## Politiques de contrôle des services avec les pipelines
<a name="build-and-manage-scp"></a>

Les politiques de contrôle des services (SCPs) sont un type de politique d'organisation que vous pouvez utiliser pour gérer les autorisations au sein de votre organisation. SCPs offrez un contrôle centralisé sur le maximum d'autorisations disponibles pour tous les comptes de votre organisation. En utilisant des pipelines au sein de votre organisation, vous pouvez vous assurer que les data scientists gèrent les exécutions de vos pipelines sans avoir à interagir avec la AWS console. 

Si vous utilisez un VPC avec votre SCP qui restreint l’accès à Amazon S3, vous devez prendre des mesures pour autoriser votre pipeline à accéder à d’autres ressources Amazon S3. 

Pour permettre à Pipelines d’accéder à Amazon S3 en dehors de votre VPC à l’aide de la fonction `JsonGet`, mettez à jour le SCP de votre organisation pour vous assurer que le rôle utilisant Pipelines peut accéder à Amazon S3. Pour ce faire, créez une exception pour les rôles utilisés par l’exécuteur Pipelines via le rôle d’exécution de pipeline à l’aide d’une balise de principal et d’une clé de condition. 

**Pour autoriser Pipelines à accéder à Amazon S3 en dehors de votre VPC**

1. Créez une balise unique pour votre rôle d’exécution de pipeline en suivant les étapes décrites dans [Balisage des utilisateurs et des rôles IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html). 

1. Accordez une exception dans votre SCP à l'aide de la clé de condition `Aws:PrincipalTag IAM` pour la balise que vous avez créée. Pour plus d’informations, consultez [Création, mise à jour et suppression de politiques de contrôle des services](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps_create.html). 