我是对AWS详细用法非常陌生的开发人员。在AWS中,我实现了一个示例无服务器架构流程/应用程序。用于图层的服务是Dynamodb(DB)-Lamda(DAO)-API Gateway(API)-S3 Bucket(演示文稿)
我需要保护API网关的安全。
我如何:
我从此处检查了3种实现和实现API安全的方法:https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-control-access-to-api.html
1)Cognito用户池2)使用计划+ API密钥3)IAM用户身份验证:我将AWS_IAM设置为api网关的授权类型。我创建了一个IAM用户,并附加了一个具有调用api权限的IAM策略。我遵循此: https://docs.aws.amazon.com/apigateway/latest/developerguide/permissions.html 和https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-control-access-using-iam-policies-to-invoke-api.html
我认为IAM用户身份验证是最安全的,因为我们发出了SigV4签名的请求。我在这里的特定问题是关于将IAM用户凭据放入和检索文档中称为〜/ .aws / credentials的外部文件。 通常,请进一步指导我。
我目前正在使用JavaScript SDK,并在浏览器中加载。在本地Windows系统中,我在C:\ Users \ USERNAME.aws \ credentials下创建了凭据文件,格式如下:https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/setup-credentials.html
我尝试使用Javascript SDK CredentialProviderChain https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CredentialProviderChain.html#constructor-property
我的代码是
var chain = new AWS.CredentialProviderChain();
chain.resolve(function(err, credentials)
{
console.log(err);
console.log(credentials);
});
我收到“没有提供者”错误。我读了一个类似问题的评论,即如果在浏览器中使用Javascript SDK加载,我们将无法从C:\ Users \ USERNAME .aws \ credentials文件中检索证书。
我已经阅读了相关的AWS文档,这里未提及。
注意:以后我需要实现要在移动应用程序中使用的代码。如果我使用JavaScript实现示例,则需要指导App Developer。我一个人都不知道Android。
更新 作为使用Javascript SDK的第一步,我发现了我正在研究的以下2个链接: https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/setting-credentials-browser.html https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/loading-browser-credentials-cognito.html 请注意,我要使用IAM身份验证而不是Cognito身份验证。如果最终目标是移动应用程序,是否要使用Cognito身份验证?请指导。
更新 使用Javascript SDK,我实现了这一点:a)使用身份池b)将Cognito用户池用作身份提供程序。 c)编写代码以登录用户池用户,获取ID令牌。 d)使用身份池获得临时AWS凭证。
所以问题是:a)是否使用身份提供者+身份池进行身份验证+授权,这是为API网关实现IAM安全的唯一方法? b)如何仅使用IAM凭据来实现安全性,即没有授权仅使用授权就可以实现安全性吗?