2.1 Set Up Access¶
Configure the accounts, credentials, and access controls needed before provisioning infrastructure. Select your deployment model below.
AWS Account Requirements¶
You need an AWS account with permissions to create the following resource types:
- EC2: instances, security groups, EBS volumes, AMIs, snapshots, Elastic IPs
- VPC: VPCs, subnets, internet gateways, NAT gateways, route tables
- ELB: Network Load Balancers, target groups, listeners
- IAM: roles, instance profiles, policies
- S3: buckets (for Talos AMI pipeline)
IAM Configuration¶
The Terraform project creates an IAM role and instance profile for the Talos EC2 nodes. This is defined in the IAM module at terraform/modules/aws/iam/:
- Role name: Configurable via
role_namevariable (default:talos-node-role) - Trust policy: Allows
ec2.amazonaws.comto assume the role - Instance profile:
<role_name>-profile, attached to all EC2 instances - SSM policy (optional): When
enable_ssm = true, theAmazonSSMManagedInstanceCoremanaged policy is attached - CCM policy (optional): When
enable_ccm = true, attaches the AWS Cloud Controller Manager policy - LB Controller policy (optional): When
enable_lb_controller = true, attaches the AWS Load Balancer Controller policy
Note
Talos Linux is managed via talosctl over the Talos API (port 50000), not SSH. SSM is generally not needed and is disabled by default.
Admin Access Control¶
External access to the Kubernetes API (port 6443) and Talos API (port 50000) is controlled by allowed_admin_cidrs in variables.tf:
[](default) — only VPC-internal access is permitted- Specific CIDRs (e.g.
["196.45.28.20/32"]) — restricts external access to specific IPs or ranges
When set, additional security group ingress rules are created on the control plane security group to allow traffic from the specified CIDRs to ports 6443 and 50000.
# In aws.tfvars
# Replace with your public IP: curl -s ifconfig.me
allowed_admin_cidrs = [
"196.45.28.20/32",
]
AWS CLI Profile¶
Configure the AWS CLI profile that Terraform will use for authentication:
Then set it in your .tfvars file:
When aws_profile is null, the AWS provider falls back to environment variables (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY) or the instance role.
Bootstrap IAM (AMI Pipeline)¶
A separate bootstrap process creates an additional IAM role specifically for the Talos AMI build pipeline:
- Role name:
vmimport - Trust policy: Allows
vmie.amazonaws.com(EC2 VM Import/Export service) to assume the role - Permissions:
- S3:
GetBucketLocation,GetObject,ListBucketon the Talos image bucket - EC2:
ModifySnapshotAttribute,CopySnapshot,RegisterImage,Describe*
- S3:
This role is required by aws ec2 import-snapshot to convert uploaded disk images into EBS snapshots.
Access Requirements¶
| Access Type | Purpose | When Needed |
|---|---|---|
| IPMI/BMC | Power control, BIOS configuration, serial console | Server setup and troubleshooting |
| Network switch | VLAN configuration, port settings | Initial network setup |
| Talos API (port 50000) | Node management after Talos is installed | Ongoing operations |
| Physical | Racking, cabling, USB boot media | Initial deployment |
IPMI/BMC Credentials¶
Each server has an out-of-band management interface (IPMI, iDRAC, iLO, or similar) that allows remote power control, BIOS access, and serial-over-LAN console.
- Set BMC IP addresses — typically on a dedicated management VLAN (e.g., 192.168.10.0/24)
- Configure BMC credentials — change default passwords on all servers
- Verify access from your workstation:
# Test IPMI connectivity
ipmitool -I lanplus -H <bmc-ip> -U <username> -P <password> chassis status
# Power on a server
ipmitool -I lanplus -H <bmc-ip> -U <username> -P <password> chassis power on
SSH Keys¶
SSH is used for managing network switches and PXE servers before Talos is installed. After Talos is running, all node management is via talosctl — Talos does not run an SSH server.
# Generate an SSH key pair (if you don't have one)
ssh-keygen -t ed25519 -C "rciis-admin"
# Copy to your PXE server or network switches
ssh-copy-id admin@<switch-ip>
Network Switch Access¶
If you are managing VLANs on your switches, ensure you have console or SSH access to configure:
- VLAN creation and port assignments
- Trunk ports between switches
- Access ports for server NICs
Admin Access Control¶
| Role | IPMI Access | Switch Access | talosctl Access |
|---|---|---|---|
| Infrastructure admin | Yes | Yes | Yes |
| Kubernetes admin | No | No | Yes |
| Application team | No | No | No (kubectl only) |
Note
Once Talos is installed, the only way to manage nodes is via talosctl over port 50000. There is no SSH, no shell, and no way to log into the OS directly. This is a security feature of Talos Linux.
Access Requirements¶
| Access Type | Purpose | When Needed |
|---|---|---|
| Proxmox API | Terraform provider authentication | VM provisioning |
| Proxmox Web UI | Template creation, monitoring | Setup and debugging |
| SSH to Proxmox node | Disk import, template operations | Terraform provider requirement |
| Talos API (port 50000) | Node management after deployment | Ongoing operations |
Proxmox API Token¶
The Terraform project authenticates to Proxmox using an API token in the format USER@REALM!TOKENID=SECRET.
Create a token via the Proxmox web UI or CLI:
The --privsep 0 flag gives the token the same permissions as the user. The output will include the token secret — save it securely.
Warning
Do not store the API token directly in .tfvars files that are committed to Git. Use an environment variable instead:
SSH Access to Proxmox Node¶
The bpg/proxmox Terraform provider requires SSH access to the Proxmox node for disk import and template operations. The provider configuration in main.tf uses SSH agent forwarding:
provider "proxmox" {
endpoint = var.proxmox_endpoint
api_token = var.proxmox_api_token
insecure = var.proxmox_insecure
ssh {
agent = true
username = var.proxmox_ssh_username # default: "root"
}
}
Ensure your SSH agent is running and has a key that can access the Proxmox node:
Proxmox Web UI¶
Access the Proxmox management interface at https://<proxmox-host>:8006. This is used for:
- Creating and managing VM templates
- Monitoring VM status and resource usage
- Configuring storage pools, networking, and firewall rules
Storage Pool Permissions¶
The Terraform project uses the local-lvm storage pool by default (configurable via storage_pool variable). Ensure the API token has permissions to:
- Create and delete VM disks on the storage pool
- Import disk images (for template creation)
- Clone VMs from templates
Admin Access Control¶
| Role | Proxmox API | Proxmox SSH | talosctl Access |
|---|---|---|---|
| Infrastructure admin | Yes (API token) | Yes | Yes |
| Kubernetes admin | No | No | Yes |
| Application team | No | No | No (kubectl only) |