用于允许 Cognito 用户访问的 AWS S3 存储桶策略

Men*_* Ge 0 amazon-s3 amazon-web-services

我想创建一个 S3 存储桶策略,该策略可以阻止公共访问,但只允许通过 Cognito 注册我的应用程序的人能够通过应用程序上传对象。

当前阻止公共访问设置: WS

我当前的存储桶政策:

{
    "Version": "2012-10-17",
    "Id": "Policy1593320409523",
    "Statement": [
        {
            "Sid": "Stmt1593320397284",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::358110801253:role/Cognito_katebUnauth_Role",
                    "arn:aws:iam::358110801253:role/service-role/transcribe-role-k5easa7b",
                    "arn:aws:iam::358110801253:role/Cognito_katebAuth_Role"
                ]
            },
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::va-raw-audio-to-transcribe/*",
                "arn:aws:s3:::va-raw-audio-to-transcribe"
            ]
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

Joh*_*ein 5

默认情况下, Amazon S3 存储桶是私有的。因此,没有必要“限制”访问。相反,请选择适当的方式来“授予”所需用户的访问权限。

当用户通过 AWS Cognito 进行身份验证时,系统会提供链接到IAM 角色 的凭证。所以:

  • 不要通过存储桶策略分配权限-这通常用于向所有用户授予公共访问权限
  • 相反,将权限添加到 Cognito 对这些经过身份验证的用户使用的 IAM 角色

您在问题中列出了 3 个角色。因此,为这 3 个 IAM 角色中的每一个添加适当的权限,以便他们可以访问所需的存储桶。

另外,请非常小心您授予的权限。您的问题中的策略是 grant s3:*,这意味着用户可以删除所有对象,甚至可以删除存储桶本身!始终授予最小权限,以便他们拥有足够的访问权限,但不要超过所需的权限。

例如,如果您只想允许他们上传,则他们只需要s3:PutObject许可即可。