0

我正在尝试使用 AWS SDK(js) 验证是否存在具有访问密钥的 IAM 用户。

我正在尝试为 API 构建访问控制模块。我无法在 AWS 上部署它。我不想尝试构建整个东西,而是想使用 IAM 处理用户管理,但需要构建一个自定义模块来检查当前 IAM 用户是否有权访问资源。

我检查了文档,看起来你只能通过用户名获取用户。我想也许我可以列出用户并通过访问密钥过滤用户数组,但显然该列表没有访问密钥信息。

4

2 回答 2

1

AWS Identity and Access Management (IAM) 服务专为授予对 AWS 资源的访问权限而设计。它不是为应用程序设计的身份验证系统。

更合适的产品是Amazon Cognito

Amazon Cognito 可让您轻松添加用户注册和登录,并管理您的移动和 Web 应用程序的权限。您可以在 Amazon Cognito 中创建自己的用户目录。您还可以选择通过 Facebook 或 Amazon 等社交身份提供商对用户进行身份验证;使用 SAML 身份解决方案;或使用您自己的身份系统。此外,Amazon Cognito 使您能够在用户设备上本地保存数据,即使设备处于离线状态,您的应用程序也能正常工作。然后,您可以跨用户的设备同步数据,以便他们的应用程序体验保持一致,无论他们使用什么设备。

借助 Amazon Cognito,您可以专注于创建出色的应用程序体验,而不必担心构建、保护和扩展解决方案来处理跨设备的用户管理、身份验证和同步。

于 2018-04-04T05:56:55.057 回答
0

您可以使用 AWS CLI/SDK 通过 IAM 用户凭证检查用户是否存在

iam:GetUseriam:SimulatePrincipalPolicy策略附加到您的 IAM 用户。

这里iam:GetUser将用于检查用户是否存在,iam:SimulatePrincipalPolicy将用于检查资源访问。

1.检查存在:

您可以使用AWS-IAM 的getUser()函数来验证用户是否存在

const iam = new AWS.IAM({
 // Iam User access and secret Key
})
iam.getUser({}, (err,data)=>{
  if(err)
    console.log("User not exist");
  else
    console.log("User exist ", data);
})

如果用户存在:=>

 `{

        "User": {

        "Path": "/",

        "UserName": "userName",

        "UserId": "AIDAY357ZXJ7ADSEWNGWA3",

        "Arn": "arn:aws:iam::60977878822:user/userName", // required this in simulator 

        "CreateDate": "2020-08-05T14:48:49Z"

        }
    }`

2.对于资源访问,您可以使用AWS-IAM 的模拟PrincipalPolicy()函数。

let params = {
  PolicySourceArn = "Paste IAM user arn", // arn:aws:iam::60977878822:user/userName
  ActionNames = ["ec2:RunInstances"]
}
iam.simulatePrincipalPolicy(params, (err, data)=> {
  if(err)
    console.log("Error", err);
  else 
    console.log("Data ", data);
})

输出:=>

    `{ 
         ResponseMetadata: { RequestId: '3e7cbc9a-ed7b-472a-b054-a6f3f37bf8c4' },

         EvaluationResults:

      [ { EvalActionName: 'iam:SimulatePrincipalPolicy',

          EvalResourceName: '*',

          **EvalDecision: 'allowed',**   // check this

          MatchedStatements: [Array],

          MissingContextValues: [],

          ResourceSpecificResults: [] },

         ],

      IsTruncated: false 
 }`

如果EvalDecision“允许”,则意味着您的 IAM 用户有权创建新实例。

于 2020-08-13T08:52:38.757 回答