S3へデータ取得時、InvalidSignatureException: The request signature we calculated does not match the signature you provided. というエラーがまれに発生し、失敗します。こちらの対処方法を伺いたいです。
具体的な内容
現状、こちらを参考にしアクセス制限のかかったS3に対して、Cognitoのtokenを使用した認可制御をかけています。
https://docs.aws.amazon.com/ja_jp/sdk-for-javascript/v3/developer-guide/loading-browser-credentials-cognito.html
具体的なソースコードは以下です。
const client = new S3Client({
region: REGION,
credentials: fromCognitoIdentityPool({
identityPoolId: IDENTIFY_POOL_ID,
clientConfig: {
region: REGION,
},
customRoleArn: cognitoRoleArn,
logins: {
// Coginitoを用いてログイン時に取得したidTokenを使用
[cognitoUserPoolId]: idToken,
},
}),
});
// GetObjectCommandを作成
const command = new GetObjectCommand({
Bucket: S3_INPUT_BUCKET,
Key:S3_Key,
});
// S3からオブジェクトを取得
const data = await client.send(command);
こちらを実行してデータ取得を試みると、稀に失敗する場合があります。以下はエラー内容です。
InvalidSignatureException: The request signature we calculated does not match the signature you provided.
技術スタックは以下です。
- Nextjs v14.x
- Typescript
- @aws-sdk/client-s3
参考記事