我有一个用于 EC2 实例的 IAM 角色(即实例配置文件),其中附加了两个策略,授予对 SQS 和 S3 的完全访问权限。有一个与此角色关联的 EC2 实例正在运行。它运行多个使用临时凭证的应用程序,并且一切运行正常。
现在,我的一个应用程序也需要访问 SNS。我修改了 IAM 角色,添加了一个带有策略生成器的内联策略,允许对特定 SNS 主题进行某些 API 调用。然而,修改 IAM 角色后,尝试时aws sns list-topics
出现以下错误(相应的 arn 被三重 X 替换):
User: XXX is not authorized to perform: SNS:ListTopics on resource: XXX:*
添加策略是否需要重新启动实例?还是我必须等待临时凭证 ( /latest/meta-data/iam/security-credentials/iam-role-name
) 过期?我可以通过某种方式强制这些凭证过期吗?
编辑:最后一个问题似乎可以通过IAM 常见问题解答. 临时凭证不能重新激活或延长。
答案1
尝试了多种不同的方法后,我发现将我的策略限制在单个队列上是导致所有问题的原因。我假设当策略应用于单个队列并且您执行 ListTopics 时,您将只获得您有权访问的主题。但是,我的 SNS 有其他几个主题,它们在 ListTopics 结果中的存在很可能被视为违反策略。当我用“*”替换特定主题名称并保存策略时,它立即(无需凭证过期或 EC2 实例重新启动)开始工作。