这是我的地形设置。当我在不同的帐户中使用访问密钥和秘密密钥时,初始化 terraform 时没有任何问题。但现在我对此帐户使用 SSO,却收到此错误:
加载状态错误: AccessDenied:访问被拒绝 状态码:403,请求ID:xxx,主机ID:xxxx
然后我在 terraform 文档中找到了这个。不确定我是否理解正确,但我是否因为使用 SSO 而收到此错误?如果是这样,我需要做什么来解决这个问题并让 terraform 使用此帐户。
“请注意,Terraform AWS 提供商使用的底层身份验证处理程序 AWS Go SDK 并不支持所有 AWS CLI 功能,例如单点登录 (SSO) 配置或凭证。”
注意:“my-bucket”之前是使用 CLI 在此帐户中创建的。
provider "aws" {
region = "us-east-1"
profile = "XXXXX"
}
terraform {
required_version = "~> 0.13.0"
backend "s3" {
bucket = "mybucket"
key = "mykey"
region = "us-east-1"
}
}
我在 terraform 和 sso 上遇到了完全相同的问题,如果找到解决方案,我会更新。 * 更新,就我而言,这是因为状态存储桶明确拒绝未加密的传输。我将
encrypt = true
添加到我的 tfstate 后端,效果很好。 https://www.terraform.io/docs/language/settings/backends/s3.html#s3-state-storage
如果您在配置 AWS SSO 之前设置了访问密钥,则必须取消设置 AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY 并设置 AWS_PROFILE,然后它应该可以正常工作。
unset AWS_ACCESS_KEY_ID
unset AWS_SECRET_ACCESS_KEY
export AWS_PROFILE=[profile-name-here]
就我而言,我使用的是 CDKTF,因此我还必须更新 AWS 提供商以引用共享配置
AwsProvider(self, "aws", region=region, shared_config_files=["~/.aws/config"], profile=aws_profile)
然后,您的 AWS 配置文件应包含
sso_region
和 sso_start_url
我可以确认这适用于以下版本
"hashicorp/aws@~> 5.12"
、aws-cli/2.13.9
、Python/3.11.4