如何在单个EC2实例上管理多个IAM用户?

时间:2018-06-18 08:26:10

标签: amazon-web-services amazon-ec2 aws-sdk amazon-iam aws-iam

对于不同的AWS服务,我需要不同的IAM用户来保护访问控制。有时,我甚至需要在EC2实例中的单个项目中使用不同的IAM用户凭证。管理此问题的正确方法是什么以及如何将这些IAM用户凭证部署/附加到单个EC2实例?

2 个答案:

答案 0 :(得分:2)

虽然我完全同意接受的答案,即使用静态凭据是解决此问题的一种方法,但我想提出一些改进(并建议使用Secrets Manager)。

作为架构上的进步,我建议实现凭证的完全隔离,使凭证具有动态并且不存储在中央位置(上面建议的Secrets Manager)是对应用程序进行docker化并在AWS Elastic Container Service(ECS)上运行。这样,您可以将不同的IAM角色分配给不同的ECS任务。

受益于Secrets Manager解决方案 -完全避免有人在Secrets Manager中篡改凭据的用例,因为凭据具有动态性质(临时的,并通过SDK自动假定)

  • 证书是在AWS端为您管理的
  • 只有ECS服务可以承担此IAM角色,这意味着您不能让真正的人窃取凭据,也不能让开发人员使用此凭据从其本地计算机连接到生产环境。

AWS Official Documentation for Task Roles

答案 1 :(得分:1)

为在Amazon EC2实例上运行的应用程序提供凭据的常规方法是为实例分配IAM角色。然后通过实例元数据提供与角色关联的临时凭证。 AWS开发工具包将自动使用这些凭据。

但是,这仅适用于一组凭据。如果您希望使用多个凭据,则需要在凭据文件中提供凭据。

AWS凭证文件可以包含多个配置文件,例如:

[default]
aws_access_key_id = AKIAaaaaa
aws_secret_access_key = abcdefg

[user2]
aws_access_key_id = AKIAbbbb
aws_secret_access_key = xyzzzy

为方便起见,也可以通过AWS CLI配置:

$ aws configure --profile user2
AWS Access Key ID [None]: AKIAbbbb
AWS Secret Access Key [None]: xyzzy
Default region name [None]: us-east-1
Default output format [None]: text

可以通过环境变量设置要使用的配置文件:

  • Linux:export AWS_PROFILE="user2"
  • Windows:set AWS_PROFILE="user2"

或者,通过SDK调用AWS服务时,只需指定要使用的配置文件。以下是来自Credentials — Boto 3 documentation的Python的示例:

session = boto3.Session(profile_name='user2')
# Any clients created from this session will use credentials
# from the [user2] section of ~/.aws/credentials.
dev_s3_client = session.client('s3')

SDK中也有与其他语言相同的功能。