Evaluasi kebijakan IAM dan explicit deny

Menggunakan Keamanan AWS untuk Developer

Rahul Singh

Technical Product Manager

Sebuah policy adalah daftar aturan

{
  "Effect": "Allow",
  "Action": "s3:GetObject",
  "Resource": "arn:aws:s3:::reports/*",
  "Condition": {
    "Bool": {
      "aws:SecureTransport": "true"
    },
    "IpAddress": {
      "aws:SourceIp": "203.0.113.0/24"
    }
  }
}

Tiga field dari satu pernyataan IAM disusun vertikal dan bernomor satu hingga tiga: Effect adalah allow atau deny, Action adalah panggilan API mana, dan Resource adalah target yang dituju, dinamai dengan ARN.

Menggunakan Keamanan AWS untuk Developer

Sebuah policy adalah daftar aturan

{
  "Effect": "Allow",
  "Action": "s3:GetObject",
  "Resource": "arn:aws:s3:::reports/*",
  "Condition": {
    "Bool": {
      "aws:SecureTransport": "true"
    },
    "IpAddress": {
      "aws:SourceIp": "203.0.113.0/24"
    }
  }
}

Empat field dari satu pernyataan IAM disusun vertikal dan bernomor satu hingga empat: Effect adalah allow atau deny, Action adalah panggilan API mana, Resource adalah target yang dituju dan dinamai oleh ARN, dan Condition adalah keadaan yang harus terpenuhi. Baris penutup berbunyi empat field, satu aturan.

Menggunakan Keamanan AWS untuk Developer

Tiga field bertanya, satu field menjawab

Pertanyaannya

  • Action: apakah ini panggilannya
  • Resource: apakah ini sasarannya
  • Condition: apakah kondisinya cocok

Jawabannya

  • Effect: allow atau deny

Empat field pernyataan IAM ditumpuk vertikal: Action, Resource, dan Condition dikelompokkan oleh satu kurung bertanda "The question", dan Effect dikelompokkan oleh kurung kedua bertanda "The answer".

Menggunakan Keamanan AWS untuk Developer

Aturan berasal dari lebih dari satu tempat

Sebuah dokumen policy terpasang pada sebuah role, dengan panah dari role menuju sebuah bucket.

Berbasis identitas

  • Dipasang pada role
  • Apa yang bisa dilakukan role ini
Menggunakan Keamanan AWS untuk Developer

Aturan berasal dari lebih dari satu tempat

Sebuah dokumen policy terpasang pada sebuah role, dengan panah dari role menuju sebuah bucket.

Sebuah dokumen policy terpasang pada sebuah resource, dengan panah dari principal menuju sebuah bucket.

Berbasis identitas

  • Dipasang pada role
  • Apa yang bisa dilakukan role ini

Berbasis resource

  • Dipasang pada objek yang diakses
  • Siapa yang bisa mengakses bucket ini
Menggunakan Keamanan AWS untuk Developer

Saat aturan bertentangan

{"Effect": "Allow", "Action": "s3:*", "Resource": "*"}
{"Effect": "Deny",  "Action": "s3:DeleteObject", "Resource": "*"}
Menggunakan Keamanan AWS untuk Developer

Saat aturan bertentangan

{"Effect": "Allow", "Action": "s3:*", "Resource": "*"}
{"Effect": "Deny",  "Action": "s3:DeleteObject", "Resource": "*"}

Permintaan: s3:DeleteObject berakhir: Ditolak.

Explicit deny mengalahkan allow apa pun, seumum apa pun

Satu pernyataan allow dan satu pernyataan deny keduanya mengarah ke satu permintaan, dengan jalur deny digambar tebal dan hasil ditandai ditolak.

Menggunakan Keamanan AWS untuk Developer

Urutan evaluasi, dan implicit deny

Bagan alir evaluasi kebijakan IAM: sebuah permintaan API memeriksa explicit deny yang berlaku, lalu allow yang berlaku, dan berakhir pada implicit deny bila tidak ditemukan keduanya.

  • Explicit deny: ada yang berkata tidak
  • Allow: ada yang berkata ya, dan tidak ada yang berkata tidak
  • Implicit deny: tidak ada yang berkata apa pun
Menggunakan Keamanan AWS untuk Developer

Empat permintaan, tiga hasil

{"Effect": "Allow", "Action": "s3:*",
 "Resource": "*"}

{"Effect": "Deny", "Action": "s3:DeleteObject",
 "Resource": "*"}
  • s3:GetObject → allow: allow yang luas mencakupnya
  • s3:DeleteObject → explicit deny: ada pernyataan yang menolak
  • kms:Decrypt, dynamodb:GetItem → implicit deny: policy ini tidak pernah menyebut layanan tersebut
  • KMS menyimpan kunci enkripsi; DynamoDB adalah database key-value terkelola
Menggunakan Keamanan AWS untuk Developer

Mengapa menambah izin sering gagal

Kesalahan sama, dua penyebab

Explicit deny

  • Allow lain tidak mengubah apa pun
  • Temukan deny, lalu persempit atau hapus

Implicit deny

  • Satu allow yang sempit
  • Pada identitas yang melakukan panggilan

Kesalahan AccessDenied bercabang menjadi dua penyebab. Di kiri, ditemukan deny, sehingga allow tambahan tidak mengubah apa pun. Di kanan, tidak ditemukan allow, sehingga satu allow yang sempit pada identitas pemanggil menyelesaikannya.

Menggunakan Keamanan AWS untuk Developer

Ayo berlatih!

Menggunakan Keamanan AWS untuk Developer

Preparing Video For Download...