AWS IAM (Identity and Access Management)

ohyujeong·2023년 5월 23일
0

AWS

목록 보기
2/4
post-thumbnail

IAM

전역으로 제공되는 서비스로, 사용자의 인증과 권한을 관리한다.
전역 서비스이기 때문에 Console의 우측 상단의 Region이 표시되는 부분에 Global로 표시된다.
기본적으로 AWS에 가입할 때 root 계정이 생성이 되고, 이 root 계정을 공유하면 절대 안된다.
root 계정을 이용하기 위해 IAM을 이용하여 User를 생성해야 한다.

User


실제 사용자 1명 당 1개의 IAM User를 생성한다. (1 대 1로 매핑됨)

Group

Group은 User들을 묶는 역할을 한다. (Grouping)
예를 들어 개발자 1 , 개발자 2 , 개발자 3 이 각각 하나의 User 이고, 개발자 Group 에 이 User들을 넣을 수 있다.

주의해야 할 점은 Group안에 다른 Group을 넣을 수는 없다. 또한, 하나의 User는 여러 Group에 속할 수 있다.
User는 필수적으로 Group에 있지 않아도 되지만 권장되지 않는다.

Role

AWS의 서비스에 부여하는 권한이다.
어떤 서비스는 사용자가 따로 조작하지 않아도 특정 action을 취애야 하는데, 그 때 action 수행을 위해 필요한 것이 Role이다.

Role을 주로 생성해야 하는 AWS 서비스에는 EC2, Lambda, CloudFormation 등이 있다.

Policy

User, Group, Role 의 권한은 JSON 형태의 문서인 Policy로 지정할 수 있다.
모든 권한을 열어놓게 되면 각 사용자가 실수이건 아니건 AWS 리소스를 무분별하게 생성하여 많은 비용이 발생할 수 있는 위험이 있기 때문에 최소한의 권한(least privilege)을 주는 것을 원칙으로 한다.
즉, 기본적으로는 아무것도 할 수 없는 상태이고 필요한 권한을 그때 그때 부여한다.

Policy 적용

  • Group에 정책을 적용하면 해당 Group에 속해있는 User들은 그 권한을 상속받는다.
  • User에 직접 정책을 적용할 수도 있다. 이 경우 User에 적용한 정책이 최우선적으로 적용된다.

Policy는 AWS에서 제공되는 것도 있지만, 사용자가 직접 생성할 수도 있다.

Password Policy

AWS에서는 아래와 같이 비밀번호 정책을 상세하게 설정할 수 있다.

  • 대문자, 숫자 등등을 포함할 것인지
  • 일정 주기로 비밀번호를 변경할 것을 강제할 것인지
  • IAM User에게 비밀번호 변경할 권한을 줄 것인지

MFA (Multi Factor Authentication)

가장 강력하게 계정을 보호할 수 있는 방법은 MFA이다.
MFA는 비밀번호 이외에 개인 디바이스를 통한 인증을 통해 보안을 더 강화시킨다.
아래와 같이 다양한 방법을 통해 MFA 인증을 할 수 있다.
하나만 설정해서 하는게 아니라 여러개의 MFA를 가질 수 있다.

  • Google Authenticator (폰만 가능)
  • Authy (모든 기기에서 가능)
  • 3rd party 하드웨어 기기를 통한 MFA (OTP 번호 생성하는 기기랑 비슷)

Access Keys

AWS CLI나 AWS SDK 를 사용할 때 필요한 key이다.
생성 시 주의해야 할 점은 생성 후에 딱 한번밖에 볼 수 없어 해당 페이지에서 Access Key를 꼭 저장해야 한다.
Access Key는 비밀번호와 같아서 절대 다른 사람과 공유해서는 안된다.
Access Key ID = User name
Secret Access Key = Password
라고 보면 된다.


콘솔의 My security credentials 링크로 들어가 생성할 수 있다.

Security Tool

Security Tool인 Credential report와 Access Advisor를 통해 IAM 의 권한을 관리한다.

Credential report

AWS 계정의 모든 User와 각 User들의 Credential들을 조회할 수 있다.

Access Advisor

User에게 부여한 서비스 권한과, 마지막으로 해당 서비스에 Access한 정보를 볼 수 있다.
이를 통해 사용되지 않는 권한을 파악할 수 있어 필요하지 않은 권한들을 제거할 수 있어 최소한의 원칙을 적용하는 데 도움을 준다.


AWS 계정에 접근하기 위한 3가지 방법

1) AWS Management Console

일반적으로 AWS 홈페이지의 사용자 콘솔에 접속하는 방법으로, 비밀번호와 MFA 설정을 했다면 MFA 인증이 필요하다.

2) AWS CLI - Access Key 사용

먼저 AWS CLI 설치가 필요하다.
AWS CLI 2는 AWS CLI 1의 기능을 지원하면서 성능과 사용자 경험 측면에서 개선된 버전이어서 AWS CLI 2를 사용하는 것이 권장된다.

OS 에 따른 설치 방법 참고
https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html

AWS CLI 특징

  • AWS 서비스의 Public API에 명령어를 통해 직접적으로 접근할 수 있다.
  • 사용자가 AWS 리소스 관리를 위한 스크립트 작성도 가능하다.
  • 오픈소스이다. https://github.com/aws/aws-cli

AWS CLI Mac 설치

나의 경우 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

CloudShell

AWS CLI를 사용하려고 하면 CloudShell 사용이 권장되고 있는데, 현재는 특정 Region에서만 사용이 가능하다. Console의 우측 상단의 터미널 모양 아이콘을 클릭하면 사용이 가능하다.
CloudShell 에서 생성한 파일을 다운로드하거나 업로드하는 기능이 있어 유용하다. (Action 콤보박스를 통해 해당 기능 사용가능하다.)

서울 Region은 아직 CloudShell이 지원되지 않아 위와 같이 안내문이 뜨고 임의로 다른 Region으로 변경되어 실행된다.

3) AWS SDK - Access Key 사용

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/


IAM 권장 사용방법

  • root 계정은 사용하지 않는다.
  • 실제 사용자 1명당 1개의 IAM User를 생성한다.
  • 되도록이면 User는 Group에 속하게 하고, Group에 Policy를 부여한다.
  • 강력한 Password Policy를 수립하여 보안을 강화한다.
  • MFA를 사용한다.
  • AWS 서비스에 Role을 부여한다.
  • Access Key를 사용하여 CLI/SDK를 사용한다.
  • IAM Credential Report 와 Access Advisor를 사용하여 User의 권한을 검증하고 관리한다.
  • 절대 IAM User 계정 Credential과 Access Key를 공유하지 않는다

IAM 한줄 요약

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

profile
거친 돌이 다듬어져 조각이 되듯

0개의 댓글