在使用 Amazon Web Services(AWS)时,越来越多团队采用 SSO(Single Sign-On) 来统一身份管理,而不是使用长期的 Access Key。
与此同时,Terraform 作为 IaC(基础设施即代码)工具,也需要与 AWS SSO 集成,以实现安全、规范的资源管理。
1 AWS SSO 基础配置
1.1 启用 IAM Identity Center
- AWS Console → IAM Identity Center
- 点击 Enable
- Identity source 选择:
Identity Center directory(内置)(个人用户推荐)
不用接 AD / Okta
启用完成后你会看到:
Identity Center 启用成功
一个 SSO 登录 URL,比如https://d-xxxx.awsapps.com/start
1.2 创建 SSO 用户
- IAM Identity Center → Users
- Add user
- 填写:
Username(比如:example)
Email(必须能收邮件)
First / Last name
保存后:
AWS 会发一封 激活邮件
设置密码后,这就是你未来唯一的登录入口
1.3 创建 Permission Set(Terraform 专用)
创建 Permission Set
-
IAM Identity Center → Permission sets
-
Create permission set
-
然后从AWS managed policies里选择需要的权限
你可以先用较宽权限(后面再收紧):
- AmazonAPIGatewayAdministrator
- AmazonDynamoDBFullAccess
- AmazonDynamoDBFullAccess_v2
- AmazonEventBridgeFullAccess
- AmazonS3FullAccess
- AWSCertificateManagerFullAccess
- AWSLambda_FullAccess
- CloudWatchLogsFullAccess
- IAMFullAccess
-
设置名字,比如
TerraformPowerUser,Session duration按默认设置保持1h即可,你也可以按需修改,超过这个时间你的token就会过期,需要重新登录。
1.4 把 Permission Set 分配给 AWS 账号 + 用户
IAM Identity Center → AWS accounts
选择你的 AWS 账号
Assign users or groups
选择:
User:example
Permission set:TerraformPowerUser
完成后,AWS 会:
自动创建一个 IAM Role(名字类似)
AWSReservedSSO_TerraformPowerUser_xxxxx
1.5 验证 Console 登录
打开 SSO 登录 URL,https://d-xxxx.awsapps.com/start
输入第一步中创建的用户名和密码,进入 AWS Console。
如果能正常进 Console,说明权限链路已经 OK。
2 配置Terraform
2.1 本地配置 AWS CLI SSO
bash
aws configure sso
填写:
bash
SSO session name (Recommended): sso-terraform
SSO start URL [None]: https://xxxx.awsapps.com/start
SSO region [None]: us-east-1
SSO registration scopes [sso:account:access]:
输入后会跳转浏览器登录。
2.2 创建tfstate bucket
手动到aws console对应region创建一个专门存放Terraform state文件的bucket,比如tf-state-example
2.2 Terraform provider 和backend配置
配置好对应的profile,以及
bash
provider "aws" {
region = "us-east-1"
profile = "sso-terraform"
}
terraform {
backend "s3" {
bucket = "tf-state-example"
key = "example/terraform.tfstate"
region = "us-east-1"
profile = "sso-terraform"
use_lockfile = true
encrypt = true
}
}
3 登录和初始化terraform
以上都配置好后,就可以login获取临时token了,
bash
aws sso login --profile sso-terraform
执行命令后会跳转至浏览器,输入第一步配置的用户名和账号,aws还会提示设置MFA,提高完全系数。
鉴权成功后,就可以执行terraform init和terraform plan来初始化和管理你的aws资源了。
4 权限管理架构
bash
IAM Identity Center
└── User(你)
└── PermissionSet(TerraformPowerUser)
└── IAM Role(自动)
└── Terraform(STS 临时凭证)
└── S3 + DynamoDB backend