我正在使用 Terraform OpenSearch Provider 1.0 在 AWS OpenSearch 1.3 上注册快照存储库
provider "opensearch" {
alias = "manager"
url = local.opensearch_endpoint_url
aws_region = var.region
aws_assume_role_arn = local.opensearch_snapshot_manager_role_arn
}
resource "opensearch_snapshot_repository" "this" {
provider = opensearch.manager
name = "main_s3"
type = "s3"
settings = {
bucket = var.snapshot_bucket_name
region = var.region
role_arn = var.snapshot_role_arn
}
}
使用我的个人 AWS 凭证在本地启动时,此代码可以成功运行。 但当从在 EKS 中运行并使用运行程序凭据的 Gitlab CI 运行程序启动时,它会失败。
╷
│ Error: NoCredentialProviders: no valid providers in chain. Deprecated.
│ For verbose messaging see aws.Config.CredentialsChainVerboseErrors
│
│ with module.opensearch_config[0].opensearch_snapshot_repository.this[0],
│ on modules/terraform-opensearch-config/main.tf line 60, in resource "opensearch_snapshot_repository" "this":
│ 60: resource "opensearch_snapshot_repository" "this" {
│
╵
这个 CI 运行程序可以使用 Terraform AWS Provider 创建 AWS 资源,因此 CI 运行程序已正确设置。 该问题特定于 CI 运行程序和 Terraform Opensearch Provider 夫妇。
Terraform Opensearch Provider 如何解析 AWS 凭证?如何调试这个身份验证问题?
源 IAM 角色中的策略禁止承担为 Opensearch 提供商创建的 IAM 角色。
在启动 Terraform 之前尝试运行
aws sts assume-role
显示了真正的错误消息。