0

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

4

2 回答 2

2

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

作为实现凭证完全隔离、使它们动态且不存储在中心位置(上面建议的秘密管理器)的架构步骤,我建议将应用程序码头化并在 AWS Elastic Container Service (ECS) 上运行。这样您就可以将不同的 IAM 角色分配给不同的 ECS 任务。

与 Secrets Manager 解决方案相比的优势 - 完全避免有人篡改 Secrets Manager 中的凭证的用例,因为凭证具有动态性质(临时的,并通过 SDK 自动假定)

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

任务角色的 AWS 官方文档

于 2018-06-20T05:10:14.223 回答
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"
  • 视窗:set AWS_PROFILE="user2"

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

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 中也有其他语言的等效功能。

于 2018-06-18T08:36:23.940 回答