如何在没有硬编码的情况下在cloud-init中引用AWS访问密钥(密钥)

时间:2017-06-11 12:40:39

标签: amazon-ec2 amazon-iam

我想编写初始化REX-Ray docker插件的cloud-init脚本(在其配置中使用AWS凭据的服务)。 我考虑过以下方法。但是,这些方法有一些缺点。

  1. cloud-init脚本中的硬编码访问密钥/密钥。

    问题:这不安全。

  2. 创建IAM角色,然后从实例元数据中引用访问密钥,密钥。

    问题:访问密钥将在特定时间段内到期。         所以我需要重新启动REX-Ray守护程序进程,这会导致服务暂时不可用。

  3. 请告诉我哪个是更好的方式来引用访问密钥/密钥,或者其他方式(如果存在)。

    提前致谢。

2 个答案:

答案 0 :(得分:1)

您可以使用以下身份验证方法

环境变量

在环境环境中导出访问密钥和密钥,如下所示:

$ export AWS_ACCESS_KEY_ID="anaccesskey"
$ export AWS_SECRET_ACCESS_KEY="asecretkey"

共享凭据文件

您可以使用AWS凭据文件指定凭据。 Linux和OS X上的默认位置是$ HOME / .aws / credentials,或者"%USERPROFILE%.aws \ credentials"对于Windows用户。如果terraform无法内联或在环境中检测凭证,Terraform将检查此位置

您可以选择通过提供shared_credentials_file属性在配置中指定其他位置

provider "aws" {
  region                  = "us-west-2"
  shared_credentials_file = "/Users/tf_user/.aws/creds"
  profile                 = "customprofile"
}

https://www.terraform.io/docs/providers/aws/

答案 1 :(得分:1)

docker插件应自动获取凭据。你不需要做任何事情。不要为AWS凭证设置任何环境变量。

vector / AWS CLI将自动从元数据服务器获取凭据。