

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon SWF IAM ポリシー
<a name="swf-dev-iam.policies"></a>

IAM ポリシーには、1 つ以上の `Statement` 要素が含まれており、各要素には、そのポリシーを定義する一連の要素が含まれます。要素の完全な一覧とポリシーの作成方法に関する一般的な説明については、「[The Access Policy Language](https://docs.aws.amazon.com/IAM/latest/UserGuide/AccessPolicyLanguage.html)」(アクセスポリシー言語) を参照してください。Amazon SWF のアクセス制御は、次の要素に基づいています。

効果  
(必須) ステートメントの効果: `deny` または `allow`。  
明示的にアクセスを許可する必要があります。IAM は、デフォルトでアクセスを拒否します。

[リソース]   
(必須) ステートメントが適用される、ユーザーが操作できる AWS サービスのエンティティであるリソース。  
ドメインに対してのみリソースアクセス許可を表すことができます。たとえば、ポリシーでは、アカウント内の特定のドメインのみにアクセスを許可することができます。ドメインのアクセス許可を表すには、`Resource` を「arn:aws:swf:*Region*:*AccountID*:/domain/*DomainName*」の形式のドメインの Amazon Resource Name (ARN) に設定します。*Region* は AWS リージョン、*AccountID* はダッシュのないアカウント ID、*DomainName* はドメイン名です。

Action  
(必須) 次の形式 (*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 はデフォルトでアクセスを拒否するため、ディサイダーの決定が明示的に許可されない場合、受け入れられません。`*` 値を使用してすべての決定を許可することができます。

Condition  
許可された値を制限するアクションのパラメータの 1 つ以上に制約を表現します。  
Amazon SWF アクションには多くの場合、幅広い範囲があり、IAM 条件を使用することで削減できます。たとえば、[PollForActivityTask](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_PollForActivityTask.html) アクションがアクセスできるタスクリストを制限するには、`Condition` を含め、`swf:taskList.name` キーを使用して許容リストを指定します。  
以下のエンティティに対して制約を表すことができます。  
+ ワークフロータイプ。名前とバージョンに別のキーがあります。
+ アクティビティのタイプ。名前とバージョンに別のキーがあります。
+ タスクリスト。
+ タグ。一部のアクションに対して複数のタグを指定できます。その場合、各タグには別のキーがあります。
Amazon SWF の場合、値はすべて文字列です。そのため、パラメータを指定した文字列に制限する `StringEquals` などの文字列演算子を使用してパラメータを制約します。ただし、`StringEquals` などの通常の文字列比較演算子では、すべての要求にパラメータを含める必要があります。パラメータを明示的に含めず、タイプ登録時に指定されたデフォルトのタスクリストなどのデフォルト値がない場合、アクセスは拒否されます。  
条件をオプションとして扱うと便利です。関連するパラメータを必ずしも必要とせずにアクションを呼び出すことができます。たとえば、ディサイダーが一連の [RespondDecisionTaskCompleted](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_RespondDecisionTaskCompleted.html) 決定を指定することもできますが、特定の呼び出しに対して 1 つだけ指定することもできます。その場合、`StringEqualsIfExists` 演算子を使用して適切なパラメータを制約します。これは、パラメータが条件を満たす場合にアクセスを許可しますが、パラメータがない場合はアクセスを拒否しません。
制約付きのパラメータと関連するキーの完全なリストについては、[API の要約](swf-dev-iam.api.md) を参照してください。

次のセクションでは、Amazon SWF ポリシーを構築する方法の例を示します。詳細については、「[String Conditions](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` 値の 2 番目のワイルドカード (`*`) は、アクターが指定されたリージョン内の任意のアカウントのドメインにアクセスできるようにします。
+ `Action` 値のワイルドカード (`*`) を使用すると、アクターは、任意の Amazon SWF アクションを呼び出すことができます。

ワイルドカードを使用する方法の詳細については、「[Element Descriptions](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`要素を使用してアクションの許容パラメータ値を制約できます。

アクターが開始できるワークフローを制限するには、次のように 1 つ以上の`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` を使用してリスト内の 2 番目のタグを制限します。次に、最大 5 つまで制限します。

タグリストの制約方法には注意が必要です。たとえば、次の条件は推奨***されません***。

以下の条件は、オプションで `some_ok_tag`または を指定できるため、推奨**されません**`another_ok_tag`。ただし、Condition はタグリスト**の最初の要素**のみを制限します。条件が `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"
   }
}
```

前の問題に対処する 1 つの方法は、タグリストの使用を禁止することです。

次のポリシーでは、リストに 1 つの要素のみ持つように要求することで、`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" }` 

1 つ目は、アクターが を呼び出すこと`Statement`を許可します`RespondDecisionTaskCompleted`。2 番目のステートメントでは、アクターは`ScheduleActivityTask`決定を使用して Amazon SWF にアクティビティタスクのスケジュールを指示できます。すべての決定を可能にするには、「swf:ScheduleActivityTask」を「swf:\$1」に置き換えます。

条件演算子を使用すると、通常の API と同様にパラメータを制約できます。前の例の `StringEquals`演算子`Condition`は、 `RespondDecisionTaskCompleted` がアクティビティの`SomeActivityType`アクティビティタスクをスケジュールすることを許可し、そのタスクをスケジュールする必要があります。`RespondDecisionTaskCompleted` がパラメータ値を使用することを許可したいが、そうする必要がない場合は、代わりに `StringEqualsIfExists` 演算子を使用することができます。

## AWS マネージドポリシー: SimpleWorkflowFullAccess
<a name="swf-full-accss-mngd-policy"></a>

`SimpleWorkflowFullAccess` ポリシーを IAM アイデンティティにアタッチできます。

このポリシーは、Amazon SWF 設定サービスへのフルアクセスを提供します。

## IAM ポリシーに関するサービスモデルの制限
<a name="swf-dev-iam.policies.allowed"></a>

IAM ポリシーを作成するときは、サービスモデルの制限を検討する必要があります。無効な Amazon SWF リクエストを表す構文的に有効な IAM ポリシーを作成することは可能です。アクセスコントロールに関して許容されるリクエストでも、無効なリクエストであるために失敗する可能性があります。

例えば、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" 
    }
}
```