Hierarchical Keyring: cold-cache stampede — N concurrent decrypts → N DynamoDB/KMS calls
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 4/5
- Tempo estimado
- 3-5 dias
- Facilidade para iniciantes
- 52/100
- Tipo de issue
- Bug
- Clareza
- Claramente especificada
- Status de atividade
- Pouca atividade
- Stack de tecnologia
- aws, node.js, typescript
Direção de pesquisa
Comece pelo caminho getBranchKeyMaterials do Node Hierarchical Keyring e rastreie como o cache de materiais lida com uma consulta em cache frio. Reproduza o problema com descriptografias ou criptografias concorrentes para uma versão de chave de ramificação e verifique se uma única solicitação de keystore em andamento é compartilhada, se as entradas resolvidas são removidas e se uma solicitação com falha pode ser tentada novamente.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
Security issue notifications
If you discover a potential security issue in the AWS Encryption SDK we ask that you notify AWS Security via our vulnerability reporting page. Please do not create a public GitHub issue.
Problem:
The Node Hierarchical Keyring doesn't de-dupe concurrent branch-key lookups. If I fire a lot of decrypts for the same branch key at once against a cold cache, they all miss the cache together (it's only filled after the keystore call returns), so each one hits the keystore on its own.
So instead of one lookup I get N DynamoDB GetItem + N KMS Decrypt calls. Easy to repro: await Promise.all of ~3000 decrypts for the same key version, and you see ~3000 keystore calls instead of 1. Encrypt has the same problem since it shares the same code path.
Solution:
Add single-flight to getBranchKeyMaterials: on a miss, the first caller starts the keystore fetch and stores the in-flight promise (keyed by cache entry id); everyone else for the same key awaits that promise instead of starting their own. The entry is dropped once it settles, so the materials cache still owns caching and TTL, and a failed request isn't shared — the next call just retries.
Out of scope:
The legacy caching CMM has the same gap but it's a separate path, so I'm not touching it here.
- Linguagem predominante
- TypeScript
- Estrelas
- 260
- Forks
- 68
- Métricas de merge de PRs
- Nenhum PR com merge em 30d
Preparar o ambiente
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de aws/aws-encryption-sdk-javascript
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
aws/aws-encryption-sdk-javascript#1656 ·
-
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 68/100
aws/aws-encryption-sdk-javascript#1691 ·
-
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 48/100
aws/aws-encryption-sdk-javascript#1665 ·
-
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 35/100
aws/aws-encryption-sdk-javascript#1520 · 1 comentário ·
-
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 35/100
aws/aws-encryption-sdk-javascript#1192 · 3 comentários ·
Todas as issues de aws/aws-encryption-sdk-javascript
Issues semelhantes
-
bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 70/100
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
aiko-chan-ai/DiscordBotClient#380 ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 82/100
vercel/ai-elements#507 ·
-
bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 84/100
Mantenedores costumam responder em até 2 dias
-
Dificuldade 2/5 Meio dia Facilidade para iniciantes 84/100
anaclumos/qa-interns#148 · 1 comentário ·
Mantenedores costumam responder em até 1 dia