

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

# Amazon SWF IAM 정책
<a name="swf-dev-iam.policies"></a>

IAM 정책에는 정책을 정의하는 요소 세트가 포함된 `Statement` 요소가 하나 이상 포함되어 있습니다. 전체 요소 목록 및 정책 구성 방법에 대한 일반적인 설명은 [액세스 정책 언어](https://docs.aws.amazon.com/IAM/latest/UserGuide/AccessPolicyLanguage.html)를 참조하십시오. Amazon SWF 액세스 제어는 다음 요소를 기반으로 합니다.

Effect  
(필수)명령문 `deny` 또는 `allow`의 효과.  
액세스를 명시적으로 허용해야 합니다. 기본적으로 IAM은 액세스를 거부합니다.

Resource  
(필수) 명령문이 적용되는 리소스, 즉 사용자가 상호 작용할 수 있는 AWS 서비스의 엔터티입니다.  
리소스 권한은 도메인에 대해서만 표현할 수 있습니다. 예를 들어, 정책이 계정 내 특정 도메인에 대한 액세스만 허용할 수 있습니다. 도메인에 대한 권한을 표현하려면 `Resource`를 도메인의 Amazon 리소스 이름(ARN)으로 설정합니다. 이 이름의 형식은 "arn:aws:swf:*Region*:*AccountID*:/domain/*DomainName*"입니다. *리전*은 AWS 리전이고, *AccountID*는 대시가 없는 계정 ID이며, *DomainName*은 도메인 이름입니다.

작업  
(필수) 명령문이 적용되는 작업으로, *serviceId*:*action* 형식을 사용해 지칭합니다. Amazon SWF의 경우 *serviceID*를 `swf`로 설정합니다. 예를 들어, `swf:StartWorkflowExecution`은 [StartWorkflowExecution](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_StartWorkflowExecution.html) 작업을 가리키며 워크플로우를 시작하도록 허용된 사용자를 제어하는 데 사용됩니다.  
 [RespondDecisionTaskCompleted](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_RespondDecisionTaskCompleted.html) 사용 권한을 부여하는 경우, 포함된 결정 목록에 대한 액세스도 `Action`으로 제어해 의사 API에 대한 권한을 표현할 수 있습니다. IAM은 기본적으로 액세스를 거부하기 때문에 결정자의 결정은 명시적으로 허용해야 합니다. 그렇지 않으면 결정이 수락되지 않습니다. `*` 값을 사용해 모든 결정을 허용할 수 있습니다.

조건  
(선택 사항) 하나 이상의 작업 파라미터에 대한 제약을 표현합니다. 이러한 제약은 허용된 값을 제한합니다.  
Amazon SWF 작업은 일반적으로 범위가 넓으며, IAM 조건을 사용하여 범위를 줄일 수 있습니다. 예를 들어, [PollForActivityTask](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_PollForActivityTask.html) 작업이 액세스하도록 허용된 작업 목록을 제한하려면 `Condition`을 포함하고 `swf:taskList.name` 키를 사용해 허용 가능한 목록을 지정합니다.  
다음 엔터티에 대한 제약을 표현할 수 있습니다.  
+ 워크플로 유형. 이름 및 버전에는 별도의 키가 있습니다.
+ 활동 유형. 이름 및 버전에는 별도의 키가 있습니다.
+ 작업 목록
+ Tags. 일부 작업의 경우 태그를 여러 개 지정할 수 있습니다. 이러한 경우 각 태그에는 별도의 키가 있습니다.
Amazon SWF의 경우 값은 모든 문자열이므로, 문자열 연산자(예: 지정된 문자열로 파라미터를 제한하는 `StringEquals`)를 사용하여 파라미터를 제한합니다. 그러나 정규 문자열 비교 연산자(예: `StringEquals`)에는 모두 파라미터를 포함하라는 요청이 필요합니다. 파라미터를 명시적으로 포함하지 않고 기본값(예: 유형 등록 중 제공한 기본 작업 목록)이 없으면 액세스가 거부됩니다.  
조건은 선택 사항으로 취급하는 것이 일반적으로 유용합니다. 그래야 연결된 파라미터를 반드시 포함하지 않고 작업을 호출할 수 있습니다. 예를 들어, 결정자가 [RespondDecisionTaskCompleted](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_RespondDecisionTaskCompleted.html) 결정 세트를 지정하도록 허용하지만 특정 호출에 대해서는 결정 중 하나만 지정하도록 허용하려고 할 수 있습니다. 이러한 경우에는 `StringEqualsIfExists` 연산자를 사용해 적절한 파라미터를 제한합니다. 그러면 파라미터가 조건을 충족하는 경우 액세스를 허용하지만 파라미터가 없는 경우에는 액세스를 거부하지 않습니다.
제한 가능한 파라미터와 연결된 키의 전체 목록은 [API 요약](swf-dev-iam.api.md) 단원을 참조하십시오.

다음 단원에서는 Amazon SWF 정책을 구성하는 방법의 예를 제공합니다. 자세한 내용은 [문자열 조건](https://docs.aws.amazon.com/IAM/latest/UserGuide/AccessPolicyLanguage_ElementDescriptions.html#AccessPolicyLanguage_ConditionType)을 참조하십시오.

## Amazon SWF에 대한 정책 작성
<a name="swf-dev-iam.policies.examples"></a>

워크플로는 활동, 결정자 등 여러 *액터*로 구성됩니다. 적절한 IAM 정책을 연결하여 각 액터에 대한 액세스를 제어할 수 있습니다.

다음 작업을 수행하면 모든 리전에서 액터에게 전체 계정 액세스 권한이 부여됩니다.
+ **작업:** `swf:*`
+ **리소스:** `arn:aws:swf:*:123456789012:/domain/*`

 와일드카드를 사용해 여러 리소스, 작업 또는 리전을 값 하나로 나타낼 수 있습니다.
+ `Resource` 값의 첫 번째 와일드카드(`*`)는 리소스 권한이 모든 **리전**에 적용됨을 나타냅니다.

  권한을 단일 리전으로 제한하려면 와일드카드를 적절한 리전 문자열(예: us-east-1)로 바꿉니다.
+ `Resource` 값의 두 번째 와일드카드(`*`)는 액터가 지정된 리전에 있는 계정의 모든 도메인에 액세스하도록 허용합니다.
+ `Action` 값의 와일드카드(`*`)는 액터가 모든 Amazon SWF 작업을 직접적으로 호출하도록 허용합니다.

와일드카드를 사용하는 방법에 대한 자세한 내용은 [요소 설명](https://docs.aws.amazon.com/IAM/latest/UserGuide/AccessPolicyLanguage_ElementDescriptions.html)을 참조하십시오.

### 도메인 권한
<a name="swf-dev-iam.policies.examples.domain"></a>

부서의 워크플로를 특정 도메인으로 제한하려면 액터가 특정 부서에 대해서만 모든 작업을 호출하도록 허용하는 권한을 부여할 수 있습니다.

둘 이상의 도메인에 대한 액터 액세스를 실행하려면 각 도메인에 대한 권한을 문 목록으로 표현합니다.
+ **작업:** `swf:*`
+ **리소스:** `arn:aws:swf:*:123456789012:/domain/department1` 
+ **리소스:** `arn:aws:swf:*:123456789012:/domain/department2` 

액터가 `department1` 및 `department2` 도메인에서 Amazon SWF 작업을 사용하도록 허용할 수 있습니다. 또한 경우에 따라 와일드카드를 사용해 여러 도메인을 나타낼 수도 있습니다.

### API 권한 및 제약
<a name="swf-dev-iam.policies.examples.api"></a>

`Action` 요소에서 **작업을** 지정하여 액터가 사용할 수 있는 작업을 제어합니다.

다음 작업에서는 액터가 워크플로를 시작하기 `StartWorkflowExecution` 위해서만를 호출할 수 있습니다. 다른 작업은 사용할 수 없습니다.
+ **작업:** `swf:StartWorkflowExecution` 

**조건**  
요소를 사용하여 작업의 허용 가능한 파라미터 값을 선택적으로 제한할 수 `Condition` 있습니다.

액터가 시작할 수 있는 워크플로를 제한하려면 다음과 같이 하나 이상의 `StartWorkflowExecution` 파라미터 값을 제한합니다.

```
"Condition" : {
   "StringEquals" : { 
      "swf:workflowType.name" : "workflow1",
      "swf:workflowType.version" : "version2" 
    }
}
```

이전 제약 조건이 있는 액터는 `version2` 만 실행할 수 `workflow1` 있으며 두 파라미터가 모두 요청에 포함되어야 합니다.

다음과 같이 `StringEqualsIfExists` 연산자를 사용해 파라미터를 요청에 포함하지 않고 제한할 수 있습니다.

```
"Condition" : {
   "StringEqualsIfExists" : { "swf:taskList.name" : "task_list_name" }
}
```

이전 정책이 있는 액터는 워크플로 실행을 시작할 때 선택적으로 작업 목록을 지정할 수 있습니다.

일부 작업의 태그 목록을 제한할 수 있습니다. 각 태그에는 별도의 키가 있으므로 `swf:tagList.member.0`를 사용하여 목록의 첫 번째 태그를 제한`swf:tagList.member.1`하고 목록의 두 번째 태그를 최대 5개까지 제한합니다.

태그 목록을 제한하는 방법에 주의해야 합니다. 예를 들어 다음 조건은 권장***되지 않습니다***.

다음 조건은 `some_ok_tag` 또는 중 하나를 선택적으로 지정할 수 있으므로 권장**되지 않습니다**`another_ok_tag`. 그러나 조건은 태그 목록의 **첫 번째 요소**만 제한합니다. 이 목록에는 조건이 `swf:tagList.member.1`, `swf:tagList.member.2`등에 조건을 적용하지 않기 때문에 모두 허용되는 임의의 값을 가진 추가 요소가 있을 수 있습니다.

```
// Example to illustrate an insecure Condition
"Condition" : {
   "StringEqualsIfExists" : {
      "swf:tagList.member.0" : "some_ok_tag", "another_ok_tag"
   }
}
```

이전 문제를 해결하는 한 가지 방법은 태그 목록 사용을 허용하지 않는 것입니다.

다음 정책은 목록에 요소가 하나만 있도록 해 `some_ok_tag` 또는 `another_ok_tag`만 허용하도록 합니다.

```
"Condition" : {
   "StringEqualsIfExists" : {
      "swf:tagList.member.0" : "some_ok_tag", "another_ok_tag"
    },
    "Null" : { "swf:tagList.member.1" : "true" }
}
```

### 의사 API 권한 및 제약
<a name="pseudo-api-permissions-constraints"></a>

에서 사용할 수 있는 결정을 제한하려면 먼저 액터가를 호출하도록 허용`RespondDecisionTaskCompleted`해야 합니다`RespondDecisionTaskCompleted`. 그런 다음 다음과 같이 일반 API와 동일한 구문을 사용하여 적절한 의사 API 멤버에 대한 권한을 표현합니다.
+ **문 1**

  **리소스:** `arn:aws:swf:*:123456789012:/domain/*` 

  **작업:** `swf:RespondDecisionTaskCompleted` 
+ **문 2**

  **리소스:** `*` 

  **작업:** `swf:ScheduleActivityTask` 

  **조건**: ` "StringEquals" : { "swf:activityType.name" : "SomeActivityType" }` 

첫 번째는 액터가를 호출하도록 `Statement` 허용합니다`RespondDecisionTaskCompleted`. 두 번째 문을 통해 액터는 `ScheduleActivityTask` 결정을 사용하여 Amazon SWF에 활동 작업을 예약하도록 지시할 수 있습니다. 모든 결정을 허용하려면 "swf:ScheduleActivityTask"를 "swf:\$1"로 바꿉니다.

조건 연산자를 사용해 정규 API처럼 파라미터를 제한할 수 있습니다. 이전 예제의 `StringEquals` 연산자는 `RespondDecisionTaskCompleted`가 `SomeActivityType` 활동에 대한 활동 작업을 예약할 수 있도록 `Condition` 허용하며 해당 작업을 예약해야 합니다. 파라미터 값을 사용하도록 `RespondDecisionTaskCompleted`를 허용하지만 반드시 사용할 필요는 없도록 하려면 대신 `StringEqualsIfExists` 연산자를 사용할 수 있습니다.

## AWS 관리형 정책: SimpleWorkflowFullAccess
<a name="swf-full-accss-mngd-policy"></a>

`SimpleWorkflowFullAccess` 정책을 IAM ID에 연결할 수 있습니다.

이 정책은 Amazon SWF 구성 서비스에 대한 전체 액세스 권한을 제공합니다.

## IAM 정책에 대한 서비스 모델 제한 사항
<a name="swf-dev-iam.policies.allowed"></a>

IAM 정책을 생성할 때 서비스 모델 제약을 고려해야 합니다. 구문상 유효한 IAM 정책을 생성했으나 해당 정책이 잘못된 Amazon SWF 요청을 나타낼 수 있습니다. 이 경우, 액세스 제어 관점에서 허용되는 요청에 실패할 수 있는데 이는 잘못된 요청이기 때문입니다.

예를 들어 Amazon SWF 서비스 모델은 `typeFilter` 및 `tagFilter` 파라미터를 동일한 `[ListOpenWorkflowExecutions](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_ListOpenWorkflowExecutions.html)` 요청에 사용하도록 허용하지 **않습니다**. 다음 조건은 서비스가 잘못된 요청`ValidationException`으로 발생시켜 거부할 호출을 허용합니다.

```
"Condition" : {
   "StringEquals" : { 
      "swf:typeFilter.name" : "workflow_name",
      "swf:typeFilter.version" : "workflow_version",
      "swf:tagFilter.tag" : "some_tag" 
    }
}
```