如何使用Terraform与AWS S3创建Snowflake存储集成



我正在尝试使用Terraform来设置Snowflake"存储集成";链接到AWS S3存储桶的对象。我正在使用";chanzuckerberg";除标准AWS提供商外,Terraform注册表中的Snowflake提供商。

我遇到的问题是,创建集成的部分过程需要以下操作序列:

  1. 使用S3访问策略创建IAM角色
  2. 创建Snowflake Storage Integration对象,指定在步骤1中创建的IAM角色
  3. 使用存储集成对象中的值修改IAM角色访问策略

(此处为完整的步骤列表(

因此,IAM角色和存储集成之间存在循环依赖关系。步骤1和2很简单,但我不确定如何使用Terraform实现步骤3,因为中涉及到在创建对象后修改对象的状态。

遗憾的是,IAM角色访问策略似乎无法独立于角色本身进行修改。

这样的事情可能吗?还是资源之间的循环关系意味着Terraform无法处理?

带有IAM角色的Terraform依赖循环有一个简单的解决方法。可以预先计算角色ARN,这样集成资源就不依赖于该角色。然后,角色可以自由使用集成输出。

样本代码:

locals {
role_name = "my_role"
role_arn = "arn:aws:iam::${data.aws_caller_identity.current.account_id}:role/${local.role_name}"
}
resource "snowflake_storage_integration" "int" {
storage_aws_role_arn = local.role_arn
...
}
resource "aws_iam_role" "role" {
name = local.role_name
assume_role_policy = jsonencode({
"Version" : "2012-10-17"
"Statement" : [
{
"Action" : "sts:AssumeRole"
"Effect" : "Allow"
"Principal" : {
"AWS" : snowflake_storage_integration.int.storage_aws_iam_user_arn
}
"Condition" : {
"StringEquals" : {
"sts:ExternalId" : snowflake_storage_integration.int.storage_aws_external_id
}
}
}
]
})
}

这个模块已经帮助它成为一个交钥匙部署。

https://github.com/Snowflake-Labs/terraform-snowflake-storage-integration

如果有帮助,请告诉我。

相关内容

  • 没有找到相关文章

最新更新