Token keamanan yang disertakan dalam permintaan tidak valid
TL;DR — Kredensial AWS Anda salah, kedaluwarsa, atau SDK membaca kumpulan yang berbeda dari yang Anda kira. Segarkan/verify kunci akses + rahasia (dan token sesi jika menggunakan kredensial sementara), dan konfirmasikan profil/source mana yang sebenarnya digunakan SDK.
Apa artinya
UnrecognizedClientException: The security token included in the request is invalid.Mengapa itu terjadi
- Kredensial sementara yang sudah habis masa berlakunya — sesi STS/SSO atau token peran yang diasumsikan telah habis waktunya, atau Anda memiliki kunci akses tanpa
AWS_SESSION_TOKENyang diperlukan. - Kunci salah atau sebagian — salah ketik, kunci akses /deleted diputar, atau
AWS_ACCESS_KEY_IDdisetel tanpaAWS_SECRET_ACCESS_KEYyang cocok. AWS_SESSION_TOKENbasi tersisa di lingkungan dari sesi sebelumnya.- Menunjuk kredensial nyata di DynamoDB Lokal (atau sebaliknya) — Lokal menerima kunci tiruan apa pun tetapi titik akhir nyata tidak akan menerima placeholder.
- Kemiringan jam pada mesin cukup besar untuk membatalkan tanda tangan permintaan.
Bagaimana cara memperbaikinya
- Verifikasi kredensial berfungsi:
aws sts get-caller-identity. Jika gagal juga, itu kredensialnya, bukan DynamoDB. - Segarkan kredensial sementara — jalankan kembali
aws sso login/ ambil kembali peran tersebut, dan pastikanAWS_SESSION_TOKENdisetel untuk kunci sementara. - Hapus vars env basi —
AWS_SESSION_TOKEN/AWS_ACCESS_KEY_IDlama di shell Anda akan menggantikan profil Anda. Hapus setelannya atau setel profil yang tepat (aws configure listmenunjukkan sumber mana yang menang). - Untuk DynamoDB Lokal, gunakan kredensial placeholder dan arahkan ke endpoint lokal:
const client = new DynamoDBClient({ region: 'local', endpoint: 'http://localhost:8000', credentials: {accessKeyId: 'local', secretAccessKey: 'local'} }); - Periksa jam mesin apakah akurat (tersinkron NTP) jika semua yang lain terlihat benar.
Dari DynoTable
DynoTable menyelesaikan profil ~/.aws Anda yang baru di setiap koneksi,
jadi login ulang, rotasi kunci, atau env var yang dihapus diambil tanpa memulai ulang
aplikasi. Tekan ⌘P untuk melihat profil mana yang aktif dan apakah aktif
titik kredensial berwarna hijau — titik merah berarti Masuk (SSO) atau Hubungkan kembali
sebelum panggilan tabel apa pun berhasil. Untuk DynamoDB Lokal, tambahkan profil dengan titik akhir
http://localhost:8000 dan kunci placeholder alfanumerik (lihat
Menjalankan DynamoDB Lokal); kunci AWS asli terhadap Lokal
memicu kesalahan yang sama ini.
FAQ
Apa yang dimaksud dengan "Token keamanan yang disertakan dalam permintaan tidak valid"? AWS menolak kredensial Anda saat otentikasi, sebelum memeriksa izin. Kuncinya salah, dirotasi, atau sebagian, token sesi sementara sudah kedaluwarsa atau basi, atau SDK membaca sumber kredensial yang berbeda dari yang Anda kira.
Bagaimana cara men-debug token keamanan yang tidak valid?
Jalankan aws sts get-caller-identity — jika gagal juga, itu adalah kredensialnya, bukan DynamoDB. Segarkan kredensial sementara (aws sso login atau ambil kembali peran tersebut), pastikan AWS_SESSION_TOKEN disetel untuk kunci sementara, dan hapus var env basi yang menggantikan profil Anda.
Cara mereproduksinya
Yang ini tidak memerlukan kredensial yang valid dan tidak perlu mesin lokal — autentikasi gagal sebelum otorisasi, sehingga layanan DynamoDB yang sebenarnya menjawab kunci palsu yang sengaja dibuat:
import boto3
boto3.client(
'dynamodb',
region_name='us-east-1',
aws_access_key_id='AKIAIOSFODNN7EXAMPLE',
aws_secret_access_key='wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY',
).list_tables()Keluaran nyata:
UnrecognizedClientException: The security token included in the request is invalid. [HTTP 400]Kunci yang salah bentuk secara struktural (not-a-key) mengembalikan pesan yang identik, dan itulah jebakan praktisnya: kesalahan memberi tahu Anda bahwa kredensial ditolak, tidak pernah mengapa. Salah ketik, access key yang dihapus, kunci dari akun yang salah, dan kunci yang tidak pernah ada — semuanya berakhir di sini dengan cara yang sama. Bandingkan dengan security token expired, yang memang membedakan dirinya, dan perhatikan pasangannya — kode di wire adalah UnrecognizedClientException sementara pesannya berbicara tentang "security token", jadi mencari pesan tersebut dan mencari kelasnya di handler Anda membutuhkan string yang berbeda.
Kesalahan terkait
- AccessDeniedException — kredensial valid, izin tidak ada.
- Wilayah tidak ada di konfigurasi
- Pelajari: Menjalankan DynamoDB Lokal — kredensial placeholder terhadap titik akhir lokal.
Sumber
- Memecahkan masalah kesalahan untuk AWS CLI — Panduan Pengguna AWS CLI (diverifikasi 13-07-2026)
- Penanganan kesalahan dengan DynamoDB — Panduan Pengembang Amazon DynamoDB (diverifikasi 13-07-2026)
- Catatan penggunaan lokal DynamoDB — Panduan Pengembang Amazon DynamoDB (diverifikasi 13-07-2026)
Direproduksi 26-07-2026 terhadap layanan DynamoDB langsung di us-east-1 melalui boto3 1.43.56 — keluaran di atas adalah kata demi kata.