IRSA 크로스 계정 인증 — EKS Pod의 다른 계정 Bedrock 접근
IRSA(IAM Roles for Service Accounts)는 EKS 파드에 액세스 키 없이 IAM 권한을 넘겨주는 방식이고, Bedrock 은 여러 LLM 을 API 하나로 호출하는 AWS 관리형 서비스입니다.
LLM 게이트웨이가 Bedrock 을 호출하는데 액세스 키를 환경변수로 들고 있었습니다. IRSA 로 바꾸는 작업이었는데, Bedrock 권한이 다른 계정에 있어서 역할이 두 개 필요했습니다.
두 역할의 서로 다른 임무
[ 운영 계정 ]
EKS Pod (litellm-sa)
│ ServiceAccount annotation → eks.amazonaws.com/role-arn
↓ IRSA (OIDC 토큰 자동 교환)
litellm-eks-role
│ 앱 설정의 aws_role_name → AssumeRole 호출
↓
[ GPU 전용 계정 ]
litellm-bedrock-access-role (실제 Bedrock 권한을 가진 쪽)
↓
AWS Bedrock API
eks.amazonaws.com/role-arn 은 파드가 먼저 얻는 역할이고 운영 계정에
있는데, 이것만으로는 Bedrock 을 못 씁니다. 실제 Bedrock 권한은 GPU 전용
계정의 aws_role_name — 그 자격증명으로 넘어갈 대상 역할 — 이 쥐고
있습니다.
하나는 진입 지점이고 하나는 목적지라, 둘을 같은 것으로 놓고 설정하면 안 맞습니다.
Trust Policy 도 양쪽에 걸어야 합니다.
| Role | 계정 | 설정 |
|---|---|---|
litellm-eks-role |
운영 | EKS OIDC trust + 대상 역할을 assume 할 수 있는 정책 |
litellm-bedrock-access-role |
GPU 전용 | Trust policy 에 운영 계정 역할 ARN 추가 |
액세스 키 제거
ServiceAccount 를 만들고 annotation 을 답니다.
serviceAccount:
create: true
name: "litellm-sa"
annotations:
eks.amazonaws.com/role-arn: "arn:aws:iam::111111111111:role/litellm-eks-role"
모델 설정에서 키를 빼고 대상 역할을 넣습니다. 모델이 여러 개면 전부 같은 방식으로 바꿔야 합니다.
# 제거
- aws_access_key_id: os.environ/AWS_BEDROCK_ACCESS_KEY_ID
- aws_secret_access_key: os.environ/AWS_BEDROCK_SECRET_ACCESS_KEY
# 추가
+ aws_role_name: arn:aws:iam::222222222222:role/litellm-bedrock-access-role
aws_region_name: us-east-1
S3 캐시 섹션에도 액세스 키가 들어 있어서 그 섹션은 통째로 걷어냈습니다. 키를 지우는 작업을 할 때는 설정 파일 전체를 훑어야 합니다. 한 군데만 지우면 나머지가 그대로 남습니다.
환경변수로 적용 확인
IRSA 가 붙으면 AWS SDK 가 쓰는 환경변수가 파드에 자동으로 주입됩니다.
kubectl exec -n litellm deploy/litellm -- env | grep AWS
이 둘이 있어야 정상입니다.
AWS_ROLE_ARN
AWS_WEB_IDENTITY_TOKEN_FILE
그리고 이 둘이 없어야 정상입니다.
AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
키가 남아 있으면 SDK 가 그쪽을 먼저 씁니다. IRSA 를 붙였는데도 예전 키로 동작하고 있을 수 있습니다. 있어야 할 것만 확인하지 말고 없어야 할 것도 같이 봐야 합니다.
댓글 0