我收到此错误是因为我使用 SSO 吗? “加载状态时出错:AccessDenied:访问被拒绝状态代码:403”?

问题描述 投票:0回答:2

这是我的地形设置。当我在不同的帐户中使用访问密钥和秘密密钥时,初始化 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"
  }
}
amazon-web-services authentication terraform single-sign-on terraform-provider-aws
2个回答
0
投票

我在 terraform 和 sso 上遇到了完全相同的问题,如果找到解决方案,我会更新。 * 更新,就我而言,这是因为状态存储桶明确拒绝未加密的传输。我将

encrypt = true
添加到我的 tfstate 后端,效果很好。 https://www.terraform.io/docs/language/settings/backends/s3.html#s3-state-storage


0
投票

如果您在配置 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

© www.soinside.com 2019 - 2024. All rights reserved.