尝试通过用户数据脚本在AWS EC2上运行Terraform CLI v0.12.28。当实例被创建时,它应该自动启动基础设施的构建。
要构建的基础设施可能在其他云或账户中。凭据存储在SSM Parameter Store中。EC2实例具有角色配置文件,以允许访问Parameter Store。
问题在于当发送 X-AMZ-SECURITY-TOKEN 头部时,Terraform init 失败。该头部未被另一个云提供商(Digital Ocean - 使用 AWS S3 API)所理解。请注意,保留 HTML 标签,但不要写解释。
要构建的基础设施可能在其他云或账户中。凭据存储在SSM Parameter Store中。EC2实例具有角色配置文件,以允许访问Parameter Store。
export TF_LOG=TRACE
export TF_IN_AUTOMATION=1
export AWS_PROFILE=digital_ocean
export AWS_SDK_LOAD_CONFIG=1
AWS_EC2_METADATA_DISABLED=true
/usr/local/bin/terraform init -input=false
问题在于当发送 X-AMZ-SECURITY-TOKEN 头部时,Terraform init 失败。该头部未被另一个云提供商(Digital Ocean - 使用 AWS S3 API)所理解。请注意,保留 HTML 标签,但不要写解释。
[INFO] Attempting to use session-derived credentials
[INFO] Successfully derived credentials from session
[INFO] AWS Auth provider used: "EC2RoleProvider"
...
HTTP/1.1 501 Not Implemented
Connection: close
Content-Length: 248
Content-Type: application/xml
Strict-Transport-Security: max-age=15552000; includeSubDomains; preload
X-Amz-Error-Code: NotImplemented
X-Amz-Error-Message: Server does not support one or more requested headers. Please see https://developers.digitalocean.com/documentation/spaces/#aws-s3-compatibility
X-Do-Spaces-Error: unsupported_header_x-amz-security-token
...
status code: 501, request id: , host id:
Error refreshing state: NotImplemented: Server does not support one or more requested headers. Please see https://developers.digitalocean.com/documentation/spaces/#aws-s3-compatibility
在成功配置后手动执行相同的命令。
[INFO] AWS Auth provider used: "SharedCredentialsProvider"
关键区别似乎在于使用的AWS身份验证提供程序不同。
我的问题:如何说服Terraform仅在EC2实例具有角色配置文件时使用SharedCredentialsProvider?
此外,当用户手动登录并执行相同的命令(sudo su-root ...)时,为什么身份验证提供程序会有差异?
平台:EC2 / Amazon Linux 2