전역으로 제공되는 서비스로, 사용자의 인증과 권한을 관리한다.
전역 서비스이기 때문에 Console의 우측 상단의 Region이 표시되는 부분에 Global로 표시된다.
기본적으로 AWS에 가입할 때 root 계정이 생성이 되고, 이 root 계정을 공유하면 절대 안된다.
root 계정을 이용하기 위해 IAM을 이용하여 User를 생성해야 한다.
실제 사용자 1명 당 1개의 IAM User를 생성한다. (1 대 1로 매핑됨)
Group은 User들을 묶는 역할을 한다. (Grouping)
예를 들어 개발자 1
, 개발자 2
, 개발자 3
이 각각 하나의 User 이고, 개발자 Group
에 이 User들을 넣을 수 있다.
주의해야 할 점은 Group안에 다른 Group을 넣을 수는 없다. 또한, 하나의 User는 여러 Group에 속할 수 있다.
User는 필수적으로 Group에 있지 않아도 되지만 권장되지 않는다.
AWS의 서비스에 부여하는 권한이다.
어떤 서비스는 사용자가 따로 조작하지 않아도 특정 action을 취애야 하는데, 그 때 action 수행을 위해 필요한 것이 Role이다.
Role을 주로 생성해야 하는 AWS 서비스에는 EC2, Lambda, CloudFormation 등이 있다.
User, Group, Role 의 권한은 JSON 형태의 문서인 Policy로 지정할 수 있다.
모든 권한을 열어놓게 되면 각 사용자가 실수이건 아니건 AWS 리소스를 무분별하게 생성하여 많은 비용이 발생할 수 있는 위험이 있기 때문에 최소한의 권한(least privilege)을 주는 것을 원칙으로 한다.
즉, 기본적으로는 아무것도 할 수 없는 상태이고 필요한 권한을 그때 그때 부여한다.
Policy는 AWS에서 제공되는 것도 있지만, 사용자가 직접 생성할 수도 있다.
AWS에서는 아래와 같이 비밀번호 정책을 상세하게 설정할 수 있다.
가장 강력하게 계정을 보호할 수 있는 방법은 MFA이다.
MFA는 비밀번호 이외에 개인 디바이스를 통한 인증을 통해 보안을 더 강화시킨다.
아래와 같이 다양한 방법을 통해 MFA 인증을 할 수 있다.
하나만 설정해서 하는게 아니라 여러개의 MFA를 가질 수 있다.
AWS CLI나 AWS SDK 를 사용할 때 필요한 key이다.
생성 시 주의해야 할 점은 생성 후에 딱 한번밖에 볼 수 없어 해당 페이지에서 Access Key를 꼭 저장해야 한다.
Access Key는 비밀번호와 같아서 절대 다른 사람과 공유해서는 안된다.
Access Key ID
= User name
Secret Access Key
= Password
라고 보면 된다.
콘솔의 My security credentials
링크로 들어가 생성할 수 있다.
Security Tool인 Credential report와 Access Advisor를 통해 IAM 의 권한을 관리한다.
AWS 계정의 모든 User와 각 User들의 Credential들을 조회할 수 있다.
User에게 부여한 서비스 권한과, 마지막으로 해당 서비스에 Access한 정보를 볼 수 있다.
이를 통해 사용되지 않는 권한을 파악할 수 있어 필요하지 않은 권한들을 제거할 수 있어 최소한의 원칙을 적용하는 데 도움을 준다.
일반적으로 AWS 홈페이지의 사용자 콘솔에 접속하는 방법으로, 비밀번호와 MFA 설정을 했다면 MFA 인증이 필요하다.
먼저 AWS CLI 설치가 필요하다.
AWS CLI 2는 AWS CLI 1의 기능을 지원하면서 성능과 사용자 경험 측면에서 개선된 버전이어서 AWS CLI 2를 사용하는 것이 권장된다.
OS 에 따른 설치 방법 참고
https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html
나의 경우 Mac OS를 사용하고 있어 terminal을 사용하여 아래 명령어 입력으로 쉽게 설치할 수 있었다.
curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg"
sudo installer -pkg ./AWSCLIV2.pkg -target /
설치가 완료되고 나면 AWS CLI의 설치 경로와 버전을 확인한다.
which aws
/usr/local/bin/aws
aws --version
aws-cli/2.10.0 Python/3.11.2 Darwin/18.7.0 botocore/2.4.5
AWS CLI를 사용하려고 하면 CloudShell 사용이 권장되고 있는데, 현재는 특정 Region에서만 사용이 가능하다. Console의 우측 상단의 터미널 모양 아이콘을 클릭하면 사용이 가능하다.
CloudShell 에서 생성한 파일을 다운로드하거나 업로드하는 기능이 있어 유용하다. (Action 콤보박스를 통해 해당 기능 사용가능하다.)
서울 Region은 아직 CloudShell이 지원되지 않아 위와 같이 안내문이 뜨고 임의로 다른 Region으로 변경되어 실행된다.
AWS CLI 와 마찬가지고 AWS 서비스에 접근할 수 있도록 해주는 라이브러리이다.
프로그래밍적으로 AWS 리소스에 접근할 수 있다. (코드를 통한 접근)
사용자의 application에 embed되는 형태이다.
거의 모든 언어를 지원한다. (C++, Java, Go, Javascript, Kotlin, .NET, Node.js, PHP, Python, Ruby, Swift, Rust)
SDK 언어지원 참고
https://aws.amazon.com/ko/developer/tools/
User
: 실제 사용자와 매핑되는 계정 (1명당 1개의 IAM User)
Group
: User를 그룹핑한다. User만 넣을 수 있다. (Group X)
Policy
: User, Group, Role 에 적용하는 권한을 나타내는 JSON 문서
Role
: AWS 서비스에 적용하는 권한
Security
: MFA, Password Policy, Access keys
AWS CLI
: 명령어(커맨드라인)을 사용하여 AWS 서비스를 관리한다.
AWS SDK
: 프로그래밍 언어로 AWS 서비스를 관리한다.
Access Keys
: CLI나 SDK를 사용할 때 필요한 Key
Audit
: Credential Report, Access Advisor