上下文:AWS账户2中有一个API将SQS url作为其中一个输入并向其发布输出。帐户1的所有者希望将此API与其自己的SQS队列一起使用。
帐户1具有启用了SSE-KMS的SQS队列。帐户1的所有者希望帐户2中的特定IAM用户能够发布到此SQS队列。实现这一目标的唯一方法就是:
这种方法的问题是两个帐户都需要采取行动。是否有更简单的方法来实现相同的结果,只有帐户1所有者需要做任何事情而不需要打扰帐户2的所有者?
编辑1:当我们尝试集成而不在SQS上启用加密时,一切正常。这就是我们如何知道它是KMS问题,而不是SQS政策。一旦我们启用SQS加密,它就会因AccessDeniedException
而开始失败答案 0 :(得分:5)
为了测试这种情况,我做了以下事情:
在帐户A中:
AmazonSQSFullAccess
权限政策然后我以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):User:arn:aws:iam :: 123456789012:user / user-1无权执行:kms:资源上的GenerateDataKey:arn:aws:kms :ap-southeast-2:123456789012:key / xxx(服务:AWSKMS;状态代码:400;错误代码:AccessDeniedException;请求ID:xxx)
因此,这表明在向队列发送消息时,必须授予用户使用KMS的权限,显然是kms:GenerateDataKey
。我假设每条消息都是通过KMS生成的唯一密钥单独加密的。
然后,我授予User-1使用KMS密钥的权限,并且命令已成功完成。因此,它在同一帐户中 。
然后,在Account-2中:
AmazonSQSFullAccess
权限当我再次使用User-2的凭据运行命令时,我收到了:
调用SendMessage操作时发生错误(AccessDenied):拒绝访问资源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
作为外部帐户。
那仍然没有帮助。原来我必须向User-2添加一些kms:*
类型的权限。 (太任何权限,但我变得懒惰!)
这,然后工作。
然后,我删除了KMS 外部帐户权限,但仍然可以使用。
所以,似乎:
您可能想问他们是否真的想要使用KMS密钥! :)