React native 无法使用amplify列出S3存储桶上的文件。[错误:请求失败,状态代码403]

React native 无法使用amplify列出S3存储桶上的文件。[错误:请求失败,状态代码403],react-native,amazon-s3,expo,amazon-iam,aws-amplify,React Native,Amazon S3,Expo,Amazon Iam,Aws Amplify,在我的react原生项目(expo)中,我对aws amplify的存储库有一些问题 我试图在我的桶的公开目录中列出文件。我已经按照“手动设置”部分中的描述配置了放大功能 所有其他服务(如GraphQL或Auth)都按预期运行 Amplify.configure({ Auth: { // REQUIRED only for Federated Authentication - Amazon Cognito Identity Pool ID identityPoolId: 'eu-

在我的react原生项目(expo)中,我对aws amplify的存储库有一些问题

我试图在我的桶的公开目录中列出文件。我已经按照“手动设置”部分中的描述配置了放大功能

所有其他服务(如GraphQL或Auth)都按预期运行

Amplify.configure({
Auth: {
    // REQUIRED only for Federated Authentication - Amazon Cognito Identity Pool ID
    identityPoolId: 'eu-central-1:xxx',

    // REQUIRED - Amazon Cognito Region
    region: 'eu-central-1',

    // OPTIONAL - Amazon Cognito User Pool ID
    userPoolId: 'eu-central-1_xxxx',

    // OPTIONAL - Amazon Cognito Web Client ID (26-char alphanumeric string)
    userPoolWebClientId: 'xxxx',

    oauth: {}
},
Storage: {
    AWSS3: {
        bucket: 'xxx', //REQUIRED -  Amazon S3 bucket name
        region: 'eu-central-1', //OPTIONAL -  Amazon service region

    }
}
}
当我调用
wait Storage.list(dict)
时,我得到以下错误:

[ERROR] 30:16.771 axios-http-handler, [Error: Request failed with status code 403]
- node_modules/expo/build/logs/LogSerialization.js:168:14 in _captureConsoleStackTrace
- node_modules/expo/build/logs/LogSerialization.js:41:26 in serializeLogDataAsync
- ... 9 more stack frames from framework internals
...
[WARN] 30:16.773 AWSS3Provider - list error, [Error: Request failed with status code 403]
- node_modules/expo/build/logs/LogSerialization.js:168:14 in _captureConsoleStackTrace
- node_modules/expo/build/logs/LogSerialization.js:41:26 in serializeLogDataAsync
- ... 9 more stack frames from framework internals
从我的角度来看,我的identityPoolId的身份验证策略具有正确的设置:

{
        "Action": [
            "s3:*"
        ],
        "Resource": [
            "arn:aws:s3:::xxx",
            "arn:aws:s3:::xxx/public/*"
        ],
        "Effect": "Allow"
    }
以及CORS配置:

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<ID>S3CORSRuleId1</ID>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>HEAD</AllowedMethod>
<AllowedMethod>PUT</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>DELETE</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<ExposeHeader>x-amz-server-side-encryption</ExposeHeader>
<ExposeHeader>x-amz-request-id</ExposeHeader>
<ExposeHeader>x-amz-id-2</ExposeHeader>
<ExposeHeader>ETag</ExposeHeader>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>

S3CORSRuleId1
*
得到
头
放
邮递
删除
3000
x-amz-服务器端加密
x-amz-request-id
x-amz-id-2
埃塔格
*
我做错了什么?有人知道我的设置中缺少了什么吗。是否需要将jwtToken传递给存储操作

如果有人能帮助我,我将不胜感激


非常感谢。

我找到了解决办法。身份池身份验证策略是由SAM创建的,未包含AssumePolicyDocument。您能否详细说明答案?AssumeRolePolicyDocument在哪里?我找到了解决方案。身份池身份验证策略是由SAM创建的,未包含AssumePolicyDocument。您能否详细说明答案?AssumolePolicyDocument位于何处?