我正在尝试使用AWS SDK(js)验证IAM用户是否存在访问密钥。
我正在尝试为API构建访问控制模块。我无法在AWS上部署它。我想要使用IAM处理用户管理,而不是尝试构建整个事物,但需要构建一个自定义模块来检查当前IAM用户是否有权访问资源。
我已经检查了文档,看起来你只能通过用户名获取用户。我想也许我可以列出用户并通过访问密钥过滤用户数组,但显然列表没有访问密钥信息。
答案 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 (