我試圖從一個特定於該用戶的文件夾中使用Transfer將文件從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令牌,並看到sub = "631d121f-b294-4318-b3cd-36b3b74ebdff"
。我甚至用Charles來查看請求/響應。
它如果我在最後的陳述S3GetObjects
與631d121f-b294-4318-b3cd-36b3b74ebdff
取代${cognito-identity.amazonaws.com:sub}
得到arn:aws:s3:::sidestreamx/631d121f-b294-4318-b3cd-36b3b74ebdff/*
確實工作。第一條語句可以繼續保留策略變量,它仍然可以工作。如果我完全刪除第一個語句,它會起作用!當我將策略變量添加到開始崩潰的最後一條語句時。
我檢查了這個Stack Overflow問題和this one,無濟於事。所以是的,我不知道。我已經在這裏工作了近9個多小時,所以任何幫助都會真誠地被讚賞。
對不起,我感到困惑。是的,儘管公認的混淆術語重疊,但策略變量指向Cognito聯合身份的身份標識,而不是用戶池字段。 –
謝謝!這花了半天的時間才意識到'sub'與我的cognito用戶屬性中的'sub'不匹配。在GitHub的一個帖子中,這是一個帖子的對立面。 – PeterB