- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试使用传输管理器从特定于用户的文件夹将文件从 AWS S3 下载到我的 iOS 移动应用程序,如下所示:
@IBAction func download() {
let transferManager = AWSS3TransferManager.default()!
let downloadingFileURL = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent("disney1.jpg")
let downloadRequest = AWSS3TransferManagerDownloadRequest()!
downloadRequest.bucket = "sidestreamx"
// user's UUID/disney1
downloadRequest.key = "631d121f-b294-4318-b3cd-36b3b74ebdff/disney1"
downloadRequest.downloadingFileURL = downloadingFileURL
transferManager.download(downloadRequest).continue(with: AWSExecutor.mainThread(), with: {
(task: AWSTask<AnyObject>) -> Any? in
if let error = task.error as? NSError {
// handle error
return nil
}
self.imageView.image = UIImage(contentsOfFile: downloadingFileURL.path)
return nil
})
}
我的 IAM 角色权限策略如下,来自 this AWS doc :
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "GetBucketListIfRequestIsForUser",
"Action": [
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::sidestreamx"
],
"Condition": {
"StringLike": {
"s3:prefix": [
"${cognito-identity.amazonaws.com:sub}/*"
]
}
}
},
{
"Sid": "S3GetObjects",
"Action": [
"s3:GetObject",
"s3:PutObject"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::sidestreamx/${cognito-identity.amazonaws.com:sub}/*"
]
}
]
}
我得到的响应是
<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>E1F205B58EF4A670</RequestId>
<HostId>dUWI8PfVZL3mJmykjhXRqvFd1yt/CqDFNlwgwD3kmLk2vrMBP6JvVgezMYSROt3KyE3dx0+3eDE=</HostId>
</Error>
用户通过 AWS Cognito 用户池和 Cognito 联合身份进行身份验证。我调试并提取了 JWT token ,发现 sub = "631d121f-b294-4318-b3cd-36b3b74ebdff"
。我什至用过 Charles查看请求/响应。
如果我将最后一条语句 S3GetObjects
中的 ${cognito-identity.amazonaws.com:sub}
替换为 ,它会工作>631d121f-b294-4318-b3cd-36b3b74ebdff
获取 arn:aws:s3:::sidestreamx/631d121f-b294-4318-b3cd-36b3b74ebdff/*
。第一条语句可以继续使用策略变量并且它仍然有效。如果我完全删除第一个语句,它将起作用!当我将策略变量添加到它开始崩溃的最后一个语句时。
我已经检查过这个 Stack Overflow问题和this one ,无济于事。所以是的,我不知道。我已经为此工作了将近 9 个多小时,因此我们将不胜感激任何帮助。
最佳答案
问题解决了。事实证明,${cognito-identity.amazonaws.com:sub}
并没有真正引用 JWT token 中的 sub
。它指的是来自 credentialsProvider 的 IdentityID:
(AWSServiceManager.default().defaultServiceConfiguration.credentialsProvider
as! AWSCognitoCredentialsProvider).getIdentityId()
.continue({task -> Any? in
print("Credentials ID is \(task.result!)")
return nil
})
我在我的存储桶中手动创建了一个名为 task.result!
的文件夹(格式为 us-east-1:XXXXXXXXXXXXXXXXXX
供引用) ,它奏效了。
关于swift - AWS S3 传输管理器 ${cognito-identity.amazonaws.com :sub} Policy Variable Access Denied,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42605419/
我正在使用 django,我在 s3 中存储了诸如 imgs 之类的东西(为此我使用的是 boto),但最近我收到了这个错误: 'foo.bar.com.s3.amazonaws.com' doesn
https://gist.github.com/meoooh/896b66e0fc5c9bfd5716fc1864a7c68b 如果我有两个 iam 角色。 但我不知道区别 最佳答案 ECS 服务调度
我们使用预签名的 s3 url 来提供对存储在 s3 中的图像的网络访问。 我们用来生成预签名 url 的 java 代码类似于下面 String accessKey = ...; String se
我正在尝试通过 pycharm 在本地模式下从 spark 读取存储在 S3 存储桶中的 json 文件。但我收到以下错误消息: "py4j.protocol.Py4JJavaError: An er
我正在尝试使用 创建一个 Spring Boot 应用程序DynamoDB 数据库,在此之后 tutorial . 添加项目依赖后,maven好像找不到 com.amazonaws 依赖,这会导致亚马
我正在使用 AmazonAWS 服务器来运行我的应用程序。要启动我正在使用的应用程序: RACK_BASE_URI=/project bundle exec rackup -D 要停止我正在使用的应用
我正在尝试在我的 Android 应用程序中使用 Amazon AWS SDK。该应用程序已使用 C2Call SDK。该应用程序正在运行,但只要我添加 AWS gradle 库,它就会开始给我多个
我正在尝试使用 JDBC 连接到 amazon athena。由于我在 Maven 上没有找到 AthenaDriver 存储库,因此我在我的 github 上自己创建了它。 。基本上我正在做的是这样
我正在 Eclipse 中设置基于 Android 的 Amazon AWS SimpleDB 客户端(刚开始)。我在线上遇到错误: import com.amazonaws.services.sim
我在将 amazonaws 导入我的 gradle 时遇到问题,非常感谢任何帮助。谢谢! 问题: 我正在尝试将“com.amazonaws.auth.*”导入到我的 build.gradle 中,但是
本文整理了Java中com.amazonaws.ml.mms.archive.ZipUtils类的一些代码示例,展示了ZipUtils类的具体用法。这些代码示例主要来源于Github/Stackove
将 document.domain 设置为 superdomain 以允许跨子域调用是一种非常常见的做法。它曾经工作到 firefox 23,但我在升级到 firefox 24 后遇到了这个问题。 当
使用 Eclipse Mars。我已经通过帮助中的安装软件添加了 aws java sdk 1.11.123。现在,当我运行 Tomcat Server 7 时,出现此错误: 2017 年 5 月 2
这可能是一个非常简单的问题,但我已经坚持了几个小时...... 我正在尝试将亚马逊云集成添加到我的项目中,但我似乎无法让项目识别 jar 文件。我目前只是想实例化一个 AmazonS3 客户端: Am
当EMR机器尝试运行包含boto3初始化的步骤时,有时会出现以下错误: ValueError: Invalid endpoint: https://s3..amazonaws.com 当我尝试安装新机
我正在尝试从我的 java 应用程序访问我的 s3 存储桶,尝试实现此功能 https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/ex
我试图理解一个问题 reported by a user against one of my open source projects .当他们查询 checkip.amazonaws.com他们有时
我正在尝试遵循此存储库中的 SQS 示例 https://github.com/jonyfs/spring-boot-jms-sqs 。我已将 Spring boot 升级到 2.1.0-RELEAS
尝试使用 Amazon FWS 出站 api 时,无法从中创建订单。出现未知异常。我发现 fws 端点主机不工作。有人可以帮助我使用 fws api 创建订单吗? com.amazonaws.
我有/aws 文件夹,其中包含 aws jar 和我的主程序 Aws.class aws 也是一个包: spectjrt.jar aspectjwe
我是一名优秀的程序员,十分优秀!