为AWS EC2用户数据脚本传递API密钥的最佳方法是什么

hsk*_*hsk 3 amazon-ec2 amazon-web-services aws-secrets-manager

启动 EC2 实例时,我有 bash 脚本作为用户数据脚本运行。为此,我需要传递外部 API 访问密钥 ID 和密钥。我不想将这些密钥存储在我的用户数据脚本中,因为它以明文形式可见。有什么方法可以将此密钥存储在AWS Secret Manager等位置并在用户数据脚本中使用它?

Chr*_*ams 8

我建议将其存储在Secrets ManagerSSM Parameter Store中。

您需要在用户数据脚本中使用 CLI 来检索该值。

对于SSM,您可以使用get-parameter函数检索秘密。

secret=$(aws ssm get-parameter --name "MyStringParameter")
Run Code Online (Sandbox Code Playgroud)

对于Secrets Manager,您将使用get-secret-value函数检索密钥。

secret=$(aws secretsmanager get-secret-value --secret-id MyTestDatabaseSecret)
Run Code Online (Sandbox Code Playgroud)

然后在 bash 脚本中,当您想要引用它时,您只需要使用该变量$secret来实际替换为您的秘密。

如果您决定使用其中任何一个,则需要确保 EC2 实例具有附加到该实例的IAM 角色,并具有正确的策略来应用您所需的权限。

或者,如果这是一个经常发生的过程(例如自动缩放实例),那么您应该考虑提前配置基本服务器映像 (AMI),然后将其引用为源 AMI。

借助 Ansible、Chef 和 Puppet 等工具,您可以使用您的秘密来配置基本映像,这将取代在 中执行任何操作的任何需要,因为UserData它会提前提供。