You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让EC2实例按调用者切换IAM角色,适配微服务权限需求?

基于调用者身份的IAM角色切换实现方案

针对你的需求,以下是几个可行的实现方案,核心思路是让微服务仅在验证调用者为管理员API网关时,才获取具备余额增加权限的临时IAM凭证,从根源上防止被攻陷后的越权操作:

方案一:API Gateway IAM授权 + STS临时角色切换

  1. 为两个API网关配置独立IAM角色:
    • 用户API网关角色:仅拥有调用余额微服务的权限,无Assume其他角色的权限。
    • 管理员API网关角色:拥有调用余额微服务的权限,且被允许Assume一个具备DynamoDB余额增加权限的IAM角色(下称「管理员操作角色」)。
  2. 配置API Gateway启用IAM身份验证,调用微服务时自动携带调用者的IAM身份信息(通过X-Amz-Credential等请求头传递)。
  3. 余额微服务改造:
    • 解析请求头中的调用者身份,验证是否为管理员API网关角色。
    • 若为管理员调用,通过AWS STS的AssumeRole接口获取「管理员操作角色」的临时凭证(有效期设为15分钟以内,最小化风险)。
    • 用临时凭证执行DynamoDB余额增加操作;普通用户调用则使用EC2实例原有角色(仅能减少余额)执行操作。
  4. 关键IAM策略约束:
    • EC2实例角色仅允许Assume「管理员操作角色」,且仅当请求来自管理员API网关角色时生效(通过Condition中的aws:PrincipalArn限制)。
    • 「管理员操作角色」的DynamoDB策略仅允许执行余额增加的UPDATE操作,配合DynamoDB细粒度条件(如数值比较规则)进一步限制。

示例代码(Python/boto3获取临时凭证):

import boto3

sts_client = boto3.client('sts')
response = sts_client.assume_role(
    RoleArn='arn:aws:iam::123456789012:role/AdminBalanceRole',
    RoleSessionName='AdminBalanceSession',
    DurationSeconds=900
)

# 使用临时凭证初始化DynamoDB客户端
dynamodb = boto3.client(
    'dynamodb',
    aws_access_key_id=response['Credentials']['AccessKeyId'],
    aws_secret_access_key=response['Credentials']['SecretAccessKey'],
    aws_session_token=response['Credentials']['SessionToken']
)

方案二:管理员网关请求签名 + 权限前置验证

  1. 管理员API网关对每个请求生成专属签名(比如使用AWS SigV4签名,或自定义HMAC签名),并将签名信息添加到请求头(如X-Admin-Signature)。
  2. 微服务侧前置验证:
    • 收到请求后先验证签名有效性,确认是管理员网关发来的合法请求。
    • 验证通过后,通过STS获取「管理员操作角色」的临时凭证执行余额增加操作;验证失败则直接拒绝请求。
  3. 核心安全点:签名密钥仅存储在管理员API网关侧,微服务仅负责验证签名,不持有密钥,即使被攻陷也无法生成合法签名请求。

方案三:微服务端点隔离 + 独立权限控制

在同一余额微服务中新增管理员专属端点(如/admin/balance/add),并对该端点做如下限制:

  1. 通过API Gateway资源策略,仅允许管理员API网关的IAM角色或指定IP访问该端点。
  2. 微服务针对该端点单独使用「管理员操作角色」的临时凭证执行操作,普通端点仍使用原有角色。
  3. 该端点仅处理余额增加逻辑,同时添加操作审计日志,记录每笔管理员操作的详情。

关键安全注意事项

  • 最小权限原则:所有IAM角色仅授予完成必要操作的权限,避免过度授权。
  • 临时凭证有效期:设置为最短可行时间(如15分钟),降低凭证泄露风险。
  • 审计溯源:开启CloudTrail日志,记录所有AssumeRole操作和DynamoDB余额变更操作,便于事后排查。

内容的提问来源于stack exchange,提问作者AnonBird

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 04:40:24