【问题标题】:AmazonCognitoIdentityProviderException: User is not authorized to perform cognito-idp:DescribeUserPool on resourceAmazonCognitoIdentityProviderException:用户无权对资源执行 cognito-idp:DescribeUserPool
【发布时间】:2021-02-24 18:30:51
【问题描述】:

我正在学习将 AWS 与 ASP .NET Core 站点集成。我使用 AWS Cognito 作为用户存储。我创建了一个注册表单,它实际上充当了 AWS Cognito 的接口。到目前为止,我已经完成了以下步骤:

  1. 在 AWS Cognito 中创建了一个用户池。

  2. 在 IAM 服务中创建了一个用户。将现有策略“AmazonCognitoDeveloperAuthenticatedIdentities”附加到此用户。

  3. 在 Windows 中的用户配置文件目录中创建了一个凭据文件。在此文件中设置 aws_access_key_id 和 aws_secret_access_key

  4. 在 appsettings.json 文件中创建了一个 AWS 部分并设置密钥如下(我隐藏了用户池客户端密码):

    "AWS": {
    
    "Region": "us-east-2",
    
    "UserPoolClientId": "44m80ksabq0knieeg81ina2npj",
    
    "UserPoolClientSecret": XXXXXX,
    
    "UserPoolId": "us-east-2_115WHTcaH"
     }
    
  5. 我已导入 Amazon.AspNetCore.Identity.Cognito 和 Amazon.Extensions.CognitoAuthentication nuget 包。使用这些包,我已将 CognitoUser 作为 T 参数传递给 ASP .NET Core Identity 类的 SignInManager 和 UserManager。下面是控制器的完整代码。

    public class Accounts : Controller
    {
        SignInManager<CognitoUser> _signInManager;
        UserManager<CognitoUser> _userManager;
        CognitoUserPool _pool;
    
        public Accounts(SignInManager<CognitoUser> signInManager, UserManager<CognitoUser> 
          userManager, CognitoUserPool pool)
        {
            _signInManager = signInManager;
            _userManager = userManager;
            _pool = pool;
        }
    
    
        [HttpPost]
        public async Task<IActionResult> SignUp(SignupModel model)
        {
            if (ModelState.IsValid)
            {
                var user = _pool.GetUser(model.Email);
                if (user.Status != null)
                {
                    ModelState.AddModelError("UserExists", "User with this email already exists");
                    return View(model);
                }
    
                user.Attributes.Add(CognitoAttribute.Name.AttributeName, model.Email);
                var createdUser = await _userManager.CreateAsync(user, model.Password);
                if (createdUser.Succeeded)
                {
                    RedirectToAction("Confirm");
                }
            }
            return View();
        }
    }
    

当我执行此代码时,我在尝试创建用户 (await _userManager.CreateAsync(user, model.Password)) 时遇到错误

AmazonCognitoIdentityProviderException: User: arn:aws:iam::777844316068:user/xxxx is not authorized to perform: cognito-idp:DescribeUserPool on resource: arn:aws:cognito-idp:us-east-2:777844316068:userpool/us-east-2_115WHTcaH

我知道这与 IAM 的政策有关,但我无法弄清楚我缺少的确切设置。有人可以帮忙吗?

【问题讨论】:

    标签: c# amazon-web-services asp.net-core


    【解决方案1】:

    您的用户不是管理员添加到 IAM uesrs 权限 AdministratorAccess

    【讨论】:

      【解决方案2】:

      进入IAM用户,选择用户,点击“添加内联策略”,找到服务“Cognito User Pools”,搜索动作“DescribeUserPool”,添加用户池arn,创建策略

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-08-22
        • 1970-01-01
        • 2019-11-24
        • 2021-02-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-28
        相关资源
        最近更新 更多