클라우드 ID: IAM 역할과 서비스 계정
클라우드 플랫폼에서 최소 권한 IAM 역할과 서비스 계정을 구성하고 와일드카드 권한 및 장기 유효 키와 같은 일반적인 실수를 피합니다.
클라우드 ID: IAM 역할과 서비스 계정은(는) CoddyKit의 무료 Security+ Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Security+ Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Security+ Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
클라우드 자격 증명 관리 기초
클라우드 환경에서는 자격 증명이 새로운 경계입니다. VM 시작, 데이터베이스 읽기, API 호출 등 모든 Action은 호출자의 자격 증명을 기반으로 승인됩니다. 클라우드 IAM(Identity and Access Management) 시스템은 어떤 누가 어떤 무엇을 어떤 Resource에 대해 수행할 수 있는지 정의합니다. 네트워크 위치가 암묵적인 신뢰를 제공했던 온프레미스 환경과 달리, 클라우드 IAM은 요청이 어디에서 시작되었는지와 관계없이 모든 요청에 명시적인 승인이 필요하다고 간주합니다.
AWS IAM의 사용자, 그룹 및 역할
AWS IAM에는 세 가지 주요 자격 증명 유형이 있습니다. IAM Users는 장기 자격 증명(access key + secret key)을 사용하는 개별 사용자 또는 애플리케이션을 나타냅니다. IAM Groups는 사용자를 묶고 공통 권한을 할당합니다. IAM Roles는 사용자가 AssumeRole하거나 AWS 서비스(EC2, Lambda) 또는 다른 계정이 AssumeRole할 수 있는 임시 자격 증명을 가진 자격 증명입니다. 역할은 자격 증명이 자동으로 만료되어 자격 증명 노출 위험을 줄이므로 장기 access key보다 선호됩니다.
# IAM role trust policy — allows EC2 to assume this role
{
'Version': '2012-10-17',
'Statement': [{
'Effect': 'Allow',
'Principal': { 'Service': 'ec2.amazonaws.com' },
'Action': 'sts:AssumeRole'
}]
}
# EC2 instance with this role attached can call AWS APIs
# using temporary credentials from the instance metadata serviceIAM policy에서의 최소 권한
IAM policy는 자격 증명이 어떤 Resource에 대해 어떤 Action을 수행할 수 있는지 정의합니다. 최소 권한 원칙은 policy가 작업에 필요한 구체적인 Action만 허용하도록 요구합니다. 일반적인 위반 사례로 Action에 * 와일드카드를 사용하여 서비스의 모든 Action을 허용하는 경우, Resource에 *를 사용하여 모든 Resource에 대한 access를 허용하는 경우, 서비스 계정에 AdministratorAccess와 같이 지나치게 광범위한 관리형 policy를 연결하는 경우가 있습니다. 모든 와일드카드는 사용 근거를 명확히 하고 정기적으로 검토해야 합니다.
# Overly permissive policy (AVOID)
{
'Effect': 'Allow',
'Action': 's3:*', # all S3 actions
'Resource': '*' # all buckets
}
# Least-privilege policy (PREFERRED)
{
'Effect': 'Allow',
'Action': ['s3:GetObject', 's3:ListBucket'],
'Resource': [
'arn:aws:s3:::my-specific-bucket',
'arn:aws:s3:::my-specific-bucket/*'
]
}GCP의 서비스 계정
Google Cloud Platform (GCP)에서는 사람이 아닌 워크로드가 서비스 계정을 사용해 인증합니다. 서비스 계정은 JSON 키 파일 또는 Workload Identity Federation을 사용하는 관리형 ID 엔터티입니다. 각 서비스 계정에는 최소 권한 원칙을 적용해야 하며, 호출해야 하는 GCP 서비스에만 연결해야 합니다. 서비스 계정 키(콘솔에서 다운로드한 JSON 파일)는 장기간 유효한 자격 증명이므로 비밀번호와 같이 취급해야 합니다. 즉, 정기적으로 교체하고 소스 코드에 커밋하거나 공개 저장소에 업로드해서는 안 됩니다.
# Check service account permissions (gcloud)
gcloud projects get-iam-policy my-project \
--flatten='bindings[].members' \
--format='table(bindings.role, bindings.members)' \
--filter='bindings.members:serviceAccount'
# Prefer Workload Identity over service account keys
# (no downloadable key files — uses workload federation tokens)Azure 관리형 ID
Azure 관리형 ID(이전 명칭 MSI)는 서비스용 AWS IAM 역할에 해당하는 Azure 기능입니다. 이를 사용하면 Azure 리소스(VM, App Services, Functions)가 자격 증명을 저장하지 않고 Azure API에 인증할 수 있습니다. 유형은 두 가지입니다. 시스템 할당 관리형 ID는 특정 리소스에 연결되며 해당 리소스가 삭제되면 함께 삭제됩니다. 사용자 할당 관리형 ID는 여러 리소스에서 공유할 수 있는 독립적인 객체입니다. 관리형 ID를 사용하면 키나 비밀을 저장할 필요가 없습니다.
# Azure CLI — assign managed identity to a VM
az vm identity assign \
--name myVM \
--resource-group myRG \
--identities /subscriptions/.../userAssignedIdentities/myIdentity
# The VM can now call Azure Key Vault without any stored credentials:
# Token is fetched automatically from the Instance Metadata Service장기간 유효한 자격 증명: 위험성
장기간 유효한 자격 증명은 만료되지 않는 정적 액세스 키, API 토큰, 서비스 계정 키 파일을 의미하며, 클라우드 환경에서 가장 위험도가 높은 요소 중 하나입니다. 이러한 자격 증명이 GitHub, S3 버킷, 로그 또는 침해된 개발자 노트북을 통해 유출되면 수동으로 폐기할 때까지 즉시 액세스 권한을 부여합니다. 조직은 장기간 유효한 자격 증명을 모두 감사하고, 일정에 따라 교체하며, 단기간 유효한 토큰을 생성하는 역할 기반 또는 페더레이션 액세스를 우선 사용해야 합니다. 또한 공개 저장소에 자격 증명이 나타나면 즉시 경고해야 합니다.
# Find IAM access keys older than 90 days (AWS)
aws iam generate-credential-report
aws iam get-credential-report --query 'Content' --output text | \
base64 -d | grep -v 'N/A' | \
awk -F',' '$10 > 90 {print $1, $10}'
# Keys older than 90 days should be rotated or deletedIAM 역할 연쇄와 권한 상승
IAM 권한 상승은 ID가 여러 권한을 조합해 자신에게 추가 권한을 부여할 때 발생합니다. 대표적인 상승 경로로는 자신의 사용자에게 더 많은 권한을 허용하는 정책 연결, 상승된 권한을 가진 새 IAM 사용자 생성, 서비스에 역할 전달(iam:PassRole), Lambda 함수의 실행 역할 업데이트가 있습니다. AWS의 IAM Access Analyzer는 이러한 패턴을 탐지할 수 있으며, IAM 권한 경계는 어떤 ID에 부여할 수 있는 최대 권한을 엄격하게 제한할 수 있습니다.
# Dangerous permission combination (enables privilege escalation):
# iam:CreatePolicyVersion + iam:SetDefaultPolicyVersion
# Attacker can create a new policy version with AdministratorAccess
# Or: iam:PassRole + lambda:CreateFunction + lambda:InvokeFunction
# Attacker creates Lambda with a privileged role, invokes it
# Defense: permission boundaries limit maximum grantable permissions계정 간 역할 수임
클라우드 조직은 공격 영향 범위를 제한하기 위해 여러 계정(dev, staging, prod, security)을 사용하는 경우가 많습니다. 계정 간 역할 수임을 사용하면 한 계정의 ID가 다른 계정의 역할을 수임할 수 있어 중앙 집중식 도구가 여러 계정에서 작업할 수 있습니다. 보안 제어 방법으로는 혼동된 대리인 공격을 방지하기 위해 신뢰 정책에서 External ID를 요구하고, Principal ARN을 통해 역할을 수임할 수 있는 계정을 제한하며, 감사 목적으로 모든 계정 간 역할 수임을 CloudTrail에 기록하는 것이 있습니다.
# Trust policy with External ID (confused deputy protection)
{
'Effect': 'Allow',
'Principal': { 'AWS': 'arn:aws:iam::PARTNER-ACCOUNT-ID:root' },
'Action': 'sts:AssumeRole',
'Condition': {
'StringEquals': {
'sts:ExternalId': 'unique-shared-secret-12345'
}
}
}IMDS와 메타데이터 서비스 보안
AWS EC2 인스턴스는 http://169.254.169.254의 인스턴스 메타데이터 서비스(IMDS)에서 IAM 역할 자격 증명을 가져올 수 있습니다. 여기서는 SSRF 취약점 유형이 특히 위험합니다. 애플리케이션이 SSRF에 취약하면 Attacker가 서버에 IMDS URL에서 데이터를 가져오도록 하여 인스턴스의 IAM 역할 자격 증명을 빼낼 수 있습니다. 세션 토큰을 요구하는 IMDSv2는 SSRF 기반 자격 증명 탈취를 완화하므로 모든 EC2 인스턴스에서 적용해야 합니다.
# Enforce IMDSv2 on a new EC2 instance (requires token for IMDS)
aws ec2 run-instances \
--metadata-options 'HttpTokens=required,HttpEndpoint=enabled' \
...
# IMDSv1 (insecure) just needs a GET request:
# curl http://169.254.169.254/latest/meta-data/iam/security-credentials/
# IMDSv2 requires a PUT to get a session token firstIAM Access Analyzer와 정책 검토
IAM Access Analyzer(AWS)는 외부 주체와 공유된 리소스 및 의도한 범위를 초과하는 권한을 부여하는 IAM 정책을 자동으로 식별합니다. 버킷 정책, 역할 신뢰 정책, KMS 키 정책을 분석하여 명시적으로 의도하지 않은 외부 액세스를 표시합니다. 수동으로 수행하든 Cloudsplaining, PMapper, Permissions Boundary Analyzer와 같은 도구를 사용하든, 정기적인 IAM 정책 검토는 Attacker가 권한 상승 경로를 찾기 전에 이를 식별하는 데 필수적입니다.
워크로드 ID 페더레이션
Workload Identity Federation을 사용하면 외부 워크로드(GitHub Actions, 온프레미스 시스템, 다른 클라우드 제공업체)가 장기간 유효한 서비스 계정 키 대신 단기간 유효한 OIDC 토큰으로 클라우드 IAM에 인증할 수 있습니다. GitHub Actions 워크플로는 작업이 실행되는 동안 OIDC 토큰을 사용해 AWS IAM 역할을 수임한 다음 토큰을 만료시킬 수 있습니다. 이 방식은 CI/CD 파이프라인에서 장기간 유효한 자격 증명이 유출되는 위험을 근본적으로 제거합니다.
빠른 확인
이 lesson에서 다룬 CompTIA Security+ (SY0-701) 개념에 대한 이해도를 확인해 보십시오.
lesson 요약
이 lesson에서는 다음을 학습했습니다. IAM 역할은 임시 자격 증명을 제공하므로 클라우드 워크로드에는 장기간 유효한 액세스 키보다 우선 사용해야 합니다. 최소 권한 정책은 와일드카드를 피하고 특정 리소스에 대한 특정 작업만 허용해야 합니다. 또한 IMDSv2, 권한 경계, 워크로드 ID 페더레이션은 일반적인 자격 증명 노출 경로를 제거합니다. 다음에서는 Cloud Security Posture Management (CSPM)를 살펴봅니다.
AI 튜터와 함께 Security+ Academy을(를) 배우세요 — 무료
브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.
- 코스
- 30
- 레슨
- 120
자주 묻는 질문
“클라우드 ID: IAM 역할과 서비스 계정” 강의는 무료인가요?
네 — “클라우드 ID: IAM 역할과 서비스 계정” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Security+ Academy 강의 전체를 잠금 해제할 수 있습니다. Security+ Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“클라우드 ID: IAM 역할과 서비스 계정”에서 뭘 배우나요?
클라우드 플랫폼에서 최소 권한 IAM 역할과 서비스 계정을 구성하고 와일드카드 권한 및 장기 유효 키와 같은 일반적인 실수를 피합니다. 브라우저에서 직접 실행하는 실습 코드로 Security+ Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Security+ Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Security+ Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“클라우드 ID: IAM 역할과 서비스 계정” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Security+ Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Security+ Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 공동 책임 모델: IaaS, PaaS, SaaS
- 클라우드 저장소 보안과 데이터 노출 위험
- 클라우드 ID: IAM 역할과 서비스 계정
- 클라우드 보안 상태 관리(CSPM)