Amazon SWF IAM 政策 - Amazon Simple Workflow Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Amazon SWF IAM 政策

IAM策略包含一或多個Statement元素,每個元素都包含一組定義策略的元素。如需完整的元素清單以及如何建構原則的一般討論,請參閱存取原則語言。Amazon SWF 存取控制是以下列元素為基礎:

Effect

(必要) denyallow 陳述式的影響。

注意

您必須明確允許存取;預設會IAM拒絕存取。

資源

(必要) 該陳述式適用的資源 — 使用者可以與之互動的 AWS 服務中的實體。

您只可以表達網域的資源許可。例如,政策可以僅允許存取您帳戶中的特定網域。若要表示網域的許可,請設定Resource為網域的 Amazon 資源名稱 (ARN),其格式為「arn: aws: swf:Region:AccountID:/域/DomainName". Region 是區 AWS 域,AccountID 是沒有破折號的帳戶 ID,並且 DomainName 是網域名稱。

動作

(必要) 陳述式適用的動作,您可以使用下列格式來參考:serviceId:action。 對於 AmazonSWF,設置 serviceIDswf。例如,swf:StartWorkflowExecution參照StartWorkflowExecution動作,可用來控制允許哪些使用者啟動工作流程。

如果您授與使用權限 RespondDecisionTaskCompleted,您也可以使用來表示虛擬化API的權限,Action來控制對內含決策清單的存取。由於默認IAM拒絕訪問,決策程序的決定必須明確允許,否則將不被接受。您可以使用 * 值來允許所有決策。

條件

(選用) 表達一或多個動作參數的限制條件,這樣會限制允許的值。

Amazon SWF 動作通常具有廣泛的範圍,您可以透過使用IAM條件來減少這些動作。例如,若要限制允許存取PollForActivityTask動作的工作清單,您可以包含 a Condition 並使用swf:taskList.name索引鍵來指定允許的清單。

您可以表達下列實體的限制條件。

  • 工作流程類型。名稱和版本有不同的索引鍵。

  • 活動類型。名稱和版本有不同的索引鍵。

  • 任務清單。

  • 標籤。您可以為一些動作指定多個標籤。在該情況下,每個標籤都會有不同的索引鍵。

注意

對於 Amazon 而言SWF,這些值都是字串,因此您可以使用字串運算子來限制參數,例如StringEquals,該運算子會將參數限制為指定的字串。不過,StringEquals 這類一般字串比較運算子需要所有請求都包含該參數。如果您未明確地包含參數,而且在類型註冊期間沒有所提供的預設任務清單這類預設值,則會拒絕存取權。

這通常用來將條件設定為選用項目,因此您可以呼叫動作,而不需要包含相關聯的參數。例如,您可能希望允許決策程序指定一組RespondDecisionTaskCompleted決策,但也允許它為任何特定調用僅指定其中之一。在該情況下,您可以使用 StringEqualsIfExists 運算子限制適當的參數,而這在參數滿足條件時允許存取權,但在缺少參數時拒絕存取權。

如需可限制之參數和相關聯之索引鍵的完整清單,請參閱「API摘要」。

下一節提供如何建構 Amazon SWF 政策的範例。如需詳細資訊,請參閱字串條件

Amazon SWF 政策示例

工作流程由多個演員組成 — 活動、決策程式等。您可以透過附加適當的IAM策略來控制每個實行者的存取。本節將提供一些範例。以下顯示最簡單的情況:

{ "Version": "2012-10-17", "Statement" : [ { "Effect" : "Allow", "Action" : "swf:*", "Resource" : "arn:aws:swf:*:123456789012:/domain/*" } ] }

如果您將此政策連接至動作者,其會具有所有區域的完整帳戶存取權。您可以使用萬用字元,讓單一值代表多個資源、動作或區域。

  • Resource 值中的第一個萬用字元 (*) 指出資源許可套用至所有區域。若要將權限限制為單一區域,請以適當的區域字串取代萬用字元,例如 us-east-1。

  • Resource 值中的第二個萬用字元 (*) 允許動作者存取指定區域中的任意帳戶網域。

  • Action值中的萬用字元 (*) 允許演員呼叫任何 Amazon SWF 動作。

如需如何使用萬用字元的詳細資訊,請參閱元素描述

下列各節顯示以更精細方式授予許可的政策範例。

網域許可

如果您想要將部門的工作流程限定為特定網域,可以使用下列類似內容:

{ "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" } ] }

如果您將此政策附加到參與者,則可以使用department1department2網域中的任何 Amazon SWF 動作。您有時也可以使用萬用字元來代表多個網域。

API權限和約束

您可以控制動作者能與 Action 元素使用的動作。您可以使用 Condition 元素選擇性地限制動作的允許參數值。

如果您想要約束動作者使用特定動作,您可以使用下列類似內容:

{ "Version": "2012-10-17", "Statement": [ { "Effect" : "Allow", "Action" : "swf:StartWorkflowExecution", "Resource" : "arn:aws:swf:*:123456789012:/domain/department2" } ] }

如果您將此政策連接至動作者,動作者即可呼叫 StartWorkflowExecution 來啟動 department2 網域中的工作流程。動作者無法使用其他動作,或啟動其他網域中的工作流程。

您可以限制一或多個 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 動作的 nameversion 參數。如果您將此政策連接至動作者,動作者將只能執行 department1 網域中 workflow1version2,而且兩個參數都必須包含在請求中。

您可以使用 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 限制清單中的第二個標籤,以此類推,最多可以使用 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_taganother_ok_tag。不過,此政策只會限制標籤清單的第一個元素。此清單可能含有因下列原因而允許之任意值的其他元素:此政策未將任何條件套用至 swf:tagList.member.1swf:tagList.member.2 等。

處理此問題的其中一種方法為不允許使用標籤清單。下列政策以清單只需要一個元素為由,確保僅允許 some_ok_taganother_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。第二個元素允許演員使用該ScheduleActivityTask決定來指導 Amazon SWF 安排活動任務。要允許所有決定,請將「swf:ScheduleActivityTask」替換為「swf:*」。

您可以使用「條件」運算子來約束參數,就像使用一般參數一樣API。此 Condition 中的 StringEquals 運算子允許 RespondDecisionTaskCompleted 排程 SomeActivityType 活動的活動任務,且其必須排程該任務。如果您想要允許 RespondDecisionTaskCompleted 使用參數值,但為非必要,則可以改為使用 StringEqualsIfExists 運算子。

AWS 受管理的策略: SimpleWorkflowFullAccess

您可以將SimpleWorkflowFullAccess原則附加至您的IAM身分識別。

此政策提供對 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 服務模型不允許在同一個ListOpenWorkflowExecutions請求中使用typeFiltertagFilter參數。因此,原則允許服務拒絕的呼叫 (藉由擲回) ValidationException 做為無效要求。