我想知道大公司用于编程访问多个 AWS 服务的最佳实践,因为有多个程序需要访问不同的 2 个服务,那么如何管理呢?他们是否为每个程序创建了用于不同的 2 个服务的多个访问密钥,还是创建了可以访问所有服务的单个访问密钥?
答案1
对于 EC2 / Lambda / 等 AWS 资源的最佳实践是使用 IAM 角色,详细信息这里简而言之,您不需要为服务器创建用户,而是创建一个服务可以承担的角色,该角色具有一组与 EC2 服务器关联的权限。
具有角色的服务器在运行时会获得“临时”凭证,以便它可以访问 IAM 角色允许的任何服务。当我说“临时”时,提供给服务的凭证是短暂的,可能只有 24 小时,但当它们过期时会发出新的凭证。这通常是透明的,除非您正在编写使用它们的软件,在这种情况下您必须偶尔检查它们。我可能没有完全正确地说明细节,但或多或少是正确的。
AWS 具有预定义的策略,可以使定义角色更容易。
例如,您可以定义角色,说明“具有此角色的 EC2 服务器可以推送到 SQS、从 SQS 拉取、执行此 lambda 函数”,并且任何未明确授予的权限都将被拒绝。有时需要进行一些实验才能获得所需的权限。最小特权是最好的,这样如果像 EC2 服务器这样的资源受到攻击,它就没有 AWS 的管理员权限,也不能删除所有内容或开始加密挖掘。
如果您在一家从事 AWS 工作的大型公司工作,我建议您接受一些 AWS 培训。您需要在 Cloud Guru 等公司接受 AWS Architect Associate 在线培训。AWS 很复杂。多年来我一直在 AWS 全职工作,但我每天都会学到新东西。
答案2
首先,您需要预定义资源访问策略(如 SQS、EC2、ElastiCache 等)。之后,您可以添加具有编程访问权限的用户并以安全的方式存储凭证,或使用角色将其分配给服务以供访问。例如:创建 IAM 角色以访问 RDS 并将其分配给 ec2 实例,然后尝试从 ec2 实例访问我们的数据库。