

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# IAM 액세스 관리
<a name="build-and-manage-access"></a>

다음 섹션에서는 Amazon SageMaker Pipelines에 대한 AWS Identity and Access Management (IAM) 요구 사항을 설명합니다. 이러한 권한을 구현하는 방법에 대한 예제는 [사전 조건](define-pipeline.md#define-pipeline-prereq)섹션을 참조하세요.

**Topics**
+ [파이프라인 역할 권한](#build-and-manage-role-permissions)
+ [파이프라인 단계 권한](#build-and-manage-step-permissions)
+ [Amazon S3 버킷을 사용한 CORS 구성](#build-and-manage-cors-s3)
+ [Pipelines 작업에 대한 액세스 관리 사용자 지정](#build-and-manage-step-permissions-prefix)
+ [파이프라인 버전에 대한 액세스 사용자 지정](#build-and-manage-step-permissions-version)
+ [파이프라인을 사용한 서비스 제어 정책](#build-and-manage-scp)

## 파이프라인 역할 권한
<a name="build-and-manage-role-permissions"></a>

파이프라인을 생성할 때 파이프라인에 전달되는 IAM 파이프라인 실행 역할이 필요합니다. 파이프라인을 생성하는 데 사용하는 SageMaker AI 인스턴스의 역할에는 파이프라인 실행 역할을 지정하는 `iam:PassRole` 권한이 있는 정책이 있어야 합니다. 이는 파이프라인 생성 및 실행에 사용할 파이프라인 서비스에 파이프라인 실행 역할을 전달할 권한이 인스턴스에 필요하기 때문입니다. IAM 역할에 대한 자세한 내용은 [IAM 역할](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)을 참조하세요.

파이프라인 실행 역할에는 다음 권한이 필요합니다.
+ 파이프라인의 모든 SageMaker AI 작업 단계에 대해 고유하거나 사용자 지정된 역할을 사용할 수 있습니다(기본적으로 사용되는 파이프라인 실행 역할이 아님). 파이프라인 실행 역할이 이러한 각 역할을 지정하는 `iam:PassRole` 권한이 있는 정책을 추가했는지 확인합니다.
+  파이프라인의 각 작업 유형에 대한 `Create`및 `Describe`권한.
+  `JsonGet` 함수 사용에 대한 Amazon S3의 허용. 리소스 기반 정책 또는 자격 증명 기반 정책을 사용하여 Amazon S3 리소스에 대한 액세스를 제어할 수 있습니다. 리소스 기반 정책은 Amazon S3 버킷에 적용되며 Pipelines에 버킷에 대한 액세스 권한을 부여합니다. 자격 증명 기반 정책은 파이프라인에 계정에서 Amazon S3를 호출할 수 있는 기능을 제공합니다. 리소스 기반 정책 및 자격 증명 기반 정책에 대한 더 자세한 내용은 [자격 증명 기반 정책 및 리소스 기반 정책 및 정책](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"
  }
  ```

## 파이프라인 단계 권한
<a name="build-and-manage-step-permissions"></a>

Pipelines에는 SageMaker AI 작업을 실행하는 단계가 포함됩니다. 파이프라인 단계에서 이러한 작업을 실행하려면 필요한 리소스에 대한 액세스를 제공하는 계정의 IAM 역할이 필요합니다. 이 역할은 파이프라인에 의해 SageMaker AI 서비스 위탁자에게 전달됩니다. IAM 역할에 대한 자세한 내용은 [IAM 역할](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)을 참조하세요.

기본적으로 각 단계는 파이프라인 실행 역할을 맡습니다. 선택적으로 파이프라인의 모든 단계에 다른 역할을 전달할 수 있습니다. 이렇게 하면 파이프라인 정의에 지정된 두 단계 간에 직접적인 관계가 없는 한, 각 단계의 코드가 다른 단계에서 사용되는 리소스에 영향을 주지 않습니다. 단계의 프로세서 또는 추정기를 정의할 때 이러한 역할을 전달합니다. 이러한 정의에 이러한 역할을 포함하는 방법의 예시는 [SageMaker AI Python SDK 설명서](https://sagemaker.readthedocs.io/en/stable/overview.html#using-estimators)를 참조하세요.

## Amazon S3 버킷을 사용한 CORS 구성
<a name="build-and-manage-cors-s3"></a>

이미지를 예측 가능한 방식으로 Amazon S3 버킷에서 파이프라인으로 가져오려면 이미지를 가져오는 Amazon S3 버킷에 CORS 구성을 추가해야 합니다. 이 섹션에서는 필요한 CORS 구성을 Amazon S3 버킷으로 설정하는 방법에 대한 지침을 제공합니다. Pipelines에 필요한 XML `CORSConfiguration`은 [입력 이미지 데이터에 대한 CORS 요구 사항](sms-cors-update.md)에 있는 것과 다릅니다. 다르지 않으면 해당 정보를 사용하여 Amazon S3 버킷의 CORS 요구 사항에 대해 자세히 알아볼 수 있습니다.

이미지를 호스팅하는 Amazon S3 버킷에 다음 CORS 구성 코드를 사용하세요. CORS 구성에 대한 지침은 Amazon Simple Storage Service 사용 설명서의 [교차 오리진 리소스 공유(CORS) 구성](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/add-cors-configuration.html)을 참조하세요. Amazon S3 콘솔을 사용하여 버킷에 정책을 추가하려면 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>
```

다음 GIF는 Amazon S3 콘솔을 사용하여 CORS 헤더 정책을 추가하는 방법에 대한 Amazon S3 설명서의 지침을 보여줍니다.

![\[Amazon S3 콘솔을 사용하여 CORS 헤더 정책을 추가하는 방법에 대한 Gif입니다.\]](http://docs.aws.amazon.com/ko_kr/sagemaker/latest/dg/images/sms/gifs/cors-config.gif)


## Pipelines 작업에 대한 액세스 관리 사용자 지정
<a name="build-and-manage-step-permissions-prefix"></a>

IAM 정책을 추가로 사용자 지정하여 조직 내 선택된 구성원이 일부 또는 모든 파이프라인 단계를 실행할 수 있도록 할 수 있습니다. 예를 들어 특정 사용자에게는 훈련 작업을 생성할 권한을 부여하고, 다른 사용자 그룹에게는 처리 작업을 생성할 수 있는 권한을 부여하고, 모든 사용자에게 나머지 단계를 실행할 수 있는 권한을 부여할 수 있습니다. 이 기능을 사용하려면 작업 이름 앞에 접두사를 붙이는 사용자 지정 문자열을 선택합니다. 관리자는 허용된 ARN 앞에 접두사를 추가하는 반면, 데이터 사이언티스트는 파이프라인 인스턴스화에 이 접두사를 포함합니다. 허용된 사용자를 위한 IAM 정책에는 지정된 접두사가 있는 작업 ARN이 포함되어 있으므로 파이프라인 단계의 후속 작업을 진행하는 데 필요한 권한이 있어야 합니다. 작업 접두사는 기본적으로 꺼져 있습니다.이 옵션을 사용하려면 `Pipeline`클래스에서 이 옵션을 켜야 합니다.

접두사가 해제된 작업의 경우 작업 이름은 다음과 같이 형식이 지정되며 다음 테이블에 설명된 필드가 연결되어 있습니다.

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


| Field | 정의 | 
| --- | --- | 
|  파이프라인   |  항상 정적 문자열이 앞에 추가됩니다. 이 문자열은 파이프라인 오케스트레이션 서비스를 작업의 소스로 식별합니다.  | 
|  ExecutionId  |  실행 중인 파이프라인 인스턴스를 위한 무작위 버퍼입니다.  | 
|  stepNamePrefix  |  사용자가 지정한 단계 이름(파이프라인 단계의 `name`인수에 지정됨)으로, 처음 20자로 제한됩니다.  | 
|  entityToken  |  단계 개체의 멱등성을 보장하기 위한 무작위 토큰입니다.  | 
|  failureCount  |  작업을 완료하기 위해 시도한 현재 재시도 횟수입니다.  | 

이 경우 작업 이름 앞에 사용자 지정 접두사가 추가되지 않으며 해당 IAM 정책이 이 문자열과 일치해야 합니다.

작업 접두사를 사용하는 사용자의 경우 기본 작업 이름은 다음과 같은 형식을 취하며 사용자 지정 접두사는 `MyBaseJobName`으로 지정됩니다.

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

사용자 지정 접두사는 정적 `pipelines` 문자열을 대체하므로 SageMaker AI 작업을 파이프라인의 일부로 실행할 수 있는 사용자 선택 범위를 좁힐 수 있습니다.

**접두사 길이 제한**

작업 이름에는 개별 파이프라인 단계에 따른 내부 길이 제약이 있습니다. 또한 이 제약 조건은 허용되는 접두사 길이를 제한합니다. 접두사 길이 요구 사항은 다음과 같습니다.


| 파이프라인 단계 | 접두사 길이 | 
| --- | --- | 
|   `[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  | 

### IAM 정책에 작업 접두사 적용
<a name="build-and-manage-step-permissions-prefix-iam"></a>

관리자는 특정 접두사를 사용하는 사용자가 작업을 생성할 수 있도록 IAM 정책을 생성합니다. 다음 예제 정책은 데이터 사이언티스트가 `MyBaseJobName`접두사를 사용하는 경우 훈련 작업을 생성할 수 있도록 허용합니다.

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

### 파이프라인 인스턴스화에 작업 접두사를 적용합니다.
<a name="build-and-manage-step-permissions-prefix-inst"></a>

작업 인스턴스 클래스의 `*base_job_name`인수를 사용하여 접두사를 지정합니다.

**참고**  
파이프라인 단계를 생성하기 전에 `*base_job_name`인수와 함께 작업 접두사를 작업 인스턴스에 전달합니다. 이 작업 인스턴스에는 작업을 파이프라인에서 한 단계로 실행하는 데 필요한 정보가 들어 있습니다. 이 인수는 사용된 작업 인스턴스에 따라 달라집니다. 다음 목록은 각 파이프라인 단계 유형에 사용할 인수를 보여줍니다.  
`[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)`), `[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)`) 클래스의 경우 `base_job_name`
`[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)`)의 경우 `tuning_base_job_name`
`[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)`)의 경우 `transform_base_job_name`
`[QualityCheckStep](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html#qualitycheckstep)`(품질 검사) 및 `[ClarifyCheckstep](https://sagemaker.readthedocs.io/en/stable/amazon_sagemaker_model_building_pipeline.html#clarifycheckstep)`(명확화 검사) 클래스의 경우 `[CheckJobConfig](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#checkjobconfig)`의 `base_job_name`
`[Model](https://sagemaker.readthedocs.io/en/stable/api/inference/model.html)` 클래스의 경우 사용되는 인수는 `[ModelStep](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#step-collections)`에 결과를 전달하기 전에 `create`또는 `register`를 모델에 실행했는지에 따라 달라집니다.  
`create` 호출 시 사용자 지정 접두사는 모델을 생성할 때 `name`인수에서 가져옵니다(예:`Model(name=)`).
`register` 호출 시 사용자 지정 접두사는 `register`호출의 `model_package_name`인수에서 가져옵니다(예:`my_model.register(model_package_name=)`).

다음 예제에서는 새 훈련 작업 인스턴스에 접두사를 지정하는 방법을 보여줍니다.

```
# 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(...) 
    }
)
```

작업 접두사는 기본적으로 해제되어 있습니다. 이 기능을 사용하려면 다음 스니펫에 표시된 `PipelineDefinitionConfig`의 `use_custom_job_prefix`옵션을 사용하세요.

```
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
)
```

파이프라인을 생성하고 실행합니다. 다음 예제는 파이프라인을 생성 및 실행하고, 작업 접두사를 끄고 파이프라인을 다시 실행하는 방법도 보여줍니다.

```
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()
```

마찬가지로 기존 파이프라인에서도 이 기능을 켜고 작업 접두사를 사용하는 새 실행을 시작할 수 있습니다.

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

마지막으로, 파이프라인 실행의 `list_steps`을 호출하여 접두사가 지정된 사용자 지정 작업을 볼 수 있습니다.

```
steps = execution.list_steps()

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

## 파이프라인 버전에 대한 액세스 사용자 지정
<a name="build-and-manage-step-permissions-version"></a>

`sagemaker:PipelineVersionId` 조건 키를 사용하여 Amazon SageMaker Pipelines의 특정 버전에 대한 사용자 지정 액세스 권한을 부여할 수 있습니다. 예를 들어 아래 정책은 버전 ID 6 이상에 대해서만 실행을 시작하거나 파이프라인 버전을 업데이트할 수 있는 액세스 권한을 부여합니다.

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

****  

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

------

지원되는 조건 키에 대한 자세한 정보는 [Amazon SageMaker에 사용되는 조건 키](https://docs.aws.amazon.com//service-authorization/latest/reference/list_amazonsagemaker.html#amazonsagemaker-policy-keys)를 참조하세요.

## 파이프라인을 사용한 서비스 제어 정책
<a name="build-and-manage-scp"></a>

서비스 제어 정책(SCP)은 조직의 권한을 관리하는 데 사용할 수 있는 조직 정책 유형입니다. SCP는 조직의 모든 계정에 사용 가능한 최대 권한을 중앙에서 제어합니다. 조직 내에서 파이프라인을 사용하면 데이터 과학자가 AWS 콘솔과 상호 작용하지 않고도 파이프라인 실행을 관리할 수 있습니다. 

Amazon S3에 대한 액세스를 제한하는 SCP와 함께 VPC를 사용하는 경우 파이프라인이 다른 Amazon S3 리소스에 액세스할 수 있도록 허용하는 조치를 취해야 합니다.

Pipelines이 함수를 사용하여 VPC 외부의 Amazon S3에 액세스할 수 있도록 하려면 Pipelines을 사용하는 `JsonGet` 역할이 Amazon S3에 액세스할 수 있도록 조직의 SCP를 업데이트하세요. 이렇게 하려면 위탁자 태그와 조건 키를 사용하여 파이프라인 실행 역할을 통해 Pipelines 실행기가 사용하는 역할에 대한 예외를 만드세요.

**Pipelines이 VPC 외부에서 Amazon S3에 액세스하도록 허용하는 방법**

1. [IAM 사용자 및 역할](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html) 태그 지정의 단계에 따라 파이프라인 실행 역할에 고유한 태그를 생성하세요.

1. 생성한 태그의 `Aws:PrincipalTag IAM`조건 키를 사용하여 SCP에 예외를 허용하세요. SCP를 생성하는 방법에 대한 자세한 내용은 [서비스 제어 정책 생성, 업데이트 및 삭제](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps_create.html)를 참조하세요.