【问题标题】:Give read/write access to an S3 bucket to a specific Cognito user group向特定 Cognito 用户组授予对 S3 存储桶的读/写访问权限
【发布时间】:2021-08-15 05:17:25
【问题描述】:

我在 Cognito 用户池中有用户,其中一些在 Administrators 组中。需要允许这些管理员读取/写入特定的 S3 存储桶,而其他用户不得。

为了实现这一点,我为Administrators 组分配了一个角色,如下所示:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::my-bucket-name/*"
            ]
        }
    ]
}

然后在我的 Angular 应用程序中,我登录并使用 Amplify 的 Storage 类执行以下操作:

Storage.put("test.txt", "hello")
    .then(result => ...)
    .catch(err => ...);

本例中的Amplify.configure 是:

const amplifyConfig = {
  Auth: {
    region: "eu-west-2",
    userPoolId: xxx,
    userPoolWebClientId: yyy,
    mandatorySignIn: false,
  },
  Storage: {
    AWSS3: {
      bucket: 'my-bucket-name',
      region: "eu-west-2"
    }
  }
};
Amplify.configure(amplifyConfig);

这里的问题是,在内部,没有向Storage.put 调用提供凭据,并且任务失败如下:

[DEBUG] 31:08.487 Credentials - Failed to load credentials 
ZoneAwarePromise {__zone_symbol__state: false, __zone_symbol__value: NotAuthorizedException: 
Unauthenticated access is not supported for this identity pool.

仔细阅读,这似乎是因为您没有获得凭据根本,除非您有一个联合身份池。因此,我创建了一个附加到我的用户池 + 应用程序客户端的身份池,使用所有默认值,并将其 ID 添加到我的 Amplify.configure 配置中。

这仍然行不通,但这次我确实获得了凭据 - 它们适用于身份池的Authenticated Role中指定的 IAM 角色。

所以现在如果我将上述 S3 权限添加到该角色,我的所有代码都可以正常工作,但是现在 所有 用户(不仅仅是管理员)可以读/写管理员的桶。啊。

那么,当且仅当我是管理员时,如何获取管理员用户组设置中指定角色的凭据?

或者,是否可以通过联合身份中的一些巧妙设置来解决此问题,从而根据用户组分配正确的角色?

【问题讨论】:

    标签: amazon-web-services amazon-s3 amazon-cognito aws-amplify


    【解决方案1】:

    解决方案在于联合身份池的设置。

    默认情况下,身份池将提供其配置的 IAM 角色。换句话说,它设置为“未经身份验证的角色”或“经过身份验证的角色”之一。

    但可以改为提供由身份验证提供程序指定的角色。这就是解决这里问题的方法。

    1. 在 AWS 控制台的 Cognito 中,打开相关的身份池。
    2. 点击“编辑身份池”(右上角)
    3. 展开“身份验证提供程序”
    4. 在 Authenticated Role Selection 下,选择“Choose role from token”。

    这将允许 Cognito 指定自己的角色,您会发现用户获得了他们所在组的权限。

    【讨论】:

      猜你喜欢
      • 2020-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-31
      • 1970-01-01
      • 1970-01-01
      • 2016-09-05
      • 1970-01-01
      相关资源
      最近更新 更多