本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon SWF IAM 政策
IAM策略包含一或多個Statement
元素,每個元素都包含一組定義策略的元素。如需完整的元素清單以及如何建構原則的一般討論,請參閱存取原則語言。Amazon SWF 存取控制是以下列元素為基礎:
- Effect
-
(必要)
deny
或allow
陳述式的影響。注意
您必須明確允許存取;預設會IAM拒絕存取。
- 資源
-
(必要) 該陳述式適用的資源 — 使用者可以與之互動的 AWS 服務中的實體。
您只可以表達網域的資源許可。例如,政策可以僅允許存取您帳戶中的特定網域。若要表示網域的許可,請設定
Resource
為網域的 Amazon 資源名稱 (ARN),其格式為「arn: aws: swf:Region
:AccountID
:/域/DomainName
".Region
是區 AWS 域,AccountID
是沒有破折號的帳戶 ID,並且DomainName
是網域名稱。 - 動作
-
(必要) 陳述式適用的動作,您可以使用下列格式來參考:
serviceId
:action
。 對於 AmazonSWF,設置serviceID
到swf
。例如,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" } ] }
如果您將此政策附加到參與者,則可以使用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
網域中的工作流程。動作者無法使用其他動作,或啟動其他網域中的工作流程。
您可以限制一或多個 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
限制清單中的第二個標籤,以此類推,最多可以使用 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
等。
處理此問題的其中一種方法為不允許使用標籤清單。下列政策以清單只需要一個元素為由,確保僅允許 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
。第二個元素允許演員使用該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
請求中使用typeFilter
和tagFilter
參數。因此,原則允許服務拒絕的呼叫 (藉由擲回) ValidationException
做為無效要求。