我正在尝试使用 AWS SDK(js) 验证是否存在具有访问密钥的 IAM 用户。
我正在尝试为 API 构建访问控制模块。我无法在 AWS 上部署它。我不想尝试构建整个东西,而是想使用 IAM 处理用户管理,但需要构建一个自定义模块来检查当前 IAM 用户是否有权访问资源。
我检查了文档,看起来你只能通过用户名获取用户。我想也许我可以列出用户并通过访问密钥过滤用户数组,但显然该列表没有访问密钥信息。
我正在尝试使用 AWS SDK(js) 验证是否存在具有访问密钥的 IAM 用户。
我正在尝试为 API 构建访问控制模块。我无法在 AWS 上部署它。我不想尝试构建整个东西,而是想使用 IAM 处理用户管理,但需要构建一个自定义模块来检查当前 IAM 用户是否有权访问资源。
我检查了文档,看起来你只能通过用户名获取用户。我想也许我可以列出用户并通过访问密钥过滤用户数组,但显然该列表没有访问密钥信息。
AWS Identity and Access Management (IAM) 服务专为授予对 AWS 资源的访问权限而设计。它不是为应用程序设计的身份验证系统。
更合适的产品是Amazon Cognito:
Amazon Cognito 可让您轻松添加用户注册和登录,并管理您的移动和 Web 应用程序的权限。您可以在 Amazon Cognito 中创建自己的用户目录。您还可以选择通过 Facebook 或 Amazon 等社交身份提供商对用户进行身份验证;使用 SAML 身份解决方案;或使用您自己的身份系统。此外,Amazon Cognito 使您能够在用户设备上本地保存数据,即使设备处于离线状态,您的应用程序也能正常工作。然后,您可以跨用户的设备同步数据,以便他们的应用程序体验保持一致,无论他们使用什么设备。
借助 Amazon Cognito,您可以专注于创建出色的应用程序体验,而不必担心构建、保护和扩展解决方案来处理跨设备的用户管理、身份验证和同步。
您可以使用 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 的模拟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 用户有权创建新实例。