JSON
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::my-bucket",
"Condition": {"IpAddress": {"aws:SourceIp": "1.2.3.4/32"}}
}
]
}
Sid (Statement ID): 문장의 식별자. 어떤 역할을 하는 문장인지 적어둔다.
Effect: 허용(Allow)할지 거부(Deny)할지 결정. (가장 중요)
Principal: 특정 정책을 적용할 계정이나 유저를 지정한다.
Action: 어떤 API 호출을 허용/거부할지 목록을 적는다. (ex: S3 읽기, EC2 중지 등)
Resource: 액션이 적용될 구체적인 리소스 목록이다.
Condition: 정책이 언제 적용될지 결정하는 조건이다. (ex: 특정 IP에서만 접속 가능)
기억할 점: Effect, Principal, Action, Resource는 필수 요소다.
Password Policy: 비밀번호 복잡도나 만료 기간을 설정한다.
MFA (다중 인증): 비밀번호 + 물리적 보안 장치 조합이다. 비밀번호가 털려도 물리 장치가 없으면 접속을 못 하니 보안성이 확 올라간다.
가상 MFA: Google Authenticator 같은 앱 사용. 폰 하나에 귀속됨.
U2F (물리적 보안 키): YubiKey 같은 전용 장치.
Hardware Key Fob: 하드웨어 보안 토큰 (TOTP 방식).
GovCloud용: 미국 정부용 클라우드 전용 장치.
Management Console: 웹 브라우저 접속 (ID/PW + MFA 방식).
AWS CLI: 터미널에서 명령어로 제어. Access Key가 필요하다.
AWS SDK: 코드 내에서 API를 호출할 때 사용. 역시 Access Key가 필요하다.
Access Key 관리 주의사항:
Access Key ID는 유저네임, Secret Access Key는 비밀번호와 같다.
절대 공유하면 안 되고, 특히 코드에 하드코딩해서 깃허브 같은 곳에 올리면 큰일 난다.
무료로 사용 가능한 터미널 개념이다.
내 계정의 자격 증명이 이미 적용되어 있어 aws iam list-users 같은 명령어가 바로 작동한다.
파일 저장소가 있어서 재시작해도 파일이 남아있는 게 큰 장점이다.
EC2나 Lambda 같은 서비스가 다른 AWS 리소스(S3 등)에 접근해야 할 때 Role을 만들어 부여한다.
실제 사람이 쓰는 게 아니므로 장기적인 비밀번호(Access Key)가 필요 없고, 임시 자격 증명을 사용해서 훨씬 안전하다.
대표적 예시: EC2 Instance Role, Lambda Function Role.
IAM Credentials Report: 계정 내 모든 유저의 자격 증명 상태(MFA 설정 여부 등)를 보고서로 뽑아준다. 계정 수준의 점검에 좋다.
IAM Access Advisor: 유저가 부여받은 권한 중 실제로 언제 마지막으로 사용했는지 보여준다. 안 쓰는 권한을 찾아내서 삭제하는 '최소 권한 원칙'을 지키기에 딱이다.
Root 계정은 초기 설정 후에는 절대 쓰지 말자.한 사람당 하나의 IAM 유저를 만들자.
유저에게 직접 권한을 주기보다 그룹에 유저를 넣고 그룹에 권한을 주자.
MFA는 나뿐만 아니라 다른 유저들에게도 강제하자.
Access Key는 꼭 필요할 때만 만들고 정기적으로 교체하자.