启用服务器端加密的跨账户访问 AWS SQS

2024-02-29

上下文:AWS 账户 2 中有一个 API,将 SQS url 作为其输入之一并向其发布输出。帐户 1 的所有者希望将此 API 与他自己的 SQS 队列一起使用。

账户 1 有一个启用了 SSE-KMS 的 SQS 队列。账户 1 的所有者希望账户 2 中的特定 IAM 用户能够发布到此 SQS 队列。据我所知,实现这一目标的唯一方法是:

  1. 将外部账户2的ID添加到账户1的KMS密钥设置中
  2. 向账户 2 的 IAM 用户添加策略以允许访问给定的 KMS 密钥

这种方法的问题是两个帐户都需要采取行动。有没有一种更简单的方法来实现相同的结果,即只有帐户 1 所有者需要做任何事情,而不需要打扰帐户 2 的所有者?

EDIT 1:当我们尝试集成而不在 SQS 上启用加密时,一切正常。这就是我们如何知道这是 KMS 问题,而不是 SQS 政策的原因。一旦我们启用 SQS 加密,它就会因 AccessDeniedException 而开始失败


为了测试这种情况,我执行了以下操作:

在账户 A 中:

  • 创建用户1
  • 创建了 KMS 密钥
  • 授予我使用密钥的权限,但不授予 User-1
  • 在帐户 A 中创建队列,激活 SSE 并选择新密钥
  • 授予 User-1AmazonSQSFullAccess许可政策

然后,我以 User-1 身份运行命令以向队列发送消息:

aws sqs send-message --queue-url https://sqs.ap-southeast-2.amazonaws.com/123456789012/my-queue --message-body foo --profile user-1

回应是:

调用 SendMessage 操作时发生错误 (KMS.AccessDeniedException):用户:arn:aws:iam::123456789012:user/user-1 无权对资源执行:kms:GenerateDataKey:arn:aws:kms:ap- east-2:123456789012:key/xxx(服务:AWSKMS;状态代码:400;错误代码:AccessDeniedException;请求 ID:xxx)

因此,这表明用户在向队列发送消息时必须被授予使用 KMS 的权限,显然是为了kms:GenerateDataKey。我假设每条消息都通过 KMS 生成的唯一密钥单独加密。

然后,我授予 User-1 使用 KMS 密钥的权限,命令成功完成。所以,它正在工作在同一帐户内.

然后,在 Account-2 中:

  • 创建用户2
  • Granted AmazonSQSFullAccess权限

当我使用 User-2 的凭据再次运行该命令时,我收到:

调用SendMessage操作时发生错误(AccessDenied):访问资源https://ap-southeast-2.queue.amazonaws.com/ https://ap-southeast-2.queue.amazonaws.com/被拒绝。

这是预期的,因为 User-2 位于不同的帐户 (Account-2) 中。

然后,我转到 Account-1 中的 SQS 队列,并通过提供 User-2 的 ARN 添加了 User-2 的权限。

我再次运行命令并得到了熟悉的结果:

调用 SendMessage 操作时发生错误 (KMS.AccessDeniedException):null(服务:AWSKMS;状态代码:400;错误代码:AccessDeniedException;请求 ID:xxx)

请注意,它提到了ASKMS在错误中。

然后我更新了 KMS 密钥以允许arn:aws:iam::<Account-2>:root as an 外部账户.

那仍然没有帮助。事实证明我必须添加一些kms:*键入 User-2 的权限。 (太多权限了,但我太懒了!)

这然后就起作用了。

然后我删除了KMS外部账户许可,它仍然有效。

所以,看来:

  • Account-2 中的 User-2 需要调用 SQS 和 KMS 的权限
  • Account-1 中的 SQS 队列需要权限以允许 User-2 使用该队列

您可能想问他们是否真的真的想要使用 KMS 密钥! :)

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

启用服务器端加密的跨账户访问 AWS SQS 的相关文章

随机推荐

  • RavenDb - 远程服务器返回错误:(403) Forbidden

    当我尝试在 RavenDb 上创建 database people 集合时 出现以下错误 远程服务器返回错误 403 禁止 我在 IIS 上热了 Raven 但我不确定发生了什么 在 raven Management Studio 上 当我
  • 单击按钮时手动触发 HTML 验证

    我正在尝试处理按钮单击时的表单验证 它正在验证表单但未显示错误 有人可以帮我吗
  • 如何在 React 上正确地将 onclick 处理程序绑定到 `this`

    解释为什么这不是重复的 我的代码已经可以工作 我已将其作为评论包含在内 问题是为什么this当我将其包含到单击处理程序函数时 上下文会发生变化 我正在尝试 React 中的计算器项目 目标是将 onclick 处理程序附加到数字按钮 以便数
  • Excel VBA将字符串的特定文本粗体设置到单元格中?

    我想将字符串中的一些文本设置为粗体 我该怎么做 通过使用角色 Range A1 Characters 8 5 Font Bold True
  • 以斜线为背景的形状

    可以画一个Shape http msdn microsoft com en us library system windows shapes v VS 95 aspx其背景是由斜线构成的 一个例子Rectangle 抱歉图像质量 如果我想要
  • Android 用动画连续移动背景

    我想做的是水平移动背景并让它无限重复 我尝试使用ImageSwitcher用动画来实现这种效果 但无法使其正常工作 这是我到目前为止的代码L public class MainActivity extends AppCompatActivi
  • 值连接不是 org.apache.spark.rdd.RDD 的成员

    我收到此错误 value join is not a member of org apache spark rdd RDD Long Int Long String Array 0 forSome type 0 lt String Doub
  • 使用不同的锚点重新加载页面

    刚刚被一个问题困住了 我有一个带有 Jquery UI 选项卡的页面 通过向链接添加哈希标签 可以从不同的页面访问每个选项卡 并使用我需要的选项卡加载页面 但是 我还需要访问同一页面中的不同选项卡 我想出的是添加目标 parent 到带有哈
  • 使用 Mclust 进行聚类会产生空聚类

    我正在尝试使用 Mclust 对我的经验数据进行聚类 使用以下非常简单的代码时 library reshape2 library mclust data lt read csv file choose header TRUE check n
  • 将 Meraki SDK 导入 python Azure 函数应用程序时出现 HTTP 500 错误

    当我导入 Meraki 时 from meraki meraki import Meraki它会导致 HTTP 500 错误 这在我的本地计算机上按预期工作 但是当上传到我的 Python Azure Function 应用程序时 它会导致
  • 根据选择值过滤表行

    我需要根据选择值过滤表行 当选择的值为 空 时 表必须隐藏 如果选择值是 1 则表必须可见 并且必须仅显示第一个表列包含值 1 的行 问题是这个 id 列包含多个 id 例如 1 2 由于我的 JQuery 技能不是最好的 我需要你们帮助我
  • 调节/速率限制红宝石机械化

    我需要调节 Mechanize 实例与 API 连接的频率 每 2 秒一次 因此限制连接到该或更多 So this instance pre connect hooks lt lt Proc new sleep 2 我原以为这会起作用 而且
  • 使用 Play Framework 检索应用程序内的端口号

    我的系统上有两个 Play 框架 Web 应用程序在端口 9001 和 9002 上运行 我想知道是否有任何方法可以从我的 Java 代码中检索它们在哪个端口上运行 这可能吗 是的 你可以这样获取端口 int port Integer pa
  • 使用 bitbucket 在 Azure 上部署 Angular2 项目时出现 package.json 错误

    我在 azure 上部署 angular2 应用程序时遇到问题 我在以下行中收到错误 engines node 6 2 1 我给出的版本是 WEBSITE NODE DEFAULT VERSION 的值为 6 2 1 任何对此有想法的人请分
  • 字符串中包含组中的任何字符吗?

    我有一组字符 等 我也有一个字符串 可以说 这是我的字符串 我的字符串 我想检查字符串中是否存在任何字符 这不是检查子字符串 而是检查集合中的字符 我可以这样做 my str find or my str find or my str fi
  • 如何创建文件并写入文件?

    最简单的方法是什么用 Java 创建并写入 文本 文件 https docs oracle com javase tutorial essential io file html 请注意 下面的每个代码示例都可能会抛出异常IOExceptio
  • 将一组新数据写入 Plist 而不是覆盖它

    我试图获取一个 plist 来存储多组数据 但每次保存 使用 ActionSheet 中的按钮 时 它都会覆盖前一组数据 我想添加多个 朋友 及其数据 我不太热衷于使用 Core Data 所以我想知道如何使用 Plist 来做到这一点 这
  • NSAsynchronousFetchRequest - 应该在主线程上显式完成更新

    我正在创建一个 NSAsynchronousFetchRequest 其中有一个完成块 我见过各种示例 其中一些包括在主线程上使用调度队列 而另一些则没有 例如 Ray Wenderlich 核心数据手册不会在主线程上调用结果 执行结果时我
  • React Native 堆栈跟踪

    I have React Native App与 Firebase Crashlytics 关联 问题是 firebase 发送不可读的堆栈跟踪 如下所示 有任何方法可以读取此类错误 我只想知道什么时候抛出错误 这是我的堆栈跟踪 致命异常
  • 启用服务器端加密的跨账户访问 AWS SQS

    上下文 AWS 账户 2 中有一个 API 将 SQS url 作为其输入之一并向其发布输出 帐户 1 的所有者希望将此 API 与他自己的 SQS 队列一起使用 账户 1 有一个启用了 SSE KMS 的 SQS 队列 账户 1 的所有者