基于 Cognito ID 的 S3 文件夹访问 IAM 策略

2024-01-14

我创建了一个 IAM 策略来允许 Cognito 用户写入我的 S3 存储桶,但我想根据他们的 Cognito ID 将它们限制为文件夹。我已按照亚马逊的说明进行操作here http://docs.aws.amazon.com/IAM/latest/UserGuide/ExampleIAMPolicies.html并创建了一个如下所示的策略:

{
    "Effect": "Allow",
    "Action": ["s3:PutObject","s3:GetObject"],
    "Resource": [
        "arn:aws:s3:::mybucket/myappfolder/${cognito-identity.amazonaws.com:sub}*"
    ]
}

但是,当我尝试使用 AWS iOS SDK v2 上传时,出现访问被拒绝错误。

如果我修改资源的最后一个路径组件来替换${cognito-identity.amazonaws.com:sub}与明确的identityId我从 SDK 获得的值AWSCognitoCredentialsProvider有用。

{
    "Effect": "Allow",
    "Action": ["s3:PutObject","s3:GetObject"],
    "Resource": [
        "arn:aws:s3:::mybucket/myappfolder/us-east-1:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx*"
    ]
}

我的理解是这些应该等同于同一件事。我的政策中是否遗漏了某些内容,或者我应该在上传请求中使用不同的路径?

** Update **

我最初在 iOS 中遇到了这个问题,所以今晚我尝试在 Node.js 中做同样的事情,结果是相同的。这是我在节点中使用的简单代码:

var s3 = new AWS.S3();

AWS.config.region = 'us-east-1';

AWS.config.credentials = new AWS.CognitoIdentityCredentials(AWSParams);

AWS.config.credentials.get(function (err) {

    if (!err) {

        console.log("Cognito Identity Id: " + AWS.config.credentials.identityId);

        var bucketName = 'ch123_test_bucket';

        var keyName = AWS.config.credentials.identityId + '.txt';

        var params = {Bucket: bucketName, Key: keyName, Body: 'Hello World!'};

        s3.putObject(params, function (err, data) {
            if (err)
                console.log(err)
            else
                console.log("Successfully uploaded data to " + bucketName + "/" + keyName);
        });
}

我得到的结果与使用 iOS 得到的结果相同:除非我在 IAM 策略中提供显式认知 ID,否则 API 会响应 403。

我已将 IAM 策略精简到最低限度。这不起作用:

{
  "Statement": [
   {
     "Effect": "Allow",
     "Action": ["s3:PutObject","s3:GetObject"],
     "Resource": [
         "arn:aws:s3:::ch123_test_bucket/${cognito-identity.amazonaws.com:sub}*"
      ]
  }
 ]
}

这会:

{
"Statement": [
  {
    "Effect": "Allow",
    "Action": ["s3:PutObject","s3:GetObject"],
    "Resource": [
        "arn:aws:s3:::ch123_test_bucket/us-east-1:68a5dc49-6cc7-4289-8257-d3d5636f7034*"
    ]
  }
 ]
}

我不明白我在这里缺少什么......我能够找到的唯一文档始终显示我一直在使用的相同示例资源值。


不幸的是,目前通过 Cognito 控制台结合策略变量生成的角色存在问题。请更新您的角色的访问策略以包含以下内容,以确保正确评估策略变量:

"Version": "2012-10-17"

2014-09-16 更新:我们已更新 Amazon Cognito 控制台以更正此问题new通过身份池创建向导创建的角色。现有角色仍需要进行上述修改。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于 Cognito ID 的 S3 文件夹访问 IAM 策略 的相关文章

  • iOS Swift 检测键盘事件

    我能以某种方式检测来自 iOS 键盘的事件吗 我想检测此类事件UIViewController哪个没有UITextField或任何此类物体 我只有四个圆圈UIView我想在按下键盘上的按钮时将它们涂成不同的颜色 您没有任何对象可以从键盘获取
  • 在界面生成器/故事板中设置 UIButton 图像

    我有一个视图控制器 我在故事板中添加了一个圆形矩形按钮 该应用程序运行良好 我还使用故事板将按钮连接到 segue 我正在尝试为此按钮设置一个自定义图像以用于其开和关状态 我如何访问此按钮并设置其属性 在本例中为开和关图像 这是一个屏幕截图
  • Firebase 连接管理器应仅返回一个结果

    我正在关注位于以下位置的文档 https www firebase com docs ios guide offline capability html section connection state https www firebase
  • Angular 和 Node JS 中的路由问题 [Angular]

    我有角度js的问题 我创建了 login html 和 home html 成功登录后我想将页面更改为 home html 我的路由不起作用 默认 url 是 localhost angular 我尝试路由 realpath 即 local
  • iOS 4.2.1 丢失文件?

    这是我第一次使用最新的 xcode 3 2 5 和新的 iOS 4 2 1 当我在设备上运行应用程序时 我收到以下运行时错误 无法读取 Developer Platforms iPhoneOS platform DeviceSupport
  • Node.js - 异步 JSON 查询

    如果这是一个愚蠢的问题 我深表歉意 但我对 Javascript 很陌生 而 Node js 确实让我很头疼 因为它是异步的 我的目标是从 API 查询 JSON 对象并能够使用它 我试图寻找关于我应该做什么的问题和答案 但它们对我来说都没
  • iOS 外部附件框架:如何获取特定 MFI 设备的协议字符串

    我正在编写一个 iOS 应用程序 用于与 mini mPlay Drumi MP18B 小型蓝牙扬声器 进行通信 据我所知 showBluetoothAccessoryPickerWithNameFilter仅显示协议字符串添加到 Info
  • Node.js es6 使用index.js 导出/导入

    我有以下文件夹结构 src index js lib test js dist examples example js src lib test js export default class Test src index js impor
  • 如何从 NSString 中删除十六进制字符

    我面临一个与字符串中的某些十六进制值相关的问题 我需要从字符串中删除十六进制字符 The problem is when i print object it prints as BLANK line And in debug mode it
  • Sequelize 4.3.2 n:m(多对多)关联:未处理的拒绝 SequelizeEagerLoadingError

    我有 3 个模型 用户 项目 UserProject module exports function sequelize DataTypes var User sequelize define User title DataTypes ST
  • swift 中的负数模

    负数模如何在 swift 中工作 当我执行 1 3 时 它给出 1 但余数是 2 其中有什么问题 雨燕余数运算符 计算余数 整数除法 a b a a b b where 是截断整数除法 在你的情况下 1 3 1 1 3 3 1 0 3 1
  • 部署 MVC4 项目时出错:找不到文件或程序集

    过去 我只需使用 Visual Studio 2012 发布到 AWS 菜单项即可部署我的 MVC4 网站 到 AWS Elastic Beanstalk 现在 程序可以在本地编译并运行 但无法部署 从消息来看 它似乎正在寻找不在当前部署的
  • 如果 NSExtensionActivationRule 设置为仅音频,则共享扩展不会出现在有功能的应用程序中

    我正在尝试创建一个共享扩展 用户可以从任何有能力的应用程序上传她的录音 该文档甚至有一个简单的示例 请参阅声明共享或操作扩展支持的数据类型 https developer apple com library content document
  • 如何在 Xcode 4 中通过一个操作归档多个目标

    我有一个包含多个目标的项目 这些目标都适用于不同的 iOS 应用程序 例如 一个用于精简版的目标 另一个用于专业版的目标 我想立即构建并归档我的所有应用程序 目前 我对每个目标都有一个方案 我用它来独立归档每个应用程序 但现在我必须开始归档
  • 在 AWS Lambda 中共享代码

    在 AWS Lambda 函数之间共享代码的首选方式是什么 我有这样的结构 functions a 节点模块 index js 包 json b 节点模块 index js 包 json c 节点模块 index js 包 json 这让每
  • 使用 Java 从 S3 上的文件在 S3 上创建 zip 文件

    我在 S3 上有很多文件 需要对其进行压缩 然后通过 S3 提供压缩文件 目前 我将它们从流压缩到本地文件 然后再次上传该文件 这会占用大量磁盘空间 因为每个文件大约有 3 10MB 而且我必须压缩多达 100 000 个文件 所以一个 z
  • 如何自动为 Swift 类创建初始化程序?

    UPDATE 使用结构而不是类 struct 在很多方面都更好 它有自己的初始化器 这是我的模型课 是否有可能创建init自动方法 每次我都必须将所有变量一一初始化 这会花费很多时间 class Profile var id String
  • iOS 对 Google 云消息传递的支持

    我在谷歌的开发者控制台中看到 GCM 允许为 iOS 生成 API 密钥 我在网上搜索了有关如何在 iOS 应用程序中通过 GCM 实现推送通知的任何类型的文档 但没有找到答案 真的有可能在 iOS 应用程序中使用 GCM 实现推送通知 j
  • 当设置 setVisibleXRangeMaximum 时,iOS-Charts X 轴值无限重复

    我正在尝试绘制一个图表 其中 x 轴是TimeIntervalY 轴是power consumption 由于每天都会有数据 因此将有太多数据无法显示 因此 我想一次显示 5 个值 我通过设置实现了这一点self chart setVisi
  • 通用类不会将委托调用转发给具体子类

    鉴于以下情况 protocol EntityType var displayString String get extension String EntityType var displayString String return self

随机推荐

  • 为什么谷歌主页使用 (0, obj.func)(args) 语法?

    有时我盯着google com主页提供的js 发现他们倾向于使用 0 obj func args 句法 以下是脚本的摘录 var function var window this try mb function a return 0 win
  • 直到达到停止值为止的骰子数量

    我正在尝试计算骰子掷出的次数 直到达到明确的停止值 例如 我希望停止值为 100 我正在编写以下代码 sumofsides lt function stopvalue totalsum lt 0 while totalsum lt stop
  • Fabric.js 使用旋转手柄将旋转限制为 x 度

    我正在使用 Fabric js 并尝试使用旋转手柄允许画布上的任何对象旋转 不是自由 360 度 而是一次只能旋转 15 度 我非常努力地搜索 但到目前为止找不到答案 这可能吗 更短的解决方案 canvas on object rotati
  • ionic 4 - 添加插件时未捕获类型错误

    我创建了一个离子项目 版本 4 0 6 添加插件 cordova plugin x socialsharing 后出现以下错误https beta ionicframework com docs native social sharing
  • Phalcon PHP - 表单和模型验证

    Phalcon 支持 2 个验证组件 Phalcon Validation Validator Phalcon Mvc Model Validator 我不知道如何在我的情况下使用它们 我有一张注册表 其中包含 csrf username
  • Google Admin SDK - 服务帐户无法访问资源

    我已通过 console developers google com 创建了服务帐户客户端 生成的密钥 p12 证书 启用 DwD 等等 然后我继续在管理员中担任描述者API参考 https developers google com id
  • OpenLayers 3 图像和文本样式 zindex

    我注意到文本和图像样式在渲染时似乎不遵守其图层顺序 例如 当具有这些样式的许多要素靠近时 所有文本都会呈现在其他重叠矢量要素之上 有没有办法禁用或覆盖这种行为 谢谢 myFeature setStyle new ol style Style
  • LINQ - 按名称分组到 Dictionary>

    我正在构建一个图书馆应用程序 我有一个书籍列表 其中一些书籍的名称重复 同一本书的副本很少 我想将列表转换为 Dictionary gt 其中字符串是一本书的名称 列表将包含具有该名称的所有 Book 对象 我已经做到了这一点 var re
  • 在安装过程中使用 Inno Setup 删除未随 Inno Setup 安装的其他应用程序

    我有一个旧的 VB6 应用程序 它是使用非常旧的 16 位版本的 InstallShield 部署的 我已经使用 Inno Setup 创建了一个新的安装程序 以便通过更新对我的 VB6 应用程序进行 64 位友好 我的所有用户都已安装现有
  • 滚动时透明导航栏可见

    我看到一个透明的主题导航栏 向下滚动时效果非常好 这是向下滚动时发生的情况 不透明度从 0 变为 100 导航栏固定容器高度变小 颜色 fff 变成颜色 000 这是该主题演示页面的直接链接 http www awerest com dem
  • SAX 解析器可以在 Java 中使用 XPath 吗?

    我正在尝试迁移我的一个使用的类DOM解析有很多XPath表达式到SAX解析 DOM解析对我来说很好 但我尝试解析的一些文件太大 导致服务器超时 我想重复使用XPath与SAX解析但我不确定是否可能 如果不可能请你帮助我 因为我不知道当我仅使
  • Python 有没有模拟键盘操作的库?

    我遇到的问题是我有这个 Python 脚本来启动应用程序 应用程序启动后 GUI 显示在屏幕上 我想将其停用 可以通过激活另一个窗口 最小化此应用程序或按 WindowsXP 的 显示桌面 键来手动完成此操作 那么有什么办法可以用Pytho
  • AngularJS:当解析 $http 返回响应 obj 而不是我的 obj 时,$routeProvider

    我正在尝试解决几个 ajax 调用 以便我的控制器需要的数据在它 及其提供的指令 执行之前可用 执行顺序有效 但是 注入到控制器中的结果不是返回我创建的对象 而是 http 的响应对象 config data headers status
  • VSCode 更改默认 python 版本

    当我在 VSCode 上编码并且不指定 python 版本时 它设置为 python2 7 17 我想将其默认设置为python3 6 我尝试通过在脚本顶部添加以下内容来实现此目的 usr bin python3 6但它不起作用 usr b
  • Npm 错误 - Windows NT - 如何解决

    当我尝试 npm install 时出现以下错误 npm ERR Windows NT 6 1 7601 npm ERR argv C Program Files nodejs node exe C Program Files nodejs
  • 如何获取Infinispan缓存中数据的大小,替代ehcache的calculateInMemorySize?

    我正在从 ehcache 迁移到 infinispan 在ehcache中我们有 net sf ehcache Cache calculateInMemorySize 来计算内存大小 如何计算 infinispan 中的内存大小 托马斯是对
  • Android Studio 是否有层次结构查看器或布局检查器?

    我尝试在这里搜索但找不到答案 我正在寻找一种方法来启动层次结构查看器 http developer android com tools help hierarchy viewer html从 Android Studio 中启动 而不必在命
  • openGL:带有着色器的线条

    如何使用着色器创建一条线 可能是彩色的 我正在使用可编程管道 并且我是 openGL 的初学者 我找不到有关如何使用着色器绘制线条的示例 我想我必须将 VAO 顶点数组对象 加载到着色器中 但是然后呢 我应该使用哪些功能以及如何使用 首先
  • 从 Shell 脚本 /bin/sh 运行 FFMPEG

    我正在尝试设置一个 Shell 脚本以在自动化监视文件夹中工作 除了运行 Shell 脚本部分之外 一切正常 本质上 当文件出现在监视文件夹中时 它会运行调用 FFMPEG 的 shell 脚本 然后将文件移动到存档文件夹以安全保存 然而现
  • 基于 Cognito ID 的 S3 文件夹访问 IAM 策略

    我创建了一个 IAM 策略来允许 Cognito 用户写入我的 S3 存储桶 但我想根据他们的 Cognito ID 将它们限制为文件夹 我已按照亚马逊的说明进行操作here http docs aws amazon com IAM lat