如何通过Terraform为Redshift Serverless工作组添加“授权账户”?
解决Redshift Serverless工作组跨账户授权创建托管VPC终端节点的Terraform方案
控制台中“允许其他账户创建托管VPC终端节点”的配置,本质是通过资源策略实现的权限授权,目前Terraform的redshiftserverless_workgroup资源确实未直接暴露该配置项,可通过以下两种方式实现:
方法1:使用aws_redshiftserverless_resource_policy资源
这是Terraform官方提供的专门管理Redshift Serverless资源权限的资源,直接配置跨账户策略即可:
resource "aws_redshiftserverless_resource_policy" "workgroup_endpoint_access" { resource_arn = aws_redshiftserverless_workgroup.your_workgroup.arn policy = jsonencode({ Version = "2012-10-17" Statement = [ { Effect = "Allow" Principal = { AWS = "arn:aws:iam::123456789012:root" # 替换为目标账户ID } Action = "redshift-serverless:CreateEndpointAccess" Resource = aws_redshiftserverless_workgroup.your_workgroup.arn } ] }) }
将代码中的123456789012替换为你要授权的AWS账户ID,该策略会允许目标账户对指定工作组执行创建托管VPC终端节点的操作。
方法2:通过local_exec调用AWS CLI
如果上述资源无法满足需求(比如特定版本兼容性问题),可以直接调用AWS CLI设置资源策略:
resource "aws_redshiftserverless_workgroup" "your_workgroup" { workgroup_name = "your-target-workgroup" # 其他工作组配置项... } resource "null_resource" "apply_workgroup_endpoint_policy" { depends_on = [aws_redshiftserverless_workgroup.your_workgroup] provisioner "local-exec" { command = <<EOT aws redshift-serverless put-resource-policy \ --resource-arn ${aws_redshiftserverless_workgroup.your_workgroup.arn} \ --policy '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::123456789012:root"}, "Action": "redshift-serverless:CreateEndpointAccess", "Resource": "${aws_redshiftserverless_workgroup.your_workgroup.arn}" } ] }' EOT } }
注意:执行该配置的环境需要已配置AWS CLI,且当前身份拥有redshift-serverless:PutResourcePolicy权限。
配置完成后,可通过控制台或aws redshift-serverless get-resource-policy命令验证策略是否生效,目标账户即可创建指向该工作组的托管VPC终端节点。
内容的提问来源于stack exchange,提问作者nickklon
相关产品推荐
相关产品推荐

