2017-10-21 48 views
1

J'ai recherché des moyens de restreindre l'accès à une API pour l'utilisation d'une fonction AWS Lambda écrite en javascript.Signature d'une requête AWS API Gateway à l'aide du nœud

J'ai trouvé la documentation sur l'utilisation d'AWS Signature S4, mais je ne la comprends toujours pas.

Selon creating a signature, après l'application du pseudo-code, je devrais obtenir la signature à placer sur l'en-tête.

J'ai trouvé le code suivant qui aborde ce point:

// Example of signature generator 
 

 
var crypto = require("crypto-js"); 
 

 
function getSignatureKey(Crypto, key, dateStamp, regionName, serviceName) { 
 
    var kDate = Crypto.HmacSHA256(dateStamp, "AWS4" + key); 
 
    var kRegion = Crypto.HmacSHA256(regionName, kDate); 
 
    var kService = Crypto.HmacSHA256(serviceName, kRegion); 
 
    var kSigning = Crypto.HmacSHA256("aws4_request", kService); 
 
    return kSigning; 
 
} 
 

 
console.log(getSignatureKey(crypto,'secretkey','date','us-east-2','iam'));

vient ici ma première question, je ne sais pas ce qui devrait être la sortie de getSignatureKey()? C'est parce que sur la documentation c'est une très longue chaîne, alors que la sortie que j'ai eu était {mots: [x, x, x, x, x, x, x, x], sigBytes: 32}, où les x sont aléatoires Nombres.

En outre, après avoir obtenu la signature et rempli l'en-tête de la demande avec le champ "autorisation" et d'autres, comment puis-je filtrer les demandes non-conformes? Dois-je créer une stratégie pour l'API AWS afin qu'elle autorise uniquement les demandes signées? Ici, je suppose que je devrais suivre Signing Requests.

Merci!

+0

Sur la page que vous avez cité:.. « L'exemple suivant montre la clé de signature dérivée qui résulte de cette séquence d'opérations HMAC de hachage ** Ceci montre la représentation hexadécimale de chaque octet dans la clé de signature binaire * * "Vos 32" mots (octets) sont équivalents à 64 caractères hexadécimaux. La représentation hexadécimale est conviviale, mais vous n'avez pas besoin de la clé de signature sous forme hexadécimale - c'est seulement à titre d'illustration. –

+0

Merci! Cependant, si je n'ai pas besoin de la signature en hexadécimal, quel est le format de celui à introduire dans l'en-tête? –

+0

'getSignatureKey' renvoie la clé que vous utiliserez pour signer la requête canonique, pas la signature elle-même. –

Répondre

-1

Voici l'implémentation simple des URL signées. Le paquetage aws-cloudfront-sign offre une implémentation plus simple.

var cfsign = require('aws-cloudfront-sign'); 

var signingParams = { 
    keypairId: process.env.PUBLIC_KEY, 
    privateKeyString: process.env.PRIVATE_KEY, 
    // Optional - this can be used as an alternative to privateKeyString 
    privateKeyPath: '/path/to/private/key', 
    expireTime: 1426625464599 
} 

// Generating a signed URL 
var signedUrl = cfsign.getSignedUrl(
    'http://example.cloudfront.net/path/to/s3/object', 
    signingParams 
); 

https://aws.amazon.com/blogs/developer/creating-amazon-cloudfront-signed-urls-in-node-js/

Objet du SignedURL est de servir Sommaire privé.

Plus de détails à,

http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/PrivateContent.html

Hope it helps.

+0

Ceci est CloudFront, pas Signature V4. –

+0

Je vais essayer et commenter plus tard les résultats. Je vous remercie! –

-2

L'API Amazon utilise des signatures dérivées de vos clés d'accès pour contrôler l'accès aux ressources Amazon. Je pense que vous confondez cela avec le contrôle de l'accès à API Gateway, qui est différent. API Gateway prend en charge plusieurs mécanismes de contrôle d'accès, y compris l'utilisation d'API de comptage ou de suivi par les clients utilisant des clés API. Les rôles et les stratégies AWS IAM standard offrent des contrôles d'accès flexibles et robustes qui peuvent être appliqués à un ensemble d'API complet ou à des méthodes individuelles. Les autorisateurs personnalisés et les pools d'utilisateurs Amazon Cognito fournissent des solutions d'authentification et d'authentification personnalisables.

Control Access in API Gateway