Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Kebijakan IAM Amazon SWF
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. Amazon SWF kontrol akses didasarkan pada unsur-unsur berikut:
- Efek
-
(Diperlukan) Efek dari pernyataan:
deny
atauallow
.catatan
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, danDomainName
merupakan nama domain. - Tindakan
-
(Wajib) Tindakan yang berlaku untuk pernyataan tersebut, yang Anda rujuk dengan menggunakan format berikut:
serviceId
:action
. Untuk Amazon SWF, aturserviceID
ke.swf
Misalnya,swf:StartWorkflowExecution
mengacu pada StartWorkflowExecutiontindakan, dan digunakan untuk mengontrol pengguna mana yang diizinkan untuk memulai alur kerja.Jika Anda memberikan izin untuk menggunakan RespondDecisionTaskCompleted, 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 PollForActivityTasktindakan, Anda menyertakan
Condition
dan menggunakanswf: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.
catatan
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 sepertiStringEquals
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 RespondDecisionTaskCompletedkeputusan, 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.
-
Bagian berikut memberikan contoh mengenai cara membangun kebijakan Amazon SWF. Untuk detailnya, lihat Syarat String.
Kebijakan penulisan untuk Amazon SWF
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 dalamResource
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 nilaiResource
mengizinkan aktor untuk mengakses salah satu domain akun di wilayah tertentu. -
Wildcard (
*
) dalam nilaiAction
mengizinkan aktor untuk memanggil tindakan Amazon SWF.
Untuk detail tentang cara menggunakan wildcard, lihat Deskripsi Elemen
Perizinan Domain
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
dandepartment2
. Anda juga dapat menggunakan wildcard sesekali untuk mewakili beberapa domain.
Izin dan Kendala API
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
atauanother_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 punswf: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
Untuk membatasi keputusan yang tersediaRespondDecisionTaskCompleted
, Anda harus terlebih dahulu mengizinkan aktor untuk meneleponRespondDecisionTaskCompleted
. 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 meneleponRespondDecisionTaskCompleted
. 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: *”.
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
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
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 samaListOpenWorkflowExecutions
. 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" } }