Jef*_*son 4 amazon-s3 amazon-web-services amazon-cognito
我们的目标是创建 S3 存储桶和 IAM 角色策略,只允许我们登录的用户访问 S3。
我们在 S3 存储桶上托管私有文件,可从 Web 和移动应用程序访问该文件。我们正在尝试使用未经身份验证的角色通过 Amazon Cognito 添加一层安全性,以便任何登录到我们应用程序的用户都可以访问 S3 存储桶。
使用适用于 JS 的 AWS-SDK 并遵循基本AWS.config.credentials设置,我们可以在 Amazon Cognito 身份控制面板中看到访问的 1 个身份和同步数。由于我们似乎正在连接到 IdentityPool,我认为我们的策略可能需要进行一些调整,以便具有未经身份验证的 Cognito 角色的登录用户可以访问 S3 存储桶。
Cognito_IdentityPoolUnauth_Role 的 IAM 角色策略
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "SID_NUMBER",
"Effect": "Allow",
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::OUR_BUCKET_NAME/*"
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
S3 存储桶策略
{
"Version": "2012-10-17",
"Id": "http referer policy example",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::IAM_NUMBER:role/Cognito_IdentityPoolUnauth_Role"
},
"Action": "s3:*",
"Resource": "arn:aws:s3:::OUR_BUCKET_NAME/*"
}
]
}
Run Code Online (Sandbox Code Playgroud)
当您尝试直接从浏览器访问文件时,请求中不会发送任何凭据。它与尝试直接访问 S3 具有相同的效果,而无需任何代码即可从 Cognito 获取凭据。为了使用 Cognito 凭据,您需要使用 javascript SDK 发出请求。下面是一个使用来自此页面的 javascript SDK 的示例请求
var s3 = new AWS.S3();
var params = {Bucket: 'myBucket', Key: 'myKey'};
s3.getSignedUrl('getObject', params, function (err, url) {
console.log("The URL is", url);
});
Run Code Online (Sandbox Code Playgroud)
如果您在获取 Cognito 凭据后调用此方法,它将使用 Cognito 凭据创建一个签名 URL 以访问存储桶 myBucket 中的密钥 myKey。您可以采用与此类似的方法在您的存储桶中列出对象,然后生成签名 url(使用 Cognito 凭证签名),您的最终用户可以单击以查看您存储桶中每个密钥的内容。
| 归档时间: |
|
| 查看次数: |
5077 次 |
| 最近记录: |