

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Kebijakan IAM Amazon SWF
<a name="swf-dev-iam.policies"></a>

Kebijakan IAM berisi satu atau beberapa elemen `Statement`, masing-masing berisi satu set elemen yang menentukan kebijakan. Untuk daftar lengkap elemen d an diskusi umum tentang cara membangun kebijakan, lihat [Bahasa Kebijakan Akses](https://docs.aws.amazon.com/IAM/latest/UserGuide/AccessPolicyLanguage.html). Amazon SWF kontrol akses didasarkan pada unsur-unsur berikut:

Efek  
(Diperlukan) Efek dari pernyataan: `deny` atau `allow`.  
Anda harus mengizinkan akses secara eksplisit; IAM menolak akses secara default.

Sumber daya  
(Wajib) Sumber daya — entitas dalam AWS layanan yang dapat berinteraksi dengan pengguna — yang berlaku untuk pernyataan tersebut.  
Anda dapat mengekspresikan izin sumber daya hanya untuk domain. Misalnya, kebijakan dapat mengizinkan akses hanya ke domain tertentu di akun Anda. Untuk menyatakan izin domain, setel `Resource` ke Amazon Resource Name (ARN) domain, yang memiliki format “*Region*arn:aws:swf::: /domain/”. *AccountID* *DomainName* *Region*adalah AWS wilayah, *AccountID* adalah ID akun tanpa tanda hubung, dan *DomainName* merupakan nama domain.

Tindakan  
(Wajib) Tindakan yang berlaku untuk pernyataan tersebut, yang Anda rujuk dengan menggunakan format berikut:*serviceId*:*action*. Untuk Amazon SWF, atur *serviceID* ke. `swf` Misalnya, `swf:StartWorkflowExecution` mengacu pada [StartWorkflowExecution](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_StartWorkflowExecution.html)tindakan, dan digunakan untuk mengontrol pengguna mana yang diizinkan untuk memulai alur kerja.  
 Jika Anda memberikan izin untuk menggunakan [RespondDecisionTaskCompleted](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_RespondDecisionTaskCompleted.html), Anda juga dapat mengontrol akses ke daftar keputusan yang disertakan dengan menggunakan `Action` untuk menyatakan izin untuk API semu. Karena IAM menolak akses secara default, keputusan decider harus diizinkan secara eksplisit atau tidak akan diterima. Anda dapat menggunakan nilai `*` untuk mengizinkan semua keputusan.

Kondisi  
(Opsional) Mengekspresikan kendala pada satu atau lebih parameter tindakan ini, yang membatasi nilai-nilai yang diizinkan.  
Tindakan Amazon SWF sering memiliki cakupan yang luas, yang dapat Anda kurangi dengan menggunakan syarat IAM. Misalnya, untuk membatasi daftar tugas mana yang diizinkan untuk diakses [PollForActivityTask](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_PollForActivityTask.html)tindakan, Anda menyertakan `Condition` dan menggunakan `swf:taskList.name` kunci untuk menentukan daftar yang diizinkan.   
Anda dapat mengekspresikan kendala untuk entitas berikut.  
+ Tipe alur kerja. Nama dan versi memiliki kunci terpisah.
+ Tipe aktivitas. Nama dan versi memiliki kunci terpisah.
+ Daftar tugas.
+ Tag. Anda dapat menentukan beberapa tag untuk beberapa tindakan. Dalam hal ini, setiap tag memiliki kunci yang terpisah.
Untuk Amazon SWF, semua nilai merupakan string sehingga Anda membatasi parameter dengan menggunakan operator string seperti `StringEquals`, yang membatasi parameter untuk string tertentu. Namun, operator perbandingan string umum seperti `StringEquals` memerlukan semua permintaan untuk memasukkan parameter. Jika Anda tidak menyertakan parameter secara eksplisit, dan tidak ada nilai default seperti daftar tugas default yang disediakan selama pendaftaran tipe, akses akan ditolak.  
Hal ini sering berguna untuk menganggap syarat sebagai opsional, sehingga Anda dapat memanggil tindakan tanpa harus menyertakan parameter terkait. Misalnya, Anda mungkin ingin mengizinkan penentu menentukan serangkaian [RespondDecisionTaskCompleted](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_RespondDecisionTaskCompleted.html)keputusan, tetapi juga mengizinkannya untuk menentukan hanya satu dari mereka untuk panggilan tertentu. Dalam hal ini, Anda membatasi parameter yang sesuai menggunakan operator `StringEqualsIfExists`, yang mengizinkan akses jika parameter memenuhi syarat, tetapi tidak menolak akses jika parameter tidak ada.
Untuk daftar lengkap parameter yang dapat dibatasi dan kunci yang terkait, lihat [Ringkasan API](swf-dev-iam.api.md).

Bagian berikut memberikan contoh mengenai cara membangun kebijakan Amazon SWF. Untuk detailnya, lihat [Syarat String](https://docs.aws.amazon.com/IAM/latest/UserGuide/AccessPolicyLanguage_ElementDescriptions.html#AccessPolicyLanguage_ConditionType). 

## Kebijakan penulisan untuk Amazon SWF
<a name="swf-dev-iam.policies.examples"></a>

Alur kerja terdiri dari beberapa *aktor* — aktivitas, penentu, dan sebagainya. Anda dapat mengontrol akses untuk setiap aktor dengan melampirkan kebijakan IAM yang sesuai.

Dengan tindakan berikut, aktor akan diberikan akses akun penuh di semua wilayah:
+ **Tindakan**: `swf:*`
+ **Sumber daya**: `arn:aws:swf:*:123456789012:/domain/*`

 Anda dapat menggunakan wildcard untuk memiliki nilai tunggal yang mewakili beberapa sumber daya, tindakan, atau wilayah.
+ **Wildcard (`*`) pertama dalam `Resource` nilai menunjukkan bahwa izin sumber daya berlaku untuk semua wilayah.** 

  Untuk membatasi izin untuk satu wilayah, gantilah wildcard dengan string wilayah yang sesuai, seperti us-east-1. 
+ Wildcard kedua (`*`) dalam nilai `Resource` mengizinkan aktor untuk mengakses salah satu domain akun di wilayah tertentu.
+ Wildcard (`*`) dalam nilai `Action` mengizinkan aktor untuk memanggil tindakan Amazon SWF. 

Untuk detail tentang cara menggunakan wildcard, lihat [Deskripsi Elemen](https://docs.aws.amazon.com/IAM/latest/UserGuide/AccessPolicyLanguage_ElementDescriptions.html)

### Perizinan Domain
<a name="swf-dev-iam.policies.examples.domain"></a>

Untuk membatasi alur kerja departemen ke domain tertentu, Anda dapat memberikan izin yang memungkinkan aktor untuk memanggil tindakan apa pun, tetapi hanya untuk departemen tertentu. 

Untuk mendapatkan akses aktor ke lebih dari satu domain, berikan izin untuk setiap domain sebagai daftar Pernyataan:
+ **Tindakan**: `swf:*`
+ **Sumber daya**: `arn:aws:swf:*:123456789012:/domain/department1` 
+ **Sumber daya**: `arn:aws:swf:*:123456789012:/domain/department2` 

Anda dapat mengizinkan aktor untuk menggunakan tindakan Amazon SWF apa pun di domain `department1` dan`department2`. Anda juga dapat menggunakan wildcard sesekali untuk mewakili beberapa domain. 

### Izin dan Kendala API
<a name="swf-dev-iam.policies.examples.api"></a>

Anda mengontrol **tindakan** mana yang dapat digunakan aktor dengan menentukan tindakan dalam `Action` elemen. 

Dengan tindakan berikut, seorang aktor hanya dapat menelepon `StartWorkflowExecution` untuk memulai alur kerja. Itu tidak bisa menggunakan tindakan lain.
+ **Tindakan**: `swf:StartWorkflowExecution` 

**Ketentuan**  
Anda dapat secara opsional membatasi nilai parameter tindakan yang diizinkan dengan menggunakan elemen. `Condition`

Untuk membatasi alur kerja yang dapat dimulai aktor, batasi satu atau lebih nilai `StartWorkflowExecution` parameter, sebagai berikut:

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

Seorang aktor dengan kendala sebelumnya hanya `version2` dapat menjalankan `workflow1` dan kedua parameter harus disertakan dalam permintaan.

Anda dapat membatasi parameter tanpa harus memasukkanya dalam permintaan dengan menggunakan operator `StringEqualsIfExists`, sebagai berikut:

```
"Condition" : {
   "StringEqualsIfExists" : { "swf:taskList.name" : "task_list_name" }
}
```

Aktor dengan kebijakan sebelumnya dapat menentukan daftar tugas secara opsional saat memulai eksekusi alur kerja.

Anda dapat membatasi daftar tag untuk beberapa tindakan. Setiap tag memiliki kunci terpisah, jadi Anda gunakan `swf:tagList.member.0` untuk membatasi tag pertama dalam daftar, `swf:tagList.member.1` untuk membatasi tag kedua dalam daftar, dan seterusnya, hingga maksimum 5. 

Anda harus berhati-hati bagaimana Anda membatasi daftar tag. Misalnya, kondisi berikut ***tidak*** disarankan. 

Kondisi berikut **tidak** disarankan karena memungkinkan Anda untuk secara opsional menentukan salah satu `some_ok_tag` atau`another_ok_tag`. Namun, Kondisi hanya membatasi **elemen pertama** dari daftar tag. Daftar dapat memiliki elemen tambahan dengan nilai arbitrer yang semuanya diizinkan karena kondisi tidak menerapkan kondisi apa pun`swf:tagList.member.1`,`swf:tagList.member.2`, dan seterusnya.

```
// Example to illustrate an insecure Condition
"Condition" : {
   "StringEqualsIfExists" : {
      "swf:tagList.member.0" : "some_ok_tag", "another_ok_tag"
   }
}
```

Salah satu cara untuk mengatasi masalah sebelumnya adalah dengan melarang penggunaan daftar tag. 

Kebijakan berikut memastikan bahwa hanya `some_ok_tag` atau `another_ok_tag` yang diperbolehkan dengan mewajibkan daftar hanya memiliki satu elemen.

```
"Condition" : {
   "StringEqualsIfExists" : {
      "swf:tagList.member.0" : "some_ok_tag", "another_ok_tag"
    },
    "Null" : { "swf:tagList.member.1" : "true" }
}
```

### Izin dan Kendala API Semu
<a name="pseudo-api-permissions-constraints"></a>

Untuk membatasi keputusan yang tersedia`RespondDecisionTaskCompleted`, Anda harus terlebih dahulu mengizinkan aktor untuk menelepon`RespondDecisionTaskCompleted`. Anda kemudian menyatakan izin untuk anggota API semu yang sesuai menggunakan sintaks yang sama seperti untuk API biasa, sebagai berikut:
+ **Pernyataan 1**

  **Sumber daya**: `arn:aws:swf:*:123456789012:/domain/*` 

  **Tindakan**: `swf:RespondDecisionTaskCompleted` 
+ **Pernyataan 2**

  **Sumber daya**: `*` 

  **Tindakan**: `swf:ScheduleActivityTask` 

  **Kondisi**: ` "StringEquals" : { "swf:activityType.name" : "SomeActivityType" }` 

Yang pertama `Statement` memungkinkan aktor untuk menelepon`RespondDecisionTaskCompleted`. Pernyataan kedua memungkinkan aktor untuk menggunakan `ScheduleActivityTask` keputusan untuk mengarahkan Amazon SWF untuk menjadwalkan tugas kegiatan. Untuk mengizinkan semua keputusan, ganti “swf:ScheduleActivityTask" dengan “swf: \$1”.

Anda dapat menggunakan operator Syarat untuk membatasi parameter seperti dengan API umum. `StringEquals`Operator dalam contoh sebelumnya `Condition` memungkinkan `RespondDecisionTaskCompleted` untuk menjadwalkan tugas aktivitas untuk `SomeActivityType` aktivitas tersebut, dan harus menjadwalkan tugas itu. Jika Anda ingin mengizinkan `RespondDecisionTaskCompleted` untuk menggunakan nilai parameter tetapi tidak memerlukan untuk melakukannya, Anda sebaliknya dapat menggunakan operator `StringEqualsIfExists`.

## AWS kebijakan terkelola: SimpleWorkflowFullAccess
<a name="swf-full-accss-mngd-policy"></a>

Anda dapat melampirkan kebijakan `SimpleWorkflowFullAccess` ke identitas IAM Anda.

Kebijakan ini menyediakan akses penuh ke layanan konfigurasi Amazon SWF.

## Layanan Model Pembatasan pada Kebijakan IAM
<a name="swf-dev-iam.policies.allowed"></a>

Anda harus mempertimbangkan kendala model layanan saat membuat kebijakan IAM. Mungkin untuk membuat kebijakan valid IAM secara sintaksis yang mewakili permintaan Amazon SWF yang tidak valid; permintaan yang diizinkan dalam hal kontrol akses masih bisa gagal karena merupakan permintaan yang tidak valid. 

Misalnya, model layanan Amazon SWF **tidak** mengizinkan `tagFilter` parameter `typeFilter` dan digunakan dalam permintaan yang sama`[ListOpenWorkflowExecutions](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_ListOpenWorkflowExecutions.html)`. Kondisi berikut akan memungkinkan panggilan yang akan ditolak oleh layanan—dengan melempar `ValidationException` —sebagai permintaan yang tidak valid:

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