Akses API aman dengan MFA - AWS Identity and Access Management

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

Akses API aman dengan MFA

Dengan kebijakan IAM, Anda dapat menentukan operasi API mana yang diizinkan untuk dipanggil oleh pengguna. Anda dapat menerapkan keamanan tambahan dengan mengharuskan pengguna untuk mengautentikasi dengan otentikasi multi-faktor (MFA) sebelum Anda mengizinkan mereka melakukan tindakan yang sangat sensitif.

Misalnya, Anda mungkin memiliki kebijakan yang memungkinkan pengguna menjalankan Amazon EC2 RunInstancesDescribeInstances, dan StopInstances tindakan. Tetapi Anda mungkin ingin membatasi tindakan destruktif seperti TerminateInstances dan memastikan bahwa pengguna dapat melakukan tindakan itu hanya jika mereka mengautentikasi dengan perangkat AWS MFA.

Gambaran Umum

Menambahkan perlindungan MFA ke operasi API melibatkan tugas-tugas ini:

  1. Administrator mengonfigurasi perangkat AWS MFA untuk setiap pengguna yang harus membuat permintaan API yang memerlukan otentikasi MFA. Untuk informasi selengkapnya, lihat AWS Otentikasi multi-faktor di IAM.

  2. Administrator membuat kebijakan untuk pengguna yang menyertakan Condition elemen yang memeriksa apakah pengguna diautentikasi dengan perangkat AWS MFA.

  3. Pengguna memanggil salah satu operasi AWS STS API yang mendukung parameter MFA: AssumeRoleatau. GetSessionToken Sebagai bagian dari panggilan, pengguna mencakup pengidentifikasi perangkat untuk perangkat yang terhubung dengan pengguna. Pengguna juga menyertakan kata sandi satu kali berbasis waktu (TOTP) yang dihasilkan perangkat. Dalam kasus lain, pengguna mendapatkan kembali kredensial keamanan sementara yang dapat digunakan pengguna untuk membuat permintaan tambahan ke AWS.

    catatan

    Perlindungan MFA untuk operasi API layanan hanya tersedia jika layanan mendukung kredensial keamanan sementara. Untuk daftar layanan ini, lihat Menggunakan Kredensial IT Sementara untuk Mengakses AWS.

Jika otorisasi gagal, AWS mengembalikan pesan kesalahan akses ditolak (seperti halnya untuk akses yang tidak sah). Dengan adanya kebijakan API yang dilindungi MFA, AWS menolak akses ke operasi API yang ditentukan dalam kebijakan jika pengguna mencoba memanggil operasi API tanpa autentikasi MFA yang valid. Operasi juga ditolak jika stempel waktu permintaan untuk operasi API berada di luar rentang yang diizinkan yang ditentukan dalam kebijakan. Pengguna harus diautentikasi ulang menggunakan MFA dengan meminta kredensial keamanan sementara yang baru, dengan kode MFA dan nomor seri perangkat.

Kebijakan IAM dengan ketentuan MFA

Kebijakan dengan ketentuan MFA dapat dilampirkan ke hal berikut:

  • Pengguna atau grup IAM

  • Sumber daya seperti bucket Amazon S3, antrean Amazon Amazon SQS, atau topik Amazon SNS

  • Kebijakan kepercayaan dari peran IAM yang dapat diasumsikan oleh pengguna

Anda dapat menggunakan ketentuan MFA dalam kebijakan untuk memeriksa properti berikut:

  • Ekstensi—Untuk memudahkan verifikasi bahwa pengguna melakukan verifikasi dengan MFA, periksa apakah kunci aws:MultiFactorAuthPresent adalah True dalam ketentuan Bool. Kunci tersebut hanya muncul ketika pengguna mengautentikasi dengan kredensial jangka pendek. Kredensial jangka panjang, seperti access key, tidak mencakup kunci ini.

  • Durasi—Jika Anda ingin memberikan akses hanya untuk waktu yang ditentukan setelah otentikasi MFA, gunakan jenis numerik untuk membandingkan usia kunci aws:MultiFactorAuthAge i ke nilai (seperti 3600 detik). Perhatikan bahwa kunci aws:MultiFactorAuthAge tidak ada jika MFA tidak digunakan.

Contoh berikut menunjukkan kebijakan kepercayaan peran IAM yang menyertakan ketentuan MFA untuk menguji keberadaan autentikasi MFA. Dengan kebijakan ini, pengguna dari Principal elemen yang Akun AWS ditentukan (ganti ACCOUNT-B-ID dengan Akun AWS ID yang valid) dapat mengambil peran yang dilampirkan kebijakan ini. Namun, pengguna tersebut hanya dapat mengasumsikan peran jika pengguna diautentikasi menggunakan MFA.

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Principal": {"AWS": "ACCOUNT-B-ID"}, "Action": "sts:AssumeRole", "Condition": {"Bool": {"aws:MultiFactorAuthPresent": "true"}} } }

Untuk informasi lebih lanjut tentang jenis ketentuan untuk MFA, lihat AWS kunci konteks kondisi global, Operator ketentuan numerik, dan Operator ketentuan memeriksa keberadaan kunci kondisi .

Memilih antara GetSessionToken dan AssumeRole

AWS STS menyediakan dua operasi API yang memungkinkan pengguna meneruskan informasi MFA: GetSessionToken dan. AssumeRole Operasi API yang dipanggil pengguna untuk mendapatkan kredensial keamanan sementara bergantung pada skenario mana yang berlaku.

Gunakan GetSessionToken untuk skenario berikut:

  • Panggil operasi API yang mengakses sumber daya Akun AWS sama dengan pengguna IAM yang membuat permintaan. Perhatikan bahwa kredensial sementara dari GetSessionToken permintaan dapat mengakses operasi IAM dan AWS STS API hanya jika Anda menyertakan informasi MFA dalam permintaan kredensional. Karena kredensial sementara dikembalikan oleh GetSessionToken meliputi informasi MFA, Anda dapat memeriksa MFA dalam operasi API individu yang dilakukan oleh kredensial.

  • Akses ke sumber daya yang dilindungi dengan kebijakan berbasis sumber daya yang mencakup ketentuan MFA.

Tujuan dari operasi GetSessionToken adalah mengautentikasi pengguna menggunakan MFA. Anda tidak dapat menggunakan kebijakan untuk mengontrol operasi autentikasi.

Gunakan AssumeRole untuk skenario berikut:

  • Panggil operasi API yang mengakses sumber daya dalam hal yang sama atau berbeda Akun AWS. Panggilan API dapat menyertakan IAM atau AWS STS API apa pun. Perhatikan bahwa untuk melindungi akses Anda, Anda memberlakukan MFA pada saat pengguna menjalankan peran tersebut. Kredensial sementara dikembalikan oleh AssumeRole tidak menyertakan informasi MFA dalam konteks, jadi Anda tidak dapat memeriksa operasi API individu untuk MFA. Inilah mengapa Anda harus menggunakan GetSessionToken untuk membatasi akses ke sumber daya yang dilindungi oleh kebijakan berbasis sumber daya.

catatan

AWS CloudTrail log akan berisi informasi MFA ketika pengguna IAM masuk dengan MFA. Jika pengguna IAM mengasumsikan peran IAM, juga CloudTrail akan mfaAuthenticated: true masuk sessionContext atribut untuk tindakan yang dilakukan menggunakan peran yang diasumsikan. Namun, CloudTrail logging terpisah dari yang dibutuhkan IAM saat panggilan API dilakukan dengan kredenal peran yang diasumsikan. Untuk informasi selengkapnya, lihat Elemen CloudTrailUserIdentity.

Perincian tentang cara menerapkan skenario ini akan dijelaskan nanti dalam dokumen ini.

Poin penting tentang akses API yang dilindungi MFA

Penting untuk memahami aspek perlindungan MFA berikut untuk operasi API:

  • Perlindungan MFA hanya tersedia dalam bentuk kredensial keamanan sementara, yang harus diperoleh dengan AssumeRole atau GetSessionToken.

  • Anda tidak dapat menggunakan akses API yang dilindungi MFA dengan kredensional. Pengguna root akun AWS

  • Anda tidak dapat menggunakan akses API yang dilindungi MFA dengan kunci keamanan U2F.

  • Pengguna federasi tidak dapat diberikan perangkat MFA untuk digunakan AWS dengan layanan, sehingga mereka tidak dapat AWS mengakses sumber daya yang dikendalikan oleh MFA. (Lihat poin berikutnya.)

  • Operasi AWS STS API lain yang mengembalikan kredensi sementara tidak mendukung MFA. Untuk AssumeRoleWithWebIdentity danAssumeRoleWithSAML, pengguna diautentikasi oleh penyedia eksternal dan AWS tidak dapat menentukan apakah penyedia tersebut memerlukan MFA. Untuk GetFederationToken, MFA tidak selalu berkaitan dengan pengguna tertentu.

  • Demikian pula, kredensial jangka panjang (kunci akses pengguna IAM dan kunci akses pengguna akar) tidak dapat digunakan dengan akses API yang dilindungi MFA karena tidak kedaluwarsa.

  • AssumeRole dan GetSessionToken juga dapat dipanggil tanpa informasi MFA. Dalam hal ini, penelepon mendapatkan kembali kredensial keamanan sementara, tetapi informasi sesi untuk kredensial sementara tersebut tidak menunjukkan bahwa pengguna mengautentikasi dengan MFA.

  • Untuk menetapkan perlindungan MFA untuk operasi API, Anda menambahkan ketentuan MFA ke kebijakan. Kebijakan harus mencantumkan kunci keamanan aws:MultiFactorAuthPresent untuk menerapkan penggunaan MFA. Untuk pendelegasian lintas akun, kebijakan kepercayaan peran tersebut harus mencakup kunci ketentuan.

  • Ketika Anda Akun AWS mengizinkan orang lain mengakses sumber daya di akun Anda, keamanan sumber daya Anda tergantung pada konfigurasi akun tepercaya (akun lain, bukan milik Anda). Hal ini tetap berlaku meskipun Anda memerlukan autentikasi multi-faktor. Setiap identitas dalam akun tepercaya yang memiliki izin untuk membuat perangkat MFA virtual dapat membuat klaim MFA untuk memenuhi bagian dari kebijakan kepercayaan peran Anda. Sebelum Anda mengizinkan anggota akun lain mengakses AWS sumber daya Anda yang memerlukan otentikasi multi-faktor, Anda harus memastikan bahwa pemilik akun tepercaya mengikuti praktik terbaik keamanan. Misalnya, akun tepercaya harus membatasi akses ke operasi API sensitif, seperti operasi API manajemen perangkat MFA, secara spesifik, identitas terpercaya.

  • Jika kebijakan mencakup ketentuan MFA, permintaan ditolak jika pengguna belum menjadi MFA yang diautentikasi, atau jika mereka memberikan pengidentifikasi perangkat MFA yang tidak valid atau TOTP yang tidak valid.

Skenario: Perlindungan MFA untuk pendelegasian lintas-akun

Dalam skenario ini, Anda ingin mendelegasikan akses ke pengguna IAM di akun lain, tetapi hanya jika pengguna diautentikasi dengan perangkat AWS MFA. Untuk informasi selengkapnya tentang delegasi lintas akun, lihat. Istilah dan konsep peran

Bayangkan Anda memiliki akun A (akun kepercayaan yang memiliki sumber daya yang akan diakses), dengan pengguna IAM Anaya, yang memiliki izin administrator. Dia ingin memberikan akses ke pengguna Richard di akun B (akun tepercaya), tetapi ingin memastikan bahwa Richard terotentikasi dengan MFA sebelum dia mengambil peran tersebut.

  1. Di akun kepercayaan A, Anaya membuat peran IAM bernama CrossAccountRole dan menetapkan prinsipal dalam kebijakan kepercayaan peran ke ID akun B. Kebijakan kepercayaan memberikan izin untuk tindakan tersebut. AWS STS AssumeRole Anaya juga menambahkan ketentuan MFA ke kebijakan kepercayaan, seperti dalam contoh berikut.

    { "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Principal": {"AWS": "ACCOUNT-B-ID"}, "Action": "sts:AssumeRole", "Condition": {"Bool": {"aws:MultiFactorAuthPresent": "true"}} } }
  2. Anaya menambahkan kebijakan izin untuk peran yang menentukan apa yang dapat dilakukan peran tersebut. Kebijakan izin untuk peran dengan perlindungan MFA tidak berbeda dengan kebijakan izin peran lainnya. Contoh berikut menunjukkan kebijakan yang ditambahkan Anaya ke peran; ini memungkinkan pengguna yang berasumsi untuk melakukan tindakan Amazon DynamoDB apa pun pada Books tabel di akun A. Kebijakan ini juga mengizinkan dynamodb:ListTables tindakan, yang diperlukan untuk melakukan tindakan di konsol.

    catatan

    Kebijakan izin tidak mencakup ketentuan MFA. Penting untuk memahami bahwa autentikasi MFA hanya digunakan untuk menentukan apakah pengguna dapat menjalankan peran tersebut. Setelah pengguna mengambil peran tersebut, tidak ada lagi pemeriksaan MFA yang dilakukan.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "TableActions", "Effect": "Allow", "Action": "dynamodb:*", "Resource": "arn:aws:dynamodb:*:ACCOUNT-A-ID:table/Books" }, { "Sid": "ListTables", "Effect": "Allow", "Action": "dynamodb:ListTables", "Resource": "*" } ] }
  3. Di akun B tepercaya, administrator memastikan bahwa pengguna IAM Richard dikonfigurasi dengan perangkat AWS MFA dan bahwa ia mengetahui ID perangkat. ID perangkat adalah nomor seri jika MFA perangkat keras, atau ARN perangkat jika itu adalah perangkat MFA virtual.

  4. Di akun B, administrator melampirkan kebijakan berikut kepada pengguna Richard (atau grup yang ia anggota) yang memungkinkannya untuk menghubungi tindakan AssumeRole. Sumber daya diatur ke ARN dari peran yang dibuat Anaya pada langkah 1. Perhatikan bahwa kebijakan ini tidak mengandung ketentuan MFA.

    { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": ["sts:AssumeRole"], "Resource": ["arn:aws:iam::ACCOUNT-A-ID:role/CrossAccountRole"] }] }
  5. Di akun B, Richard (atau aplikasi yang dijalankan Richard) akan memanggil AssumeRole. Panggilan API mencakup ARN peran yang akan diasumsikan (arn:aws:iam::ACCOUNT-A-ID:role/CrossAccountRole), ID perangkat MFA, dan TOTP saat ini yang Richard dapatkan dari perangkatnya.

    Ketika Richard meneleponAssumeRole, AWS menentukan apakah ia memiliki kredensi yang valid, termasuk persyaratan untuk MFA. Jika demikian, Richard berhasil mengasumsikan peran tersebut dan dapat melakukan tindakan DynamoDB apa pun pada tabel yang Books disebutkan di akun A saat menggunakan kredenal sementara peran tersebut.

    Sebagai contoh program yang memanggil AssumeRole, lihat Memanggil AssumeRole dengan otentikasi MFA.

Skenario: Perlindungan MFA untuk akses ke operasi API di akun saat ini

Dalam skenario ini, Anda harus memastikan bahwa pengguna di Anda Akun AWS dapat mengakses operasi API sensitif hanya ketika pengguna diautentikasi menggunakan perangkat AWS MFA.

Bayangkan Anda memiliki akun A yang berisi sekelompok pengembang yang perlu bekerja dengan EC2 instance. Developer biasa dapat bekerja dengan instans, tetapi mereka tidak diberikan izin tindakan ec2:StopInstances atau ec2:TerminateInstances. Anda ingin membatasi tindakan istimewa “destruktif” itu hanya untuk beberapa pengguna tepercaya, sehingga Anda menambahkan perlindungan MFA ke kebijakan yang memungkinkan tindakan Amazon yang sensitif ini. EC2

Dalam skenario ini, salah satu pengguna tepercaya tersebut adalah pengguna Sofía. Pengguna Anaya adalah administrator di akun A.

  1. Anaya memastikan bahwa Sofía dikonfigurasi dengan perangkat AWS MFA dan Sofía mengetahui ID perangkat tersebut. ID perangkat adalah nomor seri jika MFA perangkat keras, atau ARN perangkat jika itu adalah perangkat MFA virtual.

  2. Anaya membuat kelompok bernama EC2-Admins dan menambahkan Sofía ke grup.

  3. Anaya melampirkan kebijakan berikut ke kelompok EC2-Admins. Kebijakan ini memberi pengguna izin untuk memanggil Amazon EC2 StopInstances dan TerminateInstances tindakan hanya jika pengguna telah mengautentikasi menggunakan MFA.

    { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "ec2:StopInstances", "ec2:TerminateInstances" ], "Resource": ["*"], "Condition": {"Bool": {"aws:MultiFactorAuthPresent": "true"}} }] }
  4. catatan

    Agar kebijakan ini berlaku, pengguna harus keluar terlebih dahulu dan masuk kembali.

    Jika pengguna Sofía perlu menghentikan atau menghentikan EC2 instance Amazon, dia (atau aplikasi yang sedang dia jalankan) memanggil. GetSessionToken Operasi API ini meneruskan ID perangkat MFA dan TOTP saat ini yang diperoleh Sofía dari perangkatnya.

  5. Pengguna Sofía (atau aplikasi yang digunakan Sofía) menggunakan kredenal sementara yang disediakan oleh untuk GetSessionToken memanggil Amazon atau tindakan. EC2 StopInstances TerminateInstances

    Sebagai contoh program yang memanggil GetSessionToken, lihat Memanggil GetSessionToken dengan otentikasi MFA nanti di dokumen ini.

Skenario: Perlindungan MFA untuk sumber daya yang memiliki kebijakan berbasis sumber daya

Dalam skenario ini, Anda adalah pemilik bucket S3, antrean SQS, atau topik SNS. Anda ingin memastikan bahwa setiap pengguna dari Akun AWS siapa pun yang mengakses sumber daya diautentikasi oleh perangkat MFA AWS .

Skenario ini mengilustrasikan cara untuk menyediakan jangkauan perlindungan MFA lintas akun yang mengharuskan pengguna untuk menjalankan peran terlebih dahulu. Dalam hal ini, pengguna dapat mengakses sumber daya jika tiga kondisi terpenuhi: Pengguna harus diautentikasi oleh MFA, dapat memperoleh kredensial keamanan sementara dari GetSessionToken, dan berada di akun yang dipercaya oleh kebijakan sumber daya.

Bayangkan Anda berada di akun A dan Anda membuat bucket S3. Anda ingin memberikan akses ke bucket ini kepada pengguna yang berbeda Akun AWS, tetapi hanya jika pengguna tersebut diautentikasi dengan MFA.

Dalam skenario ini, pengguna Anaya adalah administrator di akun A. Pengguna Nikhil adalah pengguna IAM di akun C.

  1. Pada akun A, Anaya membuat bucket dengan nama Account-A-bucket.

  2. Anaya menambahkan kebijakan bucket ke bucket. Kebijakan ini memungkinkan pengguna di akun A, akun B, atau akun C untuk melakukan tindakan Amazon S3 PutObject dan DeleteObject di dalam bucket. Kebijakan ini mencakup ketentuan MFA.

    { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": {"AWS": [ "ACCOUNT-A-ID", "ACCOUNT-B-ID", "ACCOUNT-C-ID" ]}, "Action": [ "s3:PutObject", "s3:DeleteObject" ], "Resource": ["arn:aws:s3:::ACCOUNT-A-BUCKET-NAME/*"], "Condition": {"Bool": {"aws:MultiFactorAuthPresent": "true"}} }] }
    catatan

    Amazon S3 menawarkan fitur Hapus MFA untuk (hanya) akses akun akar. Anda dapat mengaktifkan Hapus MFA Amazon S3 saat Anda mengatur status versi bucket. Hapus MFA Amazon S3 tidak dapat diterapkan ke pengguna IAM, dan dikelola secara terpisah dari akses API yang dilindungi MFA. Seorang pengguna IAM dengan izin untuk menghapus bucket tidak dapat menghapus bucket dengan Hapus MFA Amazon S3 yang diaktifkan. Untuk informasi selengkapnya tentang Amazon S3 MFA Delete, lihat MFA Hapus.

  3. Di akun C, administrator memastikan bahwa pengguna Nikhil dikonfigurasi dengan perangkat MFA AWS dan bahwa dia mengetahui ID perangkat. ID perangkat adalah nomor seri jika MFA perangkat keras, atau ARN perangkat jika itu adalah perangkat MFA virtual.

  4. Dalam akun C, Nikhil (atau aplikasi yang dia jalankan) akan memanggil GetSessionToken. Panggilan mencakup ID atau ARN perangkat MFA dan TOTP saat ini yang diperoleh Nikhil dari perangkatnya.

  5. Nikhil (atau aplikasi yang dia gunakan) menggunakan kredensial sementara yang dikembalikan oleh GetSessionToken untuk menghubungi tindakan Amazon S3 PutObject untuk mengunggah file ke Account-A-bucket.

    Sebagai contoh program yang memanggil GetSessionToken, lihat Memanggil GetSessionToken dengan otentikasi MFA nanti di dokumen ini.

    catatan

    Kredensial sementara yang dikembalikan AssumeRole tidak akan bekerja dalam kasus ini. Meskipun pengguna dapat memberikan informasi MFA untuk mengambil peran, kredensial sementara dikembalikan oleh AssumeRole tidak menyertakan informasi MFA. Informasi tersebut diperlukan untuk memenuhi ketentuan MFA dalam kebijakan.