Amazon web services 用于API身份验证的EC2实例元数据或AWS STS?安全最佳做法

Amazon web services 用于API身份验证的EC2实例元数据或AWS STS?安全最佳做法,amazon-web-services,amazon-ec2,aws-api-gateway,amazon-vpc,aws-sts,Amazon Web Services,Amazon Ec2,Aws Api Gateway,Amazon Vpc,Aws Sts,下面是用例。 我有一个运行ServiceNow中间服务器代理的EC2实例。EC2实例已将IAM_角色附加到名为“TestIAMRole”的位置,并假定角色策略已附加到该角色。我使用这个EC2实例和ServiceNow中间服务器代理使用AWS boto3端点调用VPC端点。Python脚本将使用boto3 SDK生成身份验证令牌并调用端点 Python示例: import boto3 client = boto3.client('sts') repsonse = clien

下面是用例。 我有一个运行ServiceNow中间服务器代理的EC2实例。EC2实例已将IAM_角色附加到名为“TestIAMRole”的位置,并假定角色策略已附加到该角色。我使用这个EC2实例和ServiceNow中间服务器代理使用AWS boto3端点调用VPC端点。Python脚本将使用boto3 SDK生成身份验证令牌并调用端点

Python示例:

    import boto3
    client = boto3.client('sts')
    repsonse = client.assume_role(RoleArn='<IAM ROle ARN>',RoleSessionName='AssumeROle01')
    credentials=repsonse['Credentials']
因此,我们正在寻找专家对上述两种方案中最安全/推荐的方案的意见

另外,还有一些关于优化的问题

  • 如果我们使用假定角色STS方法来检索凭据,那么建议将这些凭据存储在缓存/应用程序中,直到到期日,以便我们可以重用它们,还是每次调用其他AWS服务时都应该获得新的STS凭据?每次调用AWS服务时,只需保存额外的STS调用
  • 如果选择存储在缓存或应用程序中,那么我们可以将密钥安全地存储在ServiceNow(加密格式)中,并可以在到期日之前定期更新

  • 请告知这是否正确。

    实例元数据端点用于IAM角色,使用IAM角色向EC2实例授予权限是首选方法

    在某些情况下,您需要担任以下角色:

    • 访问不同AWS帐户的API时(支持资源策略的服务允许引用您不需要STS的跨帐户权限)
    • 假设您的应用程序通常无权访问(有限时间任务)的权限时
    • 作为IAM用户,可以在帐户之间切换(例如在组织中)

    这些都是概括性的,因此我确信在需要时还有其他特殊情况,但是假设所有情况都在同一个帐户中,我建议只使用实例角色。

    它们几乎是一样的

    当您调用bot3.client('sts')时,它会在多个地方查找凭据。其中之一是实例元数据

    您可以检索实例元数据,从中提取凭据,然后使用这些凭据创建客户端。这不仅对您来说是一项更大的工作,而且您检索到的凭据也将是有时间限制的:在某个时候,它们将过期,您必须再次经历这个过程。Boto客户端足够聪明,可以为您这样做


    至于扮演不同的角色,正如您在问题中所展示的,实例元数据在这方面帮不了您。您只能检索附加到EC2实例的角色(实例配置文件)的凭据。

    我认为第二个角色没有担任此角色。感谢您的快速回复。我们的大多数API都在同一个帐户中,但在不同的帐户中也很少。对,我想说的是,对于这些API,使用STS而不是传递另一个实例的角色凭据。如果你需要审计,这会很有帮助:)这是一个很好的观点。我已经更新了我的原始帖子,还有一些问题。@snowcoder-不要保存凭据。如果您需要在多个呼叫中使用一个客户端,那么在这些呼叫之间保持它。
    http://169.254.169.254/latest/meta-data/iam/security-credentials/TestIAMRole