The Agent Skills Directory
npx skills add https://smithery.ai/skills/motoki317/aws-ecosystemAWS CLI 配置、身份验证以及 Terraform AWS Provider 基础设施即代码的模式。
# ~/.aws/config
[default]
region = ap-northeast-1
output = json
[profile dev]
region = ap-northeast-1
# ~/.aws/credentials (prefer SSO over storing credentials)
[default]
aws_access_key_id = AKIA...
aws_secret_access_key = ...
AWS_PROFILE - 活动配置文件AWS_REGION / AWS_DEFAULT_REGION - 区域AWS_SESSION_TOKEN - 临时凭证export AWS_PROFILE=dev
# 或内联使用
aws s3 ls --profile prod
[profile sso-dev]
sso_session = my-sso
sso_account_id = 123456789012
sso_role_name = DeveloperAccess
region = ap-northeast-1
[sso-session my-sso]
sso_start_url = https://example.awsapps.com/start
sso_region = ap-northeast-1
aws sso login --sso-session my-sso
[profile cross-account]
role_arn = arn:aws:iam::987654321098:role/CrossAccountRole
source_profile = default
# .github/workflows/deploy.yml
permissions:
id-token: write
contents: read
steps:
- uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: arn:aws:iam::123456789012:role/GitHubActionsRole
aws-region: ap-northeast-1
aws sts get-caller-identity
aws s3 ls s3://bucket/prefix/
aws s3 cp file.txt s3://bucket/
aws s3 sync ./local s3://bucket/prefix/
aws s3 presign s3://bucket/key --expires-in 3600
aws ec2 describe-instances
aws ec2 start-instances --instance-ids i-123...
aws ec2 stop-instances --instance-ids i-123...
# 单个值
aws ec2 describe-instances --query 'Reservations[0].Instances[0].InstanceId' --output text
# 过滤列表
aws ec2 describe-instances --query 'Reservations[].Instances[?State.Name==`running`].InstanceId'
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
}
}
provider "aws" {
region = "ap-northeast-1"
default_tags {
tags = {
Environment = "dev"
ManagedBy = "terraform"
}
}
}
terraform {
backend "s3" {
bucket = "my-terraform-state"
key = "env/dev/terraform.tfstate"
region = "ap-northeast-1"
encrypt = true
dynamodb_table = "terraform-locks"
}
}
IAM 角色:
resource "aws_iam_role" "lambda" {
name = "lambda-execution-role"
assume_role_policy = jsonencode({
Version = "2012-10-17"
Statement = [{
Action = "sts:AssumeRole"
Effect = "Allow"
Principal = { Service = "lambda.amazonaws.com" }
}]
})
}
S3 存储桶:
resource "aws_s3_bucket" "main" {
bucket = "my-bucket"
}
resource "aws_s3_bucket_public_access_block" "main" {
bucket = aws_s3_bucket.main.id
block_public_acls = true
block_public_policy = true
ignore_public_acls = true
restrict_public_buckets = true
}
用于 GitHub Actions 的 OIDC:
resource "aws_iam_openid_connect_provider" "github" {
url = "https://token.actions.githubusercontent.com"
client_id_list = ["sts.amazonaws.com"]
thumbprint_list = ["ffffffffffffffffffffffffffffffffffffffff"]
}
terraform init
terraform plan -out=tfplan
terraform apply tfplan
terraform fmt -recursive
terraform validate
关键:
高优先级:
Terraform:
| 避免 | 替代方案 |
|---|---|
| 硬编码的凭证 | IAM 角色、SSO、credential_process |
| 长期访问密钥 | 通过 SSO/AssumeRole 获取临时凭证 |
| 使用根账户进行 CLI 操作 | IAM 用户或 SSO |
| 通配符权限 | 针对特定资源的最小权限 |
| 无锁定的状态 | 为 S3 后端使用 DynamoDB 表 |
必须:
避免:
库 ID:/hashicorp/terraform-provider-aws
每周安装次数
–
来源
首次出现
–
Patterns for AWS CLI configuration, authentication, and Terraform AWS Provider infrastructure as code.
# ~/.aws/config
[default]
region = ap-northeast-1
output = json
[profile dev]
region = ap-northeast-1
# ~/.aws/credentials (prefer SSO over storing credentials)
[default]
aws_access_key_id = AKIA...
aws_secret_access_key = ...
AWS_PROFILE - active profileAWS_REGION / AWS_DEFAULT_REGION - regionAWS_SESSION_TOKEN - temporary credentialsexport AWS_PROFILE=dev
# or inline
aws s3 ls --profile prod
广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
[profile sso-dev]
sso_session = my-sso
sso_account_id = 123456789012
sso_role_name = DeveloperAccess
region = ap-northeast-1
[sso-session my-sso]
sso_start_url = https://example.awsapps.com/start
sso_region = ap-northeast-1
aws sso login --sso-session my-sso
[profile cross-account]
role_arn = arn:aws:iam::987654321098:role/CrossAccountRole
source_profile = default
# .github/workflows/deploy.yml
permissions:
id-token: write
contents: read
steps:
- uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: arn:aws:iam::123456789012:role/GitHubActionsRole
aws-region: ap-northeast-1
aws sts get-caller-identity
aws s3 ls s3://bucket/prefix/
aws s3 cp file.txt s3://bucket/
aws s3 sync ./local s3://bucket/prefix/
aws s3 presign s3://bucket/key --expires-in 3600
aws ec2 describe-instances
aws ec2 start-instances --instance-ids i-123...
aws ec2 stop-instances --instance-ids i-123...
# Single value
aws ec2 describe-instances --query 'Reservations[0].Instances[0].InstanceId' --output text
# Filtered list
aws ec2 describe-instances --query 'Reservations[].Instances[?State.Name==`running`].InstanceId'
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
}
}
provider "aws" {
region = "ap-northeast-1"
default_tags {
tags = {
Environment = "dev"
ManagedBy = "terraform"
}
}
}
terraform {
backend "s3" {
bucket = "my-terraform-state"
key = "env/dev/terraform.tfstate"
region = "ap-northeast-1"
encrypt = true
dynamodb_table = "terraform-locks"
}
}
IAM Role:
resource "aws_iam_role" "lambda" {
name = "lambda-execution-role"
assume_role_policy = jsonencode({
Version = "2012-10-17"
Statement = [{
Action = "sts:AssumeRole"
Effect = "Allow"
Principal = { Service = "lambda.amazonaws.com" }
}]
})
}
S3 Bucket:
resource "aws_s3_bucket" "main" {
bucket = "my-bucket"
}
resource "aws_s3_bucket_public_access_block" "main" {
bucket = aws_s3_bucket.main.id
block_public_acls = true
block_public_policy = true
ignore_public_acls = true
restrict_public_buckets = true
}
OIDC for GitHub Actions:
resource "aws_iam_openid_connect_provider" "github" {
url = "https://token.actions.githubusercontent.com"
client_id_list = ["sts.amazonaws.com"]
thumbprint_list = ["ffffffffffffffffffffffffffffffffffffffff"]
}
terraform init
terraform plan -out=tfplan
terraform apply tfplan
terraform fmt -recursive
terraform validate
Critical:
High:
Terraform:
| Avoid | Instead |
|---|---|
| Hardcoded credentials | IAM roles, SSO, credential_process |
| Long-term access keys | Temporary credentials via SSO/AssumeRole |
| Root account for CLI | IAM users or SSO |
| Wildcard permissions | Least privilege with specific resources |
| State without locking | DynamoDB table for S3 backend |
Must:
Avoid:
Library ID: /hashicorp/terraform-provider-aws
Weekly Installs
–
Source
First Seen
–