【问题标题】:AWS IAM - can a service know the role invoking it?AWS IAM - 服务可以知道调用它的角色吗?
【发布时间】:2018-01-17 08:34:56
【问题描述】:

总体目标:

我正在为我们的微服务环境(全新)编写一个围绕 AWS Parameter Store 的包装器。基本上,如果我们决定迁移到 Azure,我会尝试简化从一个服务提供商到另一个服务提供商的过渡,例如,因此只需修改此服务。

这个想法是一个服务在启动时可以调用这个服务('config service')来获取所有的配置设置。

问题:

如果我们决定走这条路,可能仍希望根据 IAM 权限(角色/策略)锁定参数。我正在此配置服务中寻找一种方法,以获取调用配置服务的用户/角色并将其传递给 Parameter Store,例如,在调用 ssm.getParameters(...) 时。

我看过this页面,它允许限制用户可以传递哪些角色,所以看起来我可以传递角色。不过,我需要弄清楚如何找到那个角色。

例如,如果我将 .NET 与 ASP.NET 站点和 Windows 身份验证一起使用,则可以模拟该用户以模拟该用户的权限。 (总体效果是调用服务的权限限制了它可以访问的参数。)

我在 Elastic Container Service 中使用 node.js,使用新的 Fargate luanch 类型,如果这会影响潜在答案。

【问题讨论】:

  • 我确实做了一个process的控制台转储,其中包括环境变量等,但我没有看到任何东西。
  • EC2 实例可以通过元数据确定角色名称。这是在 iam/info 和 iam/security-credentials 下。 docs.aws.amazon.com/AWSEC2/latest/UserGuide/…
  • @JohnHanley 我查看了您的链接并发现了其他一些可行的方法(即this oneAWS_CONTAINER_CREDENTIALS_RELATIVE_URI 环境变量)。但是,这仍然意味着每项服务都依赖于 AWS 才能找到其执行角色。我希望 AWS 可以将信息传递到配置服务中,因此它可以被信任,并且依赖项只存在于一项服务中。

标签: node.js amazon-web-services aws-sdk ssm aws-ssm


【解决方案1】:

如果要锁定特定微服务的 SSM 参数

  1. 为每个 ECS 任务创建并附加 IAM 角色
  2. 使用path 表示法组织您的参数
  3. 为每个 IAM 角色指定 Resource 以限制仅对特定路径的访问(请参阅 this)。 这将允许您为每个微服务仅提供特定参数。

附言。如果您只想检索当前角色为used aws sts get-caller-identity

另一种替代解决方案:

  1. 在调用 config-service 时,在请求中包含 microservice 名称,并创建 IAM 角色以匹配 microservice 名称。
  2. 在您的 config-service 中使用 aws sts assume-role 来担任微服务可用的 IAM 角色。
  3. 锁定您的 config-service 以仅担任允许的角色。

【讨论】:

  • 这是一个很好的观点,但对于第 2 步来说可能会有很多冗余。例如,公共服务的位置。但这一切都归结为权衡,对吧?如果我无法从调用服务到参数存储(调用者-> 配置服务-> 参数存储),我不确定如何应用第 3 步。我已经研究了 STS 并查看身份是否适用于路径(如有必要)。感谢您的信息。
  • @ps2goat 我添加了另一个潜在的解决方案
  • 是的,第二个解决方案是我目前正在研究的。
猜你喜欢
  • 2017-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多