使用sdk通过访问密钥ID获取AWS IAM用户

时间:2018-04-04 05:35:04

标签: amazon-web-services aws-iam

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

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

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

2 个答案:

答案 0 :(得分:1)

AWS身份和访问管理(IAM)服务专门用于授予对AWS资源的访问权限。它不是为应用程序设计的身份验证系统。

更合适的产品是Amazon Cognito

  

Amazon Cognito可让您轻松添加用户注册,登录和管理移动和网络应用的权限。您可以在Amazon Cognito中创建自己的用户目录。您还可以选择通过Facebook或亚马逊等社交身份提供商对用户进行身份验证;使用SAML身份解决方案;或者使用您自己的身份识别系统。此外,Amazon Cognito使您能够在用户设备上本地保存数据,从而使您的应用程序即使在设备脱机时也能正常工作。然后,您可以跨用户设备同步数据,以便无论他们使用何种设备,他们的应用体验都保持一致。

     

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

答案 1 :(得分:0)

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

iam:GetUser iam: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的 simulatePrincipalPolicy()功能。

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用户有权创建新实例。