2017-10-03 3 views

Répondre

1

Il y a currentlh trois partitions distinctes et indépendantes dans AWS.

Il y a aws (celui communément appelé AWS), aws-cn (Chine) et aws-us-gov (GovCloud US).

Il semble qu'il n'y ait aucune connexion entre les trois partitions - même l'espace de noms "Global" des compartiments S3 est uniquement global dans chaque partition.

Opérationnellement, il est comme il y a trois « copies » complètement autonomes et indépendantes de AWS. En tant que tel, il n'y a pas d'accès IAM inter-comptes possible, car les partitions semblent totalement ignorantes les unes des autres.

Vous devez être en mesure d'utiliser les informations d'identification d'utilisateur IAM obtenues à partir du compte en Chine pour accéder aux ressources de la partition aws-cnde n'importe où. Il ne devrait pas y avoir d'empêchement puisque le DynamoDB endpoint in cn-north-1 est accessible directement depuis Internet. Vous devez transmettre ces informations d'identification au client DynamoDB plutôt que d'utiliser les informations d'identification du rôle de la fonction Lambda.

+0

Cela semble prometteur.Avez-vous des recommandations sur la façon d'obtenir les informations d'identification nécessaires et comment référencer et utiliser ces informations d'identification depuis Lambda? J'ai des difficultés à trouver des solutions en ligne qui n'exposent pas les informations d'identification d'une manière qui semble un peu dangereuse. – Otter

+0

Vous devrez créer les informations d'identification de la manière habituelle, mais voir [Créer une fonction Lambda à l'aide de variables d'environnement pour stocker des informations sensibles] (http://docs.aws.amazon.com/lambda/latest/dg/tutorial-env_console .html) pour les stocker cryptés-au-repos. Ils seront décryptés et déposés dans l'environnement lors de la génération des conteneurs Lambda, afin que votre code puisse y accéder et les transmettre au client DynamoDB. –

+0

Je pense que je l'ai eu au travail! Merci! – Otter

0

Il est possible d'accéder à la table DynamoDB d'une région à l'autre. Lorsque vous utilisez votre SDK, mettez à jour la région à cn-north qui devrait prendre soin de là.

var AWS = require('aws-sdk'); 
AWS.config.update({region: 'cn-north'}); 
var dynamodb = new AWS.DynamoDB(); 
dynamodb.batchGetItem(params, function (err, data) { 
    if (err) console.log(err, err.stack); // an error occurred 
    else  console.log(data);   // successful response 
}); 

Si vous utilisez un autre compte, créez un rôle distinct (AssumeRole pour un autre compte) et ajoutez-le à Lambda. Vous pouvez également accéder avec AccessKey et SecretKey séparés. Mais le rôle est recommandé.

http://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_permissions-to-switch.html

Hope it helps.

+2

* Bien que ce serait un excellent travail *, il semble que je ne peux pas créer un rôle pour la non-CN compte à assumer. Au point où j'ai besoin de créer un rôle sur le compte 2, si j'essaie de spécifier un compte non-CN comme entité de confiance, il échoue («principal invalide»), mais si j'essaie de spécifier un autre compte CN, Cela me permet de créer le rôle. (Notez que les royaumes CN ne peuvent pas vivre sur des comptes non-CN) Il ne semble pas que ce soit aussi simple que de passer d'une région à l'autre en raison de la «Grande Muraille» du CN: https: //fastretailing.github.io/blog/2015/09/29/AWS-ChinaBeijing-Region-Tips.html – Otter

+0

dans ce cas, au lieu d'assumer un rôle, vous devez fournir les informations d'identification réelle dans l'autre compte. (Un utilisateur IAM, plutôt qu'un rôle IAM.) Cela est probablement dû à la séparation entre les régions CN et les autres régions: –

0

Il existe des adresses d'API publiques pour chaque service AWS que vous pouvez utiliser et signer les demandes vous-même pour envoyer des données sur différents comptes.