AWS/Project

[Terraform] TroubleShooting

jih0ssang 2024. 6. 22. 16:38

MFA 정책으로 인한 배포 불가

Error

UnauthorizedOperation - SCP 권한 없음

 

Cause

리소스에 접근하기 전 Organizations SCP 정책인 MFA 인증을 받아야 하나, sts 토큰 인증을 받지 못하여 발생하는 문제

 

Solve

토큰을 받아 설정하는 방식이 2 가지 (수동과 자동) 있다.

필자는 자동을 권고한다. 이 글은 자동으로 쉘 스크립트를 작성하여 토큰을 받아 설정하였다.

물론 토큰은 12시간동안만 유효하다.

 

(수동)

aws cli로 sts session token 발급하여 환경 변수 또는 aws configure에 등록 후 provider에 경로 지정

aws sts get-session-token --profile default --serial-number ${mfa_arn} --token-code {mfa_token_code}

 

 

현재 사용 중인 IAM 사용자/역할 확인
$ aws sts get-caller-identity

 

명령어 예시

aws sts get-session-token --profile default --serial-number arn:aws:iam::123456789:mfa/jiho --token-code 197692

 

 

(자동)

자동으로 환경 변수로 sts 값을 설정해주는 쉘 스크립트를 작성

 

1. 쉘 스크립트 작성 

 

test.ps1

# AWS CLI를 사용하여 STS get-session-token 명령어 실행
$region = "ap-northeast-2"
$mfaSerialNumber = "arn:aws:iam::123456789:mfa/jiho"
# 세션 유지 시간 설정 (최대 12시간 = 43200초)
$durationSeconds = 43200

# MFA 토큰 코드 입력 받기
$mfaTokenCode = Read-Host "Enter your MFA token code"

$sessionTokenOutput = aws sts get-session-token --serial-number $mfaSerialNumber --token-code $mfaTokenCode --duration-seconds $durationSeconds --region $region

# JSON 형식의 결과를 파싱하여 객체로 변환
$jsonObject = $sessionTokenOutput|ConvertFrom-Json 

# 필요한 인증 정보를 가져옴
$AccessKeyId = $jsonObject.Credentials.AccessKeyId
$SecretAccessKey = $jsonObject.Credentials.SecretAccessKey
$SessionToken = $jsonObject.Credentials.SessionToken

# 중간값 출력
Write-Host "AccessKeyId: $AccessKeyId"
Write-Host "SecretAccessKey: $SecretAccessKey"
Write-Host "SessionToken: $SessionToken"

# 환경 변수로 등록
$env:AWS_ACCESS_KEY_ID = $AccessKeyId
$env:AWS_SECRET_ACCESS_KEY = $SecretAccessKey
$env:AWS_SESSION_TOKEN = $SessionToken

if ($env:AWS_ACCESS_KEY_ID -and $env:AWS_SECRET_ACCESS_KEY -and $env:AWS_SESSION_TOKEN) {
    Write-Host "AWS authentication key has been successfully registered as environment variables."
} else {
    Write-Host "There was an issue registering AWS authentication key as environment variables." -ForegroundColor Red
}

내 MFA 기기 이름을 mfaSerialNumber 변수로 설정해준다. 나머지는 그대로 둔다.

위의 쉘 스크립트는 토큰 인증을 받은 후 ENV 환경변수로 access key, secret key, session token 3개를 자동 등록하는 내용이다. 

 

2. 쉘 스크립트 실행

MFA token은 내 휴대폰 등록된 기기로 확인하여 입력하면 된다.

 

 

Result

 

배포 성공!

 

 


EKS Cluster ipv4 cidr 대역 잘못 설정

Error

EKs cluster ipv4 cidr 대역이 타당하지 않음.

 

Cause

  • EKS Cluster CIDR 대역을 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 (RFC 1918 대역)으로 할당하지 않음
  • EKS Cluster CIDR 대역은 VPC 대역(10.50.0.0/16)과 겹쳐서는 안됨

 

Solve

EKS Cluster CIDR 대역을 192.168.0.0/16으로 수정 후 배포하였더니 배포 성공!

 


Error

 

Cause

 

Solve


Error

 

Cause

 

Solve


Error

 

Cause

 

Solve


Error

 

Cause

 

Solve