Javascript APIを使用してラムダ関数を呼び出す必要があります。CognitoのユーザープールIDを使用してラムダ関数を呼び出すことは可能ですか?
ブラウザで認証されたユーザーのCognitoユーザープールの資格情報で呼び出す必要があります。
目的は、ラムダ関数が、cognitoユーザープールからのユーザーと同じレベルのS3へのアクセスを持つことです。
どうすればいいですか?
おかげ
Javascript APIを使用してラムダ関数を呼び出す必要があります。CognitoのユーザープールIDを使用してラムダ関数を呼び出すことは可能ですか?
ブラウザで認証されたユーザーのCognitoユーザープールの資格情報で呼び出す必要があります。
目的は、ラムダ関数が、cognitoユーザープールからのユーザーと同じレベルのS3へのアクセスを持つことです。
どうすればいいですか?
おかげ
あなたがCognito連携アイデンティティを持つユーザー・プール・トークンをフェデレーションことで、これはあなたのAWSラムダ関数を呼び出すための一時的なAWSの資格を与えることを行うことができます。アイデンティティプールを作成し、アクセス許可lambda:InvokeFunctionを持つロールを作成する必要があります。
また、ユーザープールのすべてのユーザーは、認証役割ベースの解決方法を選択するとラムダ機能を呼び出すことができます。ユーザーのサブセットに制限する場合はユーザープール内のグループを使用できます。トークンまたはルールに基づくマッピングをフェデレーションされたアイデンティティに組み込んで役割を決定します。
参考:あなたはCognitoを使用してログインすると、あなたはこのようにラムダ関数を呼び出すことができ
<script src="js/aws-cognito-sdk.min.js"></script>
<script src="js/amazon-cognito-identity.min.js"></script>
<script src="js/aws-sdk.min.js"></script>
あなたはこれらの3つのパッケージが必要になります
function invokeMyLambda()
{
if(!objCognitoUser) syncAwsFromCognito();
var lambda = new AWS.Lambda({region: 'us-east-1', apiVersion: '2015-03-31'});
// create JSON object for service call parameters
var pullParams = {
FunctionName : 'myLambFunctionName',
InvocationType : 'RequestResponse', // Event | RequestResponse | DryRun
LogType : 'None',
Payload : JSON.stringify({ "yourKeyName": "Key Value to pass to the function in Event Object"}),
};
// invoke Lambda function, passing JSON object
lambda.invoke(pullParams, function(err, data) {
if (err) {
console.log(err);
} else {
console.log(data);
alert("Success: " + JSON.stringify(data));
}
});
lambda = null;
}
function syncAwsFromCognito() {
// objCognitoUser = new AWSCognito.CognitoIdentityServiceProvider.CognitoUser(userData);
if(!objCognitoUser) {
objCognitoUser = objUserPool.getCurrentUser();
}
if (objCognitoUser) {
objCognitoUser.getSession(function(err, result) {
if (result) {
if(AWS.config.credentials == null) // Refresh AWS Config credentials
AWS.config.credentials = new AWS.CognitoIdentityCredentials(jsonUserCreds);
AWS.config.credentials.params.Logins[strConfUserPoolID] = result.idToken.jwtToken;
}
});
//call refresh method in order to authenticate user and get new temp credentials
AWS.config.credentials.refresh(function (error) {
if (error) {
console.log('syncAwsFromCognito', error);
}
});
}
else
alert("Session expired. Login again");
}
あなたはS3を作ることができますCognito認証後にJavascriptから直接呼び出してください。私は、ブラウザから直接ラムダ関数呼び出しの代わりにAPIゲートウェイでREST APIを使用することを好むでしょう。 Lambda関数呼び出しは、Cognito SDKを使用してログアウトしても1時間有効なTokenIDに依存しているためです。