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_TOKEN yang diperlukan.
  • Kunci salah atau sebagian — salah ketik, kunci akses /deleted diputar, atau AWS_ACCESS_KEY_ID disetel tanpa AWS_SECRET_ACCESS_KEY yang cocok.
  • AWS_SESSION_TOKEN basi 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

  1. Verifikasi kredensial berfungsi: aws sts get-caller-identity. Jika gagal juga, itu kredensialnya, bukan DynamoDB.
  2. Segarkan kredensial sementara — jalankan kembali aws sso login / ambil kembali peran tersebut, dan pastikan AWS_SESSION_TOKEN disetel untuk kunci sementara.
  3. Hapus vars env basiAWS_SESSION_TOKEN/AWS_ACCESS_KEY_ID lama di shell Anda akan menggantikan profil Anda. Hapus setelannya atau setel profil yang tepat (aws configure list menunjukkan sumber mana yang menang).
  4. 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'}
    });
  5. 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

Sumber

Direproduksi 26-07-2026 terhadap layanan DynamoDB langsung di us-east-1 melalui boto3 1.43.56 — keluaran di atas adalah kata demi kata.

Bekerja dengan DynamoDB tanpa Console

Klien desktop DynamoDB yang cepat dan menjalankan SQL sungguhan yang tidak bisa dijalankan DynamoDB — JOINs, GROUP BY, agregasi — dengan editing visual dan agen AI pada kunci Bedrock milik Anda sendiri.

Uji coba gratis 30 hari, tanpa kartu kredit — lalu paket Free tanpa batas waktu.