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 RunInstances
DescribeInstances
, 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.
Topik
Gambaran Umum
Menambahkan perlindungan MFA ke operasi API melibatkan tugas-tugas ini:
-
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.
-
Administrator membuat kebijakan untuk pengguna yang menyertakan
Condition
elemen yang memeriksa apakah pengguna diautentikasi dengan perangkat AWS MFA. -
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
adalahTrue
dalam ketentuanBool
. 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 kunciaws: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 olehGetSessionToken
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 menggunakanGetSessionToken
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
atauGetSessionToken
. -
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. UntukGetFederationToken
, 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
danGetSessionToken
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.
-
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 STSAssumeRole
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"}} } } -
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 mengizinkandynamodb: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": "*" } ] } -
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.
-
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"] }] } -
Di akun B, Richard (atau aplikasi yang dijalankan Richard) akan memanggil
AssumeRole
. Panggilan API mencakup ARN peran yang akan diasumsikan (arn:aws:iam::
), ID perangkat MFA, dan TOTP saat ini yang Richard dapatkan dari perangkatnya.ACCOUNT-A-ID
:role/CrossAccountRoleKetika Richard menelepon
AssumeRole
, 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 yangBooks
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.
-
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.
-
Anaya membuat kelompok bernama
EC2-Admins
dan menambahkan Sofía ke grup. -
Anaya melampirkan kebijakan berikut ke kelompok
EC2-Admins
. Kebijakan ini memberi pengguna izin untuk memanggil Amazon EC2StopInstances
danTerminateInstances
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"}} }] }
-
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. -
Pengguna Sofía (atau aplikasi yang digunakan Sofía) menggunakan kredenal sementara yang disediakan oleh untuk
GetSessionToken
memanggil Amazon atau tindakan. EC2StopInstances
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.
-
Pada akun A, Anaya membuat bucket dengan nama
Account-A-bucket
. -
Anaya menambahkan kebijakan bucket ke bucket. Kebijakan ini memungkinkan pengguna di akun A, akun B, atau akun C untuk melakukan tindakan Amazon S3
PutObject
danDeleteObject
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.
-
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.
-
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. -
Nikhil (atau aplikasi yang dia gunakan) menggunakan kredensial sementara yang dikembalikan oleh
GetSessionToken
untuk menghubungi tindakan Amazon S3PutObject
untuk mengunggah file keAccount-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 olehAssumeRole
tidak menyertakan informasi MFA. Informasi tersebut diperlukan untuk memenuhi ketentuan MFA dalam kebijakan.