如何使用 AWS Amplify 和 Cognito 管理将图像上传到 S3 的用户授权?

How to manage User authorization to upload images to S3 using AWS Amplify and Cognito?

我已经创建了 UserPool 和 Identity Pools,并成功地执行了 Signup 和 SignIn。但是当我尝试访问 S3 以上传图像时,我收到以下错误。

错误: com.amazonaws.services.s3.model.AmazonS3Exception:拒绝访问(服务:null;状态代码:403;错误代码:AccessDenied;

这是导致错误的代码片段。

CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(
                getApplicationContext(),
                "MY_Identity_Pool_ID", // Identity pool ID
                Regions.MY_Region// Region
        );


        TransferUtility transferUtility =
                TransferUtility.builder()
                        .context(getApplicationContext())
                        .awsConfiguration(AWSMobileClient.getInstance().getConfiguration())
                        .s3Client(new AmazonS3Client(credentialsProvider, Region.getRegion(Regions.AP_SOUTH_1)))
                        .build();



        Log.d("imagepath", images.get(0).getPath());
        TransferObserver uploadObserver =
                transferUtility.upload(
                        "apples.jpeg",
                        new File(images.get(0).getPath()));

我通过向 IAM 中的授权角色提供 S3 访问策略来解决它。