翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon SWF IAM ポリシー
IAM ポリシーには 1 つ以上のStatement
要素が含まれており、それぞれにポリシーを定義する一連の要素が含まれています。要素の完全な一覧とポリシーの作成方法に関する一般的な説明については、「The Access Policy Language」(アクセスポリシー言語) を参照してください。Amazon SWF アクセスコントロールは、以下の要素に基づいています。
- 効果
-
(必須) ステートメントの効果:
deny
またはallow
。注記
アクセスを明示的に許可する必要があります。 IAM はデフォルトでアクセスを拒否します。
- リソース
-
(必須) リソース - 内のエンティティ AWS ステートメントが適用される、ユーザーが操作できる サービス。
ドメインに対してのみリソースアクセス許可を表すことができます。たとえば、ポリシーでは、アカウント内の特定のドメインのみにアクセスを許可することができます。ドメインのアクセス許可を表すには、
Resource
をドメインの Amazon リソースネーム (ARN) に設定します。これは「arn:aws:swf:Region
:AccountID
:/ドメイン/DomainName
".Region
は AWS region、AccountID
はダッシュのないアカウント ID で、DomainName
はドメイン名です。 - アクション
-
(必須) ステートメントが適用されるアクション。次の形式を使用して参照します。
serviceId
:action
。 Amazon の場合SWF、 を設定します。serviceID
swf
に送信します。例えば、 は StartWorkflowExecutionアクションswf:StartWorkflowExecution
を参照し、ワークフローを開始できるユーザーを制御するために使用されます。を使用するアクセス許可を付与する場合RespondDecisionTaskCompleted、 を使用して擬似 のアクセス許可
Action
を表現することで、含まれている決定のリストへのアクセスを制御することもできますAPI。はデフォルトでアクセスIAMを拒否するため、ディサイダーの決定を明示的に許可する必要があります。許可しない場合、ディサイダーの決定は受け入れられません。*
値を使用してすべての決定を許可することができます。 - 条件
-
許可された値を制限するアクションのパラメータの 1 つ以上に制約を表現します。
Amazon SWFアクションには多くの場合、広範囲にわたるものがあり、IAM条件を使用することで減らすことができます。例えば、PollForActivityTaskアクションがアクセスできるタスクリストを制限するには、 を含め、
swf:taskList.name
キーCondition
を使用して許可されるリストを指定します。以下のエンティティに対して制約を表すことができます。
-
ワークフロータイプ。名前とバージョンに別のキーがあります。
-
アクティビティのタイプ。名前とバージョンに別のキーがあります。
-
タスクリスト。
-
タグ。一部のアクションに対して複数のタグを指定できます。その場合、各タグには別のキーがあります。
注記
Amazon の場合SWF、値はすべての文字列であるため、 などの文字列演算子を使用してパラメータを制限します。これにより
StringEquals
、パラメータは指定された文字列に制限されます。ただし、StringEquals
などの通常の文字列比較演算子では、すべての要求にパラメータを含める必要があります。パラメータを明示的に含めず、タイプ登録時に指定されたデフォルトのタスクリストなどのデフォルト値がない場合、アクセスは拒否されます。条件をオプションとして扱うと便利です。関連するパラメータを必ずしも必要とせずにアクションを呼び出すことができます。例えば、ディサイダーに一連のRespondDecisionTaskCompleted決定の指定を許可し、特定の呼び出しに対してそのうちの 1 つだけを指定することもできます。その場合、
StringEqualsIfExists
演算子を使用して適切なパラメータを制約します。これは、パラメータが条件を満たす場合にアクセスを許可しますが、パラメータがない場合はアクセスを拒否しません。制約付きのパラメータと関連するキーの完全なリストについては、API 概要 を参照してください。
-
次のセクションでは、Amazon SWFポリシーを構築する方法の例を示します。詳細については、「String Conditions」(文字列の条件) を参照してください。
Amazon SWF ポリシーの例
ワークフローは、複数のアクター(アクティビティ、ディサイダーなど) で構成されます。適切なIAMポリシーをアタッチすることで、各アクターのアクセスを制御できます。このセクションでは、いくつかの例を紹介します。最も簡単なケースを次に示します。
{ "Version": "2012-10-17", "Statement" : [ { "Effect" : "Allow", "Action" : "swf:*", "Resource" : "arn:aws:swf:*:123456789012:/domain/*" } ] }
このポリシーをアクターにアタッチすると、すべてのリージョンで完全なアカウントアクセスが可能になります。ワイルドカードを使用すると、単一の値で複数のリソース、アクション、またはリージョンを表すことができます。
-
Resource
値の最初のワイルドカード (*
) は、リソース権限がすべてのリージョンに適用されることを示します。アクセス権限を単一のリージョンに制限するには、ワイルドカードを us-east-1 などの適切なリージョン文字列に置き換えます。 -
Resource
値の 2 番目のワイルドカード (*
) は、アクターが指定されたリージョン内の任意のアカウントのドメインにアクセスできるようにします。 -
Action
値のワイルドカード (*
) を使用すると、アクターは任意の Amazon SWFアクションを呼び出すことができます。
ワイルドカードを使用する方法の詳細については、「Element Descriptions」(要素の説明) を参照してください。
次のセクションでは、より緻密な方法でアクセス許可を付与するポリシーの例を示します。
ドメインのアクセス許可
部門のワークフローを特定のドメインに制限する場合は、次のようなものを使用できます。
{ "Version": "2012-10-17", "Statement": [ { "Effect" : "Allow", "Action" : "swf:*", "Resource" : "arn:aws:swf:*:123456789012:/domain/department1" } ] }
このポリシーをアクターにアタッチすると、任意のアクションを呼び出せますが、department1 ドメインのアクションのみが呼び出されます。
アクターが複数のドメインにアクセスできるようにするには、次のように、ドメインごとに個別にアクセス許可を表します。
{ "Version": "2012-10-17", "Statement": [ { "Effect" : "Allow", "Action" : "swf:*", "Resource" : "arn:aws:swf:*:123456789012:/domain/department1" }, { "Effect" : "Allow", "Action" : "swf:*", "Resource" : "arn:aws:swf:*:123456789012:/domain/department2" } ] }
このポリシーをアクターにアタッチすると、 department1
および department2
ドメインで任意の Amazon SWFアクションを使用できます。ワイルドカードを使用して複数のドメインを表すこともできます。
API アクセス許可と制約
アクターが Action
要素で使用できるアクションを制御します。必要に応じて、Condition
要素を使用して、アクションの許容パラメータ値を制約できます。
アクターを特定のアクションだけに制限する場合は、次のようなものを使用できます。
{ "Version": "2012-10-17", "Statement": [ { "Effect" : "Allow", "Action" : "swf:StartWorkflowExecution", "Resource" : "arn:aws:swf:*:123456789012:/domain/department2" } ] }
このポリシーをアクターにアタッチすると、StartWorkflowExecution
を呼び出して department2
ドメインのワークフローを開始できます。他のアクションを使用したり、他のドメインのワークフローを開始したりすることはできません。
次のように、1 つ以上の StartWorkflowExecution
パラメータ値を制約することによって、アクターが開始できるワークフローをさらに制限することができます。
{ "Version": "2012-10-17", "Statement": [ { "Effect" : "Allow", "Action" : "swf:StartWorkflowExecution", "Resource" : "arn:aws:swf:*:123456789012:/domain/department1", "Condition" : { "StringEquals" : { "swf:workflowType.name" : "workflow1", "swf:workflowType.version" : "version2" } } } ] }
このポリシーでは、StartWorkflowExecution
アクションの name
パラメータと version
パラメータを制限します。ポリシーをアクターにアタッチすると、department1
ドメインで、workflow1
の version2
のみを実行でき、両方のパラメータをリクエストに含める必要があります。
次のように、StringEqualsIfExists
演算子を使用して、リクエストにパラメータを含めることなくパラメータを制約できます。
{ "Version": "2012-10-17", "Statement" : [ { "Effect" : "Allow", "Action" : "swf:StartWorkflowExecution", "Resource" : "arn:aws:swf:*:123456789012:/domain/some_domain", "Condition" : { "StringEqualsIfExists" : { "swf:taskList.name" : "task_list_name" } } } ] }
このポリシーにより、アクターは、ワークフローの実行を開始するときに、タスクリストをオプションで指定できます。
いくつかのアクションに対してタグのリストを制約することができます。この場合、各タグには別のキーがあります。したがって、swf:tagList.member.0
を使用してリストの最初のタグを制約し、swf:tagList.member.1
を使用してリストの 2 番目のタグを制約するなどの方法で、最大 5 つまで制約できます。ただし、タグリストをどのように制約するか注意する必要があります。たとえば、推奨されていないポリシーの例を次に示します。
{ "Version": "2012-10-17", "Statement" : [ { "Effect" : "Allow", "Action" : "swf:StartWorkflowExecution", "Resource" : "arn:aws:swf:*:123456789012:/domain/some_domain", "Condition" : { "StringEqualsIfExists" : { "swf:tagList.member.0" : "some_ok_tag", "another_ok_tag" } } } ] }
このポリシーでは、オプションで、some_ok_tag
または another_ok_tag
のどちらかを指定できます。ただし、このポリシーはタグリストの最初の要素のみを制約します。このポリシーが、swf:tagList.member.1
、swf:tagList.member.2
などの条件を適用しないため、このリストには任意の値を持つ要素が追加される可能性があります。
この問題に対処する 1 つの方法は、タグリストの使用を禁止することです。次のポリシーでは、リストに 1 つの要素のみ持つように要求することで、some_ok_tag
または another_ok_tag
のみが許可されるようにします。
{ "Version": "2012-10-17", "Statement" : [ { "Effect" : "Allow", "Action" : "swf:StartWorkflowExecution", "Resource" : "arn:aws:swf:*:123456789012:/domain/some_domain", "Condition" : { "StringEqualsIfExists" : { "swf:tagList.member.0" : "some_ok_tag", "another_ok_tag" }, "Null" : { "swf:tagList.member.1" : "true" } } } ] }
擬似APIアクセス許可と制約
決定を RespondDecisionTaskCompleted
のみが使用可能にする場合は、最初にアクターが RespondDecisionTaskCompleted
を呼び出すことを許可する必要があります。その後、次のように、通常の と同じ構文を使用してAPI、適切な擬似APIメンバーのアクセス許可を表現できます。
{ "Version": "2012-10-17", "Statement" : [ { "Resource" : "arn:aws:swf:*:123456789012:/domain/*", "Action" : "swf:RespondDecisionTaskCompleted", "Effect" : "Allow" }, { "Resource" : "*", "Action" : "swf:ScheduleActivityTask", "Effect" : "Allow", "Condition" : { "StringEquals" : { "swf:activityType.name" : "SomeActivityType" } } } ] }
このポリシーをアクターにアタッチすると、最初の Statement
要素によってアクターは RespondDecisionTaskCompleted
を呼び出すことができます。2 番目の要素は、アクターがScheduleActivityTask
決定を使用して Amazon にアクティビティタスクをスケジュールSWFするよう指示できるようにします。すべての決定を許可するには、「swf:ScheduleActivityTask」を「swf:*」に置き換えます。
条件演算子を使用して、通常の と同様にパラメータを制限できますAPI。この Condition
の StringEquals
演算子は、RespondDecisionTaskCompleted
が SomeActivityType
アクティビティのアクティビティタスクをスケジュールすることを許可するので、そのタスクをスケジュールする必要があります。RespondDecisionTaskCompleted
がパラメータ値を使用することを許可したいが、そうする必要がない場合は、代わりに StringEqualsIfExists
演算子を使用することができます。
AWS マネージドポリシー: SimpleWorkflowFullAccess
IAM ID にSimpleWorkflowFullAccess
ポリシーをアタッチできます。
このポリシーは、Amazon SWF設定サービスへのフルアクセスを提供します。
アクセス許可の詳細
このポリシーには、以下のアクセス許可が含まれています。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "swf:*" ], "Resource": "*" } ] }
IAM ポリシーに関するサービスモデルの制限
IAM ポリシーを作成するときは、サービスモデルの制約を考慮する必要があります。無効な Amazon SWFリクエストを表す構文的に有効なIAMポリシーを作成できます。アクセスコントロールに関して許可されているリクエストは、無効なリクエストであるため、引き続き失敗する可能性があります。
たとえば、ListOpenWorkflowExecutions
の次のポリシーは推奨されません。
{ "Version": "2012-10-17", "Statement" : [ { "Effect" : "Allow", "Action" : "swf:ListOpenWorkflowExecutions", "Resource" : "arn:aws:swf:*:123456789012:/domain/domain_name", "Condition" : { "StringEquals" : { "swf:typeFilter.name" : "workflow_name", "swf:typeFilter.version" : "workflow_version", "swf:tagFilter.tag" : "some_tag" } } } ] }
Amazon SWFサービスモデルでは、 パラメータtypeFilter
と tagFilter
パラメータを同じListOpenWorkflowExecutions
リクエストで使用することはできません。したがって、そのポリシーは、無効なリクエストとして ValidationException
をスローすることによって、サービスが拒否する呼び出しを許可します。