为 AWS EC2 用户数据脚本传递 API 密钥的最佳方法是什么
What is the best possible way to pass API key for AWS EC2 user data script
启动 EC2 实例时,我有 bash 脚本到 运行 作为 用户数据脚本 。为此,我需要传递外部 API 访问密钥 ID 和密钥。我不想将这些密钥存储在我的用户数据脚本中,因为它以明文形式显示。有什么方法可以将这些密钥存储在 AWS Secret Manager 等地方并在用户数据脚本中使用它?
通常您可以将此类机密存储在 AWS Systems Manager Parameter Store 中 免费 ,与 AWS Secret Manager 不同:
AWS Systems Manager Parameter Store provides secure, hierarchical storage for configuration data management and secrets management. You can store data such as passwords, database strings, Amazon Machine Image (AMI) IDs, and license codes as parameter values.
要在您的 UserData
中使用它,必须为 实例角色 设置访问 Parameter Store 的权限。然后在你的 UserData
中,你可以使用 aws cli get-parameter 来获取你的秘密的价值。
我建议将其存储在 Secrets Manager or SSM Parameter Store。
您需要在用户数据脚本中使用 CLI 来检索值。
对于 SSM,您将使用 get-parameter 函数检索密钥。
secret=$(aws ssm get-parameter --name "MyStringParameter")
对于 Secrets Manager,您将使用 get-secret-value 函数检索机密。
secret=$(aws secretsmanager get-secret-value --secret-id MyTestDatabaseSecret)
然后在您的 bash 脚本中,当您想引用它时,您只需要使用变量 $secret
实际替换为您的秘密。
如果您决定使用其中任何一个,您将需要确保 EC2 实例有一个 IAM role 附加到该实例并具有正确的策略以应用您需要的权限。
或者 如果这是一个经常发生的过程(例如自动缩放实例),那么您应该提前查看配置基本服务器映像 (AMI),然后将其引用为源 AMI。
使用 Ansible、Chef 和 Puppet 等工具,您可以使用您的秘密配置基础映像,这将取代在 UserData
中执行任何操作的任何需要,因为它会提前可用。
启动 EC2 实例时,我有 bash 脚本到 运行 作为 用户数据脚本 。为此,我需要传递外部 API 访问密钥 ID 和密钥。我不想将这些密钥存储在我的用户数据脚本中,因为它以明文形式显示。有什么方法可以将这些密钥存储在 AWS Secret Manager 等地方并在用户数据脚本中使用它?
通常您可以将此类机密存储在 AWS Systems Manager Parameter Store 中 免费 ,与 AWS Secret Manager 不同:
AWS Systems Manager Parameter Store provides secure, hierarchical storage for configuration data management and secrets management. You can store data such as passwords, database strings, Amazon Machine Image (AMI) IDs, and license codes as parameter values.
要在您的 UserData
中使用它,必须为 实例角色 设置访问 Parameter Store 的权限。然后在你的 UserData
中,你可以使用 aws cli get-parameter 来获取你的秘密的价值。
我建议将其存储在 Secrets Manager or SSM Parameter Store。
您需要在用户数据脚本中使用 CLI 来检索值。
对于 SSM,您将使用 get-parameter 函数检索密钥。
secret=$(aws ssm get-parameter --name "MyStringParameter")
对于 Secrets Manager,您将使用 get-secret-value 函数检索机密。
secret=$(aws secretsmanager get-secret-value --secret-id MyTestDatabaseSecret)
然后在您的 bash 脚本中,当您想引用它时,您只需要使用变量 $secret
实际替换为您的秘密。
如果您决定使用其中任何一个,您将需要确保 EC2 实例有一个 IAM role 附加到该实例并具有正确的策略以应用您需要的权限。
或者 如果这是一个经常发生的过程(例如自动缩放实例),那么您应该提前查看配置基本服务器映像 (AMI),然后将其引用为源 AMI。
使用 Ansible、Chef 和 Puppet 等工具,您可以使用您的秘密配置基础映像,这将取代在 UserData
中执行任何操作的任何需要,因为它会提前可用。