Amazon SWF IAM ポリシー - Amazon Simple Workflow Service

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

Amazon SWF IAM ポリシー

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

効果

(必須) ステートメントの効果: deny または allow

注記

明示的にアクセスを許可する必要があります。IAM は、デフォルトでアクセスを拒否します。

リソース

(必須) ステートメントが適用される、ユーザーが操作できる AWS サービスのエンティティであるリソース。

ドメインに対してのみリソースアクセス許可を表すことができます。たとえば、ポリシーでは、アカウント内の特定のドメインのみにアクセスを許可することができます。ドメインのアクセス許可を表すには、Resource を「arn:aws:swf:Region:AccountID:/domain/DomainName」の形式のドメインの Amazon Resource Name (ARN) に設定します。Region は AWS リージョン、AccountID はダッシュのないアカウント ID、DomainName はドメイン名です。

アクション

(必須) 次の形式 (serviceId:action) を使用して参照する、ステートメントが適用されるアクション。Amazon SWFの場合、serviceIDswf に設定します。たとえば、swf:StartWorkflowExecutionStartWorkflowExecution アクションを参照し、ワークフローを開始できるユーザーを制御するために使用されます。

RespondDecisionTaskCompleted を使用する権限を与えた場合は、Action を使用して疑似 API のアクセス許可を表すことで、含まれる決定リストへのアクセスを制御することもできます。IAM はデフォルトでアクセスを拒否するため、ディサイダーの決定が明示的に許可されない場合、受け入れられません。* 値を使用してすべての決定を許可することができます。

条件

許可された値を制限するアクションのパラメータの 1 つ以上に制約を表現します。

Amazon SWF アクションには多くの場合、幅広い範囲があり、IAM 条件を使用することで削減できます。たとえば、PollForActivityTask アクションがアクセスできるタスクリストを制限するには、Condition を含め、swf:taskList.name キーを使用して許容リストを指定します。

以下のエンティティに対して制約を表すことができます。

  • ワークフロータイプ。名前とバージョンに別のキーがあります。

  • アクティビティのタイプ。名前とバージョンに別のキーがあります。

  • タスクリスト。

  • タグ。一部のアクションに対して複数のタグを指定できます。その場合、各タグには別のキーがあります。

注記

Amazon SWF の場合、値はすべて文字列です。そのため、パラメータを指定した文字列に制限する StringEquals などの文字列演算子を使用してパラメータを制約します。ただし、StringEquals などの通常の文字列比較演算子では、すべての要求にパラメータを含める必要があります。パラメータを明示的に含めず、タイプ登録時に指定されたデフォルトのタスクリストなどのデフォルト値がない場合、アクセスは拒否されます。

条件をオプションとして扱うと便利です。関連するパラメータを必ずしも必要とせずにアクションを呼び出すことができます。たとえば、ディサイダーが一連の RespondDecisionTaskCompleted 決定を指定することもできますが、特定の呼び出しに対して 1 つだけ指定することもできます。その場合、StringEqualsIfExists 演算子を使用して適切なパラメータを制約します。これは、パラメータが条件を満たす場合にアクセスを許可しますが、パラメータがない場合はアクセスを拒否しません。

制約付きのパラメータと関連するキーの完全なリストについては、API の要約 を参照してください。

次のセクションでは、Amazon SWF ポリシーを構築する方法の例を示します。詳細については、「String Conditions」(文字列の条件) を参照してください。

Amazon SWF のポリシーの記述

ワークフローは、アクティビティ、ディサイダーなどの複数のアクターで構成されます。適切な IAM ポリシーをアタッチすることで、各アクターのアクセスを制御できます。

次のアクションでは、アクターにすべてのリージョンでフルアカウントアクセスが付与されます。

  • アクション: swf:*

  • リソース: arn:aws:swf:*:123456789012:/domain/*

ワイルドカードを使用すると、単一の値で複数のリソース、アクション、またはリージョンを表すことができます。

  • Resource 値の最初のワイルドカード (*) は、リソースのアクセス許可がすべてのリージョンに適用されることを示します。

    アクセス権限を単一のリージョンに制限するには、ワイルドカードを us-east-1 などの適切なリージョン文字列に置き換えます。

  • Resource 値の 2 番目のワイルドカード (*) は、アクターが指定されたリージョン内の任意のアカウントのドメインにアクセスできるようにします。

  • Action 値のワイルドカード (*) を使用すると、アクターは、任意の Amazon SWF アクションを呼び出すことができます。

ワイルドカードを使用する方法の詳細については、「Element Descriptions」(要素の説明) を参照してください。

ドメインのアクセス許可

部門のワークフローを特定のドメインに制限するには、特定の部門に対してのみ、アクターが任意のアクションを呼び出すことを許可するアクセス許可を付与できます。

アクターに複数のドメインへのアクセスを許可するには、各ドメインのアクセス許可をステートメントのリストとして表現します。

  • アクション: swf:*

  • リソース: arn:aws:swf:*:123456789012:/domain/department1

  • リソース: arn:aws:swf:*:123456789012:/domain/department2

および department1department2ドメインで任意の Amazon SWF アクションの使用をアクターに許可できます。ワイルドカードを使用して複数のドメインを表すこともできます。

API のアクセス許可と制約

アクターが使用できるアクションを制御するには、 Action要素でアクションを指定します。

次のアクションでは、アクターは を呼び出しStartWorkflowExecutionてワークフローを開始できます。他のアクションを使用することはできません。

  • アクション: swf:StartWorkflowExecution

条件

オプションで、 Condition要素を使用してアクションの許容パラメータ値を制約できます。

アクターが開始できるワークフローを制限するには、次のように 1 つ以上のStartWorkflowExecutionパラメータ値を制約します。

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

前述の制約を持つアクターは のみを実行することができversion2workflow1、両方のパラメータをリクエストに含める必要があります。

次のように、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 のアクセス許可と制約

で使用できる決定を制限するには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:*」に置き換えます。

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

AWS マネージドポリシー: SimpleWorkflowFullAccess

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

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

IAM ポリシーに関するサービスモデルの制限

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

例えば、Amazon SWF サービスモデルでは、 パラメータtypeFiltertagFilterパラメータを同じListOpenWorkflowExecutionsリクエストで使用することはできません。次の条件では、スローによってサービスが拒否する呼び出しを無効なリクエストValidationExceptionとして許可します。

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