[SAA] 1. IAM 및 AWS CLI
1. IAM
사용자
- 사용자 생성 및 그룹 배치 -> 글로벌 서비스
- 루트 계정은 계정을 만들 때에만 사용되어야 함
- 그 후에는 루트 계정을 더 이상 사용하거나 공유하지 않아야 함
- 사용자를 만들기!
- 그룹을 만들어 사용자들을 묶을 수 있음
- 그룹 안에 그룹을 배치할 수는 없음
- 한 사용자가 다수의 그룹에 속할 수 있음
- 사용자와 그룹을 만드는 이유: AWS 서비스를 사용하기 위해 권한 부여
- 정책 이라고 부르는 JSON 문서를 지정할 수 있음
- 모든 사용자에게 모든 권한을 부여하지 않음!!
- 최소 권한의 원칙 적용
사용자 생성
- IAM 콘솔에서 생성
- 루트 계정을 사용하지 않기 위해 관리자 권한과 유사한 사용자를 만들 것
- AWS Management Console 접근 허용
- IAM USER를 만드는 것이 더 편리!
- Admin 그룹에 추가
- AdministratorAccess 정책 연결 (Admin 그룹에 의해 자동 생성)
- 이렇게 그룹을 통해 정책을 연결하는 것이 더 간편한 방법!
- account alias를 통해 로그인 URL을 간소화할 수 있음
- 웹 브라우저를 비공개 모드로 들어가면 창을 두 개 띄워 사용할 수 있음
- 참고
- 태그: 모든 서비스에 존재, 없어도 되지만 서비스에 메타데이터를 부여해줌!
IAM 정첵
- 그룹 레벨에서 정책을 적용하면
- 그룹의 모든 구성원에게 적용
- 정책의 상속이 가능
- 인라인 정책: 사용자에게만 연결 가능
- 정책 구조
- version number
- 정책 ID (Optional)
- Statement (Required)
- Sid: Statement 식별자 (숫자, Optional)
- Effect: Allow / Deny
- Principal: 특정 정책이 허용될 사용자/계정/역할
- Action: Effect에 기반해 허용 또는 거부될 API 호출 목록
- Resource: 적용될 Action의 리소스 목록
- Condition: Statement가 언제 적용될지 결정 (Optional)
{
"Version": "2012-10-17",
"Id": "S3-Account-Permissions",
"Statement": [
{
"Sid": "1",
"Effect": "Allow",
"Principal": {
"AWS": ["arn:aws:iam::123456789012:root"]
},
"Action": [
"s3:GetObject",
"s3:PutObject"
],
"Resource": ["arn:aws:s3:::mybucket/*"]
}
]
}
IAM MFA
- 사용자에게 Password Policy를 적용시킬 수 있음 (첫번째 방법)
- IAM > Account Settings > Edit password policy > IAM default / Custom
- MFA (Multi Factor Authentication) (두번째 방법, 필수 권장!!)
- 비밀번호 + 보안장치 함께 사용하는 것
- 계정명 > Security credentials (root user) > Assign MFA
- Virtual MFA device
- 종류
- Google Authenticator (Phone only)
- Authy (multi-device)
- 하나의 device에서 여러개의 토큰을 지원
- 루트, 사용자 등 원하는 수만큼 계정 및 사용자 등록이 가능 -> 편리!
- 종류
- U2F (Universal 2nd Factor) Security Key
- 종류
- YubiKey
- 물리적 장치
- 하나의 보안 키에서 여러 루트 계정과 사용자 지원 -> 하나의 키로도 충분
- 종류
- Hardware Key Fob MFA Device
- 종류
- Gemalto
- 종류
- Hardware Key Fob MFA Device for AWS GovCloud (US)
- 종류
- SurePassID
- 종류
IAM Roles for Services
- AWS 서비스에 권한을 부여
- 사용자와 같지만, 실제 사람이 사용하도록 만들어진 것이 아니라 AWS 서비스에 의해 사용되도록 만들어진 것
- ex) EC2 인스턴스를 만든다면 인스턴스는 AWS에서 어떤 작업을 수행하려 할 수 있음 -> 그러기 위해서는 EC2 인스턴스에 권한을 부여해야 함 -> IAM Role을 만들어 하나의 개체로 만듦 -> 인스턴스가 AWS의 어떤 정보에 접근하려고 할 때 IAM Role을 사용하게 됨
- 생성
- 권한을 받을 AWS 서비스 선택 (common: EC2, Lambda)
- 부여할 정책과 권한 선택
IAM Security Tolls
- IAM Credential Report
- 계정 레벨에서 생성 가능
- 계정에 있는 사용자와 다양한 자격증명의 상태 포함
- 생성
- IAM > Credential report > Download Report (csv)
- IAM Access Advisor
- 사용자 레벨에서 사용 가능
- 사용자에게 부여된 서비스의 권한과 해당서비스에 마지막으로 액세스한 시간 보여줌
- 최소권한 원칙에 도움
- 어떤 권한이 사용되지 않는지 확인 -> 권한 축소
- 생성
- IAM > Users > 유저 선택 > Acces Advisor
IAM Guidelines
- Root 계정은 AWS 계정을 설정할 때를 제외하고 사용하지 않기
- 새로운 사용자를 만들어 사용
- 사용자를 그룹에 넣어 해당 그룹에 권한을 부여하고, 그룹 단위로 권한을 관리할 수 있음
- 강력한 비밀번호 정책을 사용하기
- MFA 사용하기
- AWS 서비스를 사용할 때 Role을 만들어 사용하기
- CLI / SDK를 사용할 때 반드시 Access key를 만들어야 함
- 계정 권한을 감사할 때 IAM Credential Report와 IAM Access Advisor를 사용할 수 있음
2. AWS CLI
AWS access 방법
- AWS Management Console
- password + MFA
- AWS Command Line Interface (CLI)
- access keys
- AWS Software Developer Kit (SDK)
- AWS로부터 애플리케이션 코드 내에서 API를 호출하고자 할 때 사용되는 방식
- access keys
access keys
- AWS Console에서 생성
- 사용자가 직접 관리
-
절대 외부에 공유 X
- Access Key ID ~= username
- Secret Access Key ~= password
AWS CLI 설치
- Windows
- AWS CLI install on Windows 검색
- MSI Installer 이용
- Mac OS
- AWS CLI install on mac 검색
- pkg 파일 다운로드
- Linux
- AWS CLI install on Linux 검색
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
Access Key 발급
- IAM > username 선택 > security credentials > create access key
- 우선은 CLI 선택 (이후 cloudshell 이용)
-
Access key, Secret access key 확인
- CLI에서
aws configure
입력 후 access key, secret access key 입력- region, output format 입력 (선택)
aws iam list-users
- 내 계정의 모든 사용자 출력
- user id, arn, create date, password last used
- IAM 콘솔의 Users 탭에서 보는 것과 같음
- 내 계정의 모든 사용자 출력
- CLI 권한은 IAM 콘솔에서 얻는 권한과 완전히 같음!
- 현재 사용중인 사용자를 admin 그룹에서 제외하면
aws iam list-users
를 입력해도 리스트를 볼 수 없음
- 현재 사용중인 사용자를 admin 그룹에서 제외하면
CloudShell
- AWS 클라우드에서 사용 가능한 터미널 개념
- CLI를 사용할 때 자격증명을 따로 작성할 필요 없음 -> 바로 API 호출 가능
--region
: 로그인된 리전 출력- 전체 저장소가 있음
- 파일을 만들고 CloudShell을 재실행하면 파일이 남아있음
- Configuration 가능
- 파일 업로드, 다운로드 가능