【发布时间】:2018-09-29 12:30:32
【问题描述】:
我一直在尝试按照他们的文档将图像/视频上传到 s3。但是,经过多次尝试后,我不断收到拒绝访问错误。
我已经在其 UnAuth 角色中为 s3:* 访问设置了一个认知池。但问题是我无法让它在 iOS 设备上运行。我使用 AWSTransferManager 创建上传功能,但这是我得到的响应:
<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>AccessDenied</Code><Message>Access Denied</Message>
<RequestId>DEE11EF134B50C8D</RequestId><HostId>/+qV8CLvPZHi4lIAHrVnKf1sDmWFcFS1dcfMX5XG0yfPG/TIASBfo/T5aGZRZg77wdn7siOrRVc=</HostId></Error>
Upload failed with error: (The operation couldn’t be completed. (com.amazonaws.AWSServiceErrorDomain error 11.))
存储桶政策-:
{
"Version": "2012-10-17",
"Id": "Policy1460611228663",
"Statement": [
{
"Sid": "Stmt1460611220793",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::MY_ACCOUNT_ID:root"
},
"Action": [
"s3:GetObject",
"s3:PutObject"
],
"Resource": "arn:aws:s3:::MY_BUCKET_NAME/*"
}
]
}
IAM UnAuth 角色政策-:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:*",
"mobileanalytics:PutEvents",
"cognito-sync:*"
],
"Resource": [
"*"
]
}
]
}
我被困在这个问题上。请建议我做错了什么?
let accK = "myaccesskey"
let secretK = "mysecretkey"
let credentialsProvider = AWSStaticCredentialsProvider(accessKey: accK, secretKey: secretK)
let configuration = AWSServiceConfiguration(region: AwsRegion, credentialsProvider: credentialsProvider)
AWSS3TransferManager.register(with: configuration!, forKey: "mys3")
【问题讨论】:
-
“UnAuth 角色策略”是什么意思?据我所知,我们可以定义用户角色策略和存储桶策略。即我们如何为用户提供访问权限以及哪些 access_token 能够访问存储桶。但我没有听说“UnAuth 角色政策”?在这里阅读docs.aws.amazon.com/AmazonS3/latest/dev/…
-
谢谢。所以我必须创建一个 IAM 用户并将 S3 的策略添加到该用户,然后使用该用户的访问密钥和秘密密钥在 iOS 中创建凭证?
-
是的。正确的。此外,我们可以使用根管理员的访问密钥和密钥。(即不创建 IAM 用户)。但亚马逊不会喜欢单独使用管理员访问密钥访问 S3 存储桶。这不是最佳做法。还有一点,您无需在 iOS 中创建任何凭据,只需在 S3 设置期间使用访问密钥和密钥即可。
-
好的,我试过了,但得到了同样的错误。添加 iOS 代码。
-
你有没有检查桶名和上传路径(应该有相同的桶名)。?
标签: ios swift amazon-web-services amazon-s3 aws-sdk