Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Menggunakan kondisi IAM kebijakan untuk kontrol akses berbutir halus
Ketika memberikan izin di DynamoDB, Anda dapat menetapkan syarat yang menentukan bagaimana kebijakan izin berlaku.
Gambaran Umum
Di DynamoDB, Anda memiliki opsi untuk menentukan kondisi saat memberikan izin menggunakan IAM kebijakan (lihat). Manajemen Identitas dan Akses untuk Amazon DynamoDB Sebagai contoh, Anda dapat:
-
Memberi izin kepada pengguna akan akses hanya-baca pada item dan atribut tertentu dalam tabel atau indeks sekunder.
-
Memberi izin kepada pengguna akan akses hanya-tulis pada atribut tertentu dalam tabel, berdasarkan identitas pengguna tersebut.
Di DynamoDB, Anda dapat menentukan kondisi dalam kebijakan menggunakan kunci kondisi, seperti IAM yang diilustrasikan dalam kasus penggunaan di bagian berikut.
catatan
Beberapa AWS layanan juga mendukung kondisi berbasis tag; Namun, DynamoDB tidak.
Kasus penggunaan izin
Selain mengontrol akses ke tindakan API DynamoDB, Anda juga dapat mengontrol akses ke item dan atribut data individual. Misalnya, Anda dapat melakukan hal berikut:
-
Memberikan izin pada tabel, namun batasi akses ke item tertentu dalam tabel tersebut berdasarkan nilai kunci primer tertentu. Misalnya aplikasi jejaring sosial untuk permainan, yang mana semua data permainan yang disimpan pengguna disimpan dalam satu tabel, tetapi tidak ada pengguna yang dapat mengakses item data yang bukan miliknya, seperti yang diperlihatkan dalam ilustrasi berikut:
-
Menyembunyikan informasi sehingga hanya subset dari atribut yang terlihat oleh pengguna. Misalnya aplikasi yang menampilkan data penerbangan untuk bandara terdekat, berdasarkan lokasi pengguna. Nama maskapai penerbangan, waktu kedatangan dan keberangkatan, serta nomor penerbangan semuanya ditampilkan. Namun atribut seperti nama pilot atau jumlah penumpang disembunyikan, seperti terlihat pada ilustrasi berikut:
Untuk menerapkan kontrol akses berbutir halus semacam ini, Anda menulis kebijakan IAM izin yang menentukan kondisi untuk mengakses kredensi keamanan dan izin terkait. Anda kemudian menerapkan kebijakan tersebut ke pengguna, grup, atau peran yang Anda buat menggunakan IAM konsol. IAMKebijakan Anda dapat membatasi akses ke setiap item dalam tabel, akses ke atribut dalam item tersebut, atau keduanya secara bersamaan.
Anda juga dapat menggunakan federasi identitas web untuk mengontrol akses oleh pengguna yang diautentikasi dengan Login dengan Amazon, Facebook, atau Google. Untuk informasi selengkapnya, lihat Menggunakan federasi identitas web.
Anda menggunakan IAM Condition
elemen untuk menerapkan kebijakan kontrol akses berbutir halus. Dengan menambahkan elemen Condition
ke kebijakan izin, Anda dapat mengizinkan atau menolak akses ke item dan atribut dalam tabel dan indeks DynamoDB, berdasarkan kebutuhan bisnis khusus Anda.
Sebagai contoh, pertimbangkan aplikasi game seluler yang memungkinkan pemain memilih dan memainkan berbagai permainan berbeda. Aplikasi ini menggunakan tabel DynamoDB bernama GameScores
untuk melacak skor tertinggi dan data pengguna lainnya. Setiap item dalam tabel diidentifikasi secara unik berdasarkan ID pengguna dan nama permainan yang dimainkan pengguna. Tabel GameScores
memiliki kunci primer yang terdiri dari kunci partisi (UserId
) dan kunci urutan (GameTitle
). Pengguna hanya memiliki akses ke data game yang terkait dengan ID pengguna mereka. Seorang pengguna yang ingin bermain game harus termasuk dalam IAM peran bernamaGameRole
, yang memiliki kebijakan keamanan yang melekat padanya.
Untuk mengelola izin pengguna di aplikasi ini, Anda dapat menulis kebijakan izin seperti berikut:
{ "Version":"2012-10-17", "Statement":[ { "Sid":"AllowAccessToOnlyItemsMatchingUserID", "Effect":"Allow", "Action":[ "dynamodb:GetItem", "dynamodb:BatchGetItem", "dynamodb:Query", "dynamodb:PutItem", "dynamodb:UpdateItem", "dynamodb:DeleteItem", "dynamodb:BatchWriteItem" ], "Resource":[ "arn:aws:dynamodb:us-west-2:123456789012:table/GameScores" ], "Condition":{ "ForAllValues:StringEquals":{ "dynamodb:LeadingKeys":[ "${www.amazon.com:user_id}" ], "dynamodb:Attributes":[ "UserId", "GameTitle", "Wins", "Losses", "TopScore", "TopScoreDateTime" ] }, "StringEqualsIfExists":{ "dynamodb:Select":"SPECIFIC_ATTRIBUTES" } } } ] }
Selain memberikan izin untuk tindakan DynamoDB tertentu (elemen Action
) pada tabel GameScores
(elemen Resource
), elemen Condition
menggunakan kunci kondisi khusus untuk DynamoDB berikut yang membatasi izin sebagai berikut:
-
dynamodb:LeadingKeys
– Kunci ketentuan ini memungkinkan pengguna untuk mengakses hanya item yang nilai kunci partisinya cocok dengan ID pengguna mereka. ID ini,${www.amazon.com:user_id}
, adalah variabel substitusi. Untuk informasi selengkapnya tentang variabel substitusi, lihat Menggunakan federasi identitas web. -
dynamodb:Attributes
– Kunci ketentuan ini membatasi akses ke atribut tertentu sehingga hanya tindakan yang tercantum dalam kebijakan izin yang dapat mengembalikan nilai untuk atribut ini. Selain itu, klausulStringEqualsIfExists
memastikan bahwa aplikasi harus selalu menyediakan daftar atribut tertentu untuk ditindaklanjuti dan aplikasi tidak dapat meminta semua atribut.
Ketika IAM kebijakan dievaluasi, hasilnya selalu benar (akses diizinkan) atau salah (akses ditolak). Jika ada bagian dari elemen Condition
yang false, seluruh kebijakan mengevaluasi ke false dan akses ditolak.
penting
Jika Anda menggunakan dynamodb:Attributes
, Anda harus menentukan nama semua atribut kunci primer dan kunci indeks untuk tabel dan indeks sekunder apa pun yang tercantum dalam kebijakan. Jika tidak, DynamoDB tidak dapat menggunakan atribut kunci ini untuk melakukan tindakan yang diminta.
IAMdokumen kebijakan hanya dapat berisi karakter Unicode berikut: tab horizontal (U+0009), linefeed (U+000A), carriage return (U+000D), dan karakter dalam rentang U+0020 hingga U+00FF.
Menentukan ketentuan: Menggunakan kunci syarat
AWS menyediakan satu set kunci kondisi yang telah ditentukan (AWS-wide condition keys) untuk semua AWS layanan yang mendukung kontrol IAM akses. Misalnya, Anda dapat menggunakan kunci kondisi aws:SourceIp
untuk memeriksa alamat IP pemohon sebelum mengizinkan tindakan yang akan dilakukan. Untuk informasi selengkapnya dan daftar tombol AWS-wide, lihat Kunci yang Tersedia untuk Ketentuan di Panduan IAM Pengguna.
Tabel berikut menunjukkan kunci kondisi layanan khusus DynamoDB yang berlaku untuk DynamoDB.
Kunci Kondisi DynamoDB | Deskripsi |
---|---|
dynamodb:LeadingKeys |
Mewakili atribut kunci pertama dari tabel—dengan kata lain, kunci partisi. Nama kunci |
dynamodb:Select |
Mewakili parameter
|
dynamodb:Attributes |
Merupakan daftar nama atribut dalam permintaan, atau atribut yang dikembalikan dari permintaan.
|
dynamodb:ReturnValues |
Mewakili parameter
|
dynamodb:ReturnConsumedCapacity |
Mewakili parameter
|
Membatasi akses pengguna
Banyak kebijakan IAM izin memungkinkan pengguna untuk mengakses hanya item tersebut dalam tabel di mana nilai kunci partisi cocok dengan pengenal pengguna. Misalnya, aplikasi game sebelumnya membatasi akses dengan cara ini sehingga pengguna hanya dapat mengakses data game yang dikaitkan dengan ID pengguna mereka. Variabel IAM substitusi${www.amazon.com:user_id}
,${graph.facebook.com:id}
, dan ${accounts.google.com:sub}
berisi pengenal pengguna untuk Login with Amazon, Facebook, dan Google. Untuk mempelajari cara aplikasi masuk ke salah satu penyedia identitas ini dan memperoleh pengidentifikasi ini, lihat Menggunakan federasi identitas web.
catatan
Masing-masing contoh pada bagian berikut menetapkan klausul Effect
untuk Allow
dan menentukan hanya tindakan, sumber daya, dan parameter yang diizinkan. Akses hanya diizinkan untuk apa yang secara eksplisit tercantum dalam kebijakan. IAM
Dalam beberapa kasus, dimungkinkan untuk menulis ulang kebijakan ini sehingga kebijakan berbasis penolakan (yaitu, pengaturan klausul Effect
untuk Deny
dan membalikkan semua logika dalam kebijakan). Namun, sebaiknya Anda menghindari penggunaan kebijakan berbasis penolakan dengan DynamoDB karena kebijakan sulit untuk ditulis dengan benar, dibandingkan dengan kebijakan berbasis izin. Selain itu, perubahan masa depan pada API DynamoDB (atau perubahan pada input API yang ada) dapat membuat kebijakan berbasis penolakan tidak efektif.
Kebijakan Contoh: Menggunakan ketentuan untuk kontrol parameter terperinci
Bagian ini menunjukkan beberapa kebijakan untuk mengimplementasikan kontrol akses terperinci pada tabel dan indeks DynamoDB.
catatan
Semua contoh menggunakan Wilayah us-west-2 dan berisi akun fiktif. IDs
Video di bawah ini menjelaskan kontrol akses berbutir halus di DynamoDB menggunakan kondisi kebijakan. IAM
1: Memberikan izin yang membatasi akses ke item dengan nilai kunci partisi tertentu
Kebijakan izin berikut memberikan izin yang memungkinkan seperangkat tindakan DynamoDB pada tabel GamesScore
. Kebijakan tersebut menggunakan kunci ketentuan dynamodb:LeadingKeys
untuk membatasi tindakan pengguna hanya pada item yang nilai kunci partisi UserID
-nya cocok dengan ID pengguna unik Login with Amazon untuk aplikasi ini.
penting
Daftar tindakan tidak termasuk izin untuk Scan
karena Scan
mengembalikan semua item apa pun kunci awalnya.
{ "Version":"2012-10-17", "Statement":[ { "Sid":"FullAccessToUserItems", "Effect":"Allow", "Action":[ "dynamodb:GetItem", "dynamodb:BatchGetItem", "dynamodb:Query", "dynamodb:PutItem", "dynamodb:UpdateItem", "dynamodb:DeleteItem", "dynamodb:BatchWriteItem" ], "Resource":[ "arn:aws:dynamodb:us-west-2:123456789012:table/GameScores" ], "Condition":{ "ForAllValues:StringEquals":{ "dynamodb:LeadingKeys":[ "${www.amazon.com:user_id}" ] } } } ] }
catatan
Saat menggunakan variabel kebijakan, Anda harus secara jelas menyebutkan versi 2012-10-17
dalam kebijakan tersebut. Versi default bahasa kebijakan akses, 2008-10-17
, tidak mendukung variabel kebijakan.
Untuk menerapkan akses hanya baca, Anda dapat menghapus tindakan apa pun yang dapat mengubah data. Dalam kebijakan berikut, hanya tindakan yang menyediakan akses baca saja yang disertakan dalam ketentuan.
{ "Version":"2012-10-17", "Statement":[ { "Sid":"ReadOnlyAccessToUserItems", "Effect":"Allow", "Action":[ "dynamodb:GetItem", "dynamodb:BatchGetItem", "dynamodb:Query" ], "Resource":[ "arn:aws:dynamodb:us-west-2:123456789012:table/GameScores" ], "Condition":{ "ForAllValues:StringEquals":{ "dynamodb:LeadingKeys":[ "${www.amazon.com:user_id}" ] } } } ] }
penting
Jika Anda menggunakan dynamodb:Attributes
, Anda harus menentukan nama semua atribut kunci primer dan kunci indeks, untuk tabel dan indeks sekunder apa pun yang tercantum dalam kebijakan. Jika tidak, DynamoDB tidak dapat menggunakan atribut kunci ini untuk melakukan tindakan yang diminta.
2: Memberikan izin yang membatasi akses ke atribut tertentu dalam tabel
Kebijakan izin berikut mengizinkan akses ke hanya dua atribut tertentu dalam tabel dengan menambahkan kunci ketentuan dynamodb:Attributes
. Atribut ini dapat dibaca, ditulis, atau dievaluasi dalam penulisan bersyarat atau filter pemindaian.
{ "Version":"2012-10-17", "Statement":[ { "Sid":"LimitAccessToSpecificAttributes", "Effect":"Allow", "Action":[ "dynamodb:UpdateItem", "dynamodb:GetItem", "dynamodb:Query", "dynamodb:BatchGetItem", "dynamodb:Scan" ], "Resource":[ "arn:aws:dynamodb:us-west-2:123456789012:table/GameScores" ], "Condition":{ "ForAllValues:StringEquals":{ "dynamodb:Attributes":[ "UserId", "TopScore" ] }, "StringEqualsIfExists":{ "dynamodb:Select":"SPECIFIC_ATTRIBUTES", "dynamodb:ReturnValues":[ "NONE", "UPDATED_OLD", "UPDATED_NEW" ] } } } ] }
catatan
Kebijakan ini mengambil pendekatan daftar izin, yang mengizinkan akses ke set atribut bernama. Anda dapat menulis kebijakan serupa yang menolak akses ke atribut lain. Kami tidak merekomendasikan pendekatan daftar penolakan ini. Pengguna dapat menentukan nama atribut yang ditolak ini dengan mengikuti prinsip hak akses paling rendah, seperti yang dijelaskan di Wikipedia di http://en.wikipedia.org/wiki/Principle_of_least_privilege
Kebijakan ini tidak mengizinkan PutItem
, DeleteItem
, atau BatchWriteItem
. Tindakan ini selalu menggantikan seluruh item sebelumnya, yang memungkinkan pengguna menghapus nilai sebelumnya untuk atribut yang tidak boleh mereka akses.
Klausa StringEqualsIfExists
dalam kebijakan izin memastikan hal berikut:
-
Jika pengguna menentukan parameter
Select
, nilainya harusSPECIFIC_ATTRIBUTES
. Persyaratan ini mencegah API tindakan mengembalikan atribut apa pun yang tidak diizinkan, seperti dari proyeksi indeks. -
Jika pengguna menentukan parameter
ReturnValues
, nilainya harusNONE
,UPDATED_OLD
, atauUPDATED_NEW
. Hal ini diperlukan karena tindakanUpdateItem
tersebut juga melakukan operasi baca implisit untuk memeriksa apakah suatu item ada sebelum menggantinya, dan agar nilai atribut sebelumnya dapat dikembalikan jika diminta. MembatasiReturnValues
dengan cara ini memastikan bahwa pengguna hanya dapat membaca atau menulis atribut yang diizinkan. -
Klausa
StringEqualsIfExists
memastikan bahwa hanya satu dari parameter ini —Select
atauReturnValues
— yang dapat digunakan per permintaan, dalam konteks tindakan yang diizinkan.
Berikut ini adalah beberapa variasi pada kebijakan ini:
-
Untuk hanya mengizinkan tindakan baca, Anda dapat menghapus
UpdateItem
dari daftar tindakan yang diizinkan. Karena tidak ada tindakan yang tersisa menerimaReturnValues
, Anda dapat menghapusReturnValues
dari kondisi. Anda juga dapat mengubahStringEqualsIfExists
menjadiStringEquals
karena parameterSelect
selalu memiliki nilai (ALL_ATTRIBUTES
, kecuali ditentukan lain). -
Untuk hanya mengizinkan tindakan tulis, Anda dapat menghapus semuanya kecuali
UpdateItem
dari daftar tindakan yang diizinkan. KarenaUpdateItem
tidak menggunakan parameterSelect
, Anda dapat menghapusSelect
dari kondisi. Anda juga harus mengubahStringEqualsIfExists
menjadiStringEquals
karena parameterReturnValues
selalu memiliki nilai (NONE
, kecuali ditentukan lain). -
Untuk mengizinkan semua atribut yang namanya cocok dengan pola, gunakan
StringLike
, bukanStringEquals
, dan gunakan pola multi-karakter yang cocok dengan karakter wildcard (*).
3: Memberikan izin untuk mencegah pembaruan pada atribut tertentu
Kebijakan izin berikut membatasi akses pengguna untuk memperbarui hanya atribut tertentu yang diidentifikasi oleh kunci kondisi dynamodb:Attributes
. Kondisi StringNotLike
mencegah aplikasi memperbarui atribut yang ditentukan menggunakan kunci kondisi dynamodb:Attributes
.
{ "Version":"2012-10-17", "Statement":[ { "Sid":"PreventUpdatesOnCertainAttributes", "Effect":"Allow", "Action":[ "dynamodb:UpdateItem" ], "Resource":"arn:aws:dynamodb:us-west-2:123456789012:table/GameScores", "Condition":{ "ForAllValues:StringNotLike":{ "dynamodb:Attributes":[ "FreeGamesAvailable", "BossLevelUnlocked" ] }, "StringEquals":{ "dynamodb:ReturnValues":[ "NONE", "UPDATED_OLD", "UPDATED_NEW" ] } } } ] }
Perhatikan hal-hal berikut:
-
Tindakan
UpdateItem
, seperti tindakan tulis lainnya, memerlukan akses baca ke item sehingga dapat mengembalikan nilai sebelum dan sesudah pembaruan. Dalam kebijakan tersebut, Anda membatasi tindakan untuk mengakses hanya atribut yang diizinkan yang akan diperbarui dengan menentukan kunci ketentuandynamodb:ReturnValues
. Kunci kondisi membatasiReturnValues
dalam permintaan untuk menentukan hanyaNONE
,UPDATED_OLD
, atauUPDATED_NEW
dan tidak mencakupALL_OLD
atauALL_NEW
. -
Tindakan
PutItem
danDeleteItem
mengganti seluruh item, dengan demikian memungkinkan aplikasi memodifikasi atribut apa pun. Jadi ketika membatasi aplikasi untuk memperbarui hanya atribut tertentu, Anda tidak boleh memberikan izin untuk iniAPIs.
4: Berikan izin untuk mengkueri hanya atribut yang diproyeksikan dalam indeks
Kebijakan izin berikut memungkinkan kueri pada indeks sekunder (TopScoreDateTimeIndex
) dengan menggunakan kunci ketentuan dynamodb:Attributes
. Kebijakan ini juga membatasi kueri untuk meminta atribut tertentu saja yang telah diproyeksikan ke dalam indeks.
Untuk mengharuskan aplikasi menentukan daftar atribut dalam kueri, kebijakan juga menentukan kunci ketentuan dynamodb:Select
untuk mengharuskan parameter Select
dari tindakan Query
DynamoDB adalah SPECIFIC_ATTRIBUTES
. Daftar atribut terbatas pada daftar tertentu yang disediakan menggunakan kunci ketentuan dynamodb:Attributes
.
{ "Version":"2012-10-17", "Statement":[ { "Sid":"QueryOnlyProjectedIndexAttributes", "Effect":"Allow", "Action":[ "dynamodb:Query" ], "Resource":[ "arn:aws:dynamodb:us-west-2:123456789012:table/GameScores/index/TopScoreDateTimeIndex" ], "Condition":{ "ForAllValues:StringEquals":{ "dynamodb:Attributes":[ "TopScoreDateTime", "GameTitle", "Wins", "Losses", "Attempts" ] }, "StringEquals":{ "dynamodb:Select":"SPECIFIC_ATTRIBUTES" } } } ] }
Kebijakan izin berikut ini serupa, tetapi kueri harus meminta semua atribut yang telah diproyeksikan ke dalam indeks.
{ "Version":"2012-10-17", "Statement":[ { "Sid":"QueryAllIndexAttributes", "Effect":"Allow", "Action":[ "dynamodb:Query" ], "Resource":[ "arn:aws:dynamodb:us-west-2:123456789012:table/GameScores/index/TopScoreDateTimeIndex" ], "Condition":{ "StringEquals":{ "dynamodb:Select":"ALL_PROJECTED_ATTRIBUTES" } } } ] }
5: Memberikan izin untuk membatasi akses ke atribut tertentu dan nilai-nilai kunci partisi
Kebijakan izin berikut memungkinkan tindakan DynamoDB tertentu (ditentukan dalam elemen Action
) pada tabel dan indeks tabel (ditentukan dalam elemen Resource
). Kebijakan menggunakan kunci ketentuan dynamodb:LeadingKeys
untuk membatasi izin hanya untuk item yang nilai kunci partisinya cocok dengan ID Facebook pengguna.
{ "Version":"2012-10-17", "Statement":[ { "Sid":"LimitAccessToCertainAttributesAndKeyValues", "Effect":"Allow", "Action":[ "dynamodb:UpdateItem", "dynamodb:GetItem", "dynamodb:Query", "dynamodb:BatchGetItem" ], "Resource":[ "arn:aws:dynamodb:us-west-2:123456789012:table/GameScores", "arn:aws:dynamodb:us-west-2:123456789012:table/GameScores/index/TopScoreDateTimeIndex" ], "Condition":{ "ForAllValues:StringEquals":{ "dynamodb:LeadingKeys":[ "${graph.facebook.com:id}" ], "dynamodb:Attributes":[ "attribute-A", "attribute-B" ] }, "StringEqualsIfExists":{ "dynamodb:Select":"SPECIFIC_ATTRIBUTES", "dynamodb:ReturnValues":[ "NONE", "UPDATED_OLD", "UPDATED_NEW" ] } } } ] }
Perhatikan hal-hal berikut:
-
Tulis tindakan yang diizinkan oleh kebijakan (
UpdateItem
) hanya dapat memodifikasiattribute-A
atauattribute-B
. -
Karena kebijakan mengizinkan
UpdateItem
, aplikasi dapat menyisipkan item baru, dan atribut yang tersembunyi akan null dalam item baru. Jika atribut ini diproyeksikan ke dalamTopScoreDateTimeIndex
, kebijakan memiliki manfaat tambahan untuk mencegah kueri yang menyebabkan pengambilan dari tabel. -
Aplikasi tidak dapat membaca atribut apa pun selain yang tercantum dalam
dynamodb:Attributes
. Dengan adanya kebijakan ini, aplikasi harus menetapkan parameterSelect
keSPECIFIC_ATTRIBUTES
dalam permintaan baca, dan hanya atribut dalam daftar izin yang dapat diminta. Untuk permintaan tulis, aplikasi tidak dapat mengaturReturnValues
keALL_OLD
atauALL_NEW
dan tidak dapat melakukan operasi tulis bersyarat berdasarkan atribut lainnya.