안녕하세요😊 자격증 시험 공부 2일차 입니다. Docker랑 딥러닝 공부를 하다와서 늦었네요. EC2까지만하고 자야겠습니다.
이번 포스팅에서는 IAM에 대해서 알아봅시다!
AWS 리소스에 대한 액세스를 안전하게 제어할 수 있는 서비스입니다.
사용자, 그룹, 역할 및 정책을 사용하여 특정 AWS 리소스에 대한 액세스 권한을 관리하고 제어할 수 있습니다.
위와 같이 IAM policy는 json 파일 형태로 이루어져 있습니다.
Version: 정책 언어의 버전을 나타냅니다. 여기에서는 특정 날짜 형식 "2012-10-17"이 항상 포함되어야 한다고 명시되어 있습니다.
Id: 정책의 고유 식별자로, 선택적으로 포함될 수 있습니다.
Statement: 하나 이상의 개별 선언으로 구성되며, 이는 필수 요소입니다.
Sid: 선언에 대한 식별자이며, 선택적으로 포함될 수 있습니다.
Effect: 액세스를 허용(Allow)할지, 거부(Deny)할지를 명시합니다.
Principal: 이 정책이 적용되는 계정/사용자/역할입니다.
Action: 이 정책이 허용하거나 거부하는 작업의 목록입니다.
Resource: 작업이 적용되는 자원의 목록입니다.
Condition: 이 정책이 효력을 발휘하는 조건으로, 선택적으로 포함될 수 있습니다.
사용자와 그룹을 보호하기 위해 두 가지 주요 방어 기제를 사용할 수 있습니다.
암호 정책과 멀티 팩터 인증(MFA). 암호 정책을 통해 최소 길이, 문자 유형 요구, 비밀번호 변경 주기, 비밀번호 재사용 금지 등을 설정할 수 있어 보안을 강화할 수 있습니다. MFA는 사용자가 알고 있는 비밀번호와 소유한 보안 장치의 조합을 사용하여 보안을 더욱 강화합니다.
AWS에서는 가상 MFA 장치(예: Google Authenticator, Authy)와 물리적 MFA 장치(예: U2F 보안 키, 하드웨어 키 Fob)를 사용할 수 있습니다. 이러한 방법들은 사용자 계정을 해킹으로부터 보호하는 데 매우 효과적입니다.
바이낸스의 이중 authentication을 상상해봅시다
AWS에 액세스하는 세 가지 주요 방법은 관리 콘솔, CLI (명령줄 인터페이스), 그리고 SDK (소프트웨어 개발 키트)입니다.
관리 콘솔은 사용자 이름과 비밀번호로 보호되며, 선택적으로 다중 인증을 추가할 수 있습니다. (그 동안 해왔던거)
CLI와 SDK는 액세스 키로 보호되며, 이러한 액세스 키는 AWS 관리 콘솔을 통해 생성할 수 있습니다. 사용자는 자신의 액세스 키를 동료와 공유하지 않아야 하며, 이 키는 AWS 서비스와 API에 프로그래밍적으로 접근할 때 사용됩니다.
CLI는 명령줄에서 AWS 서비스와 상호 작용할 수 있게 해주며, 개발자들은 이를 사용하여 리소스 관리 스크립트를 개발하고 작업을 자동화할 수 있습니다.
SDK는 다양한 프로그래밍 언어를 지원하며, 애플리케이션 내에서 AWS 서비스를 사용할 수 있도록 합니다. 이러한 도구들은 AWS의 기능을 최대한 활용할 수 있게 해주며, 개발자가 클라우드 리소스를 효과적으로 관리하고 개발할 수 있게 도와줍니다.
AWS 서비스가 사용자 계정을 대신해 특정 작업을 수행하기 위해서는 마치 사용자와 같은 권한이 필요함을 강조합니다. 이 권한을 부여하기 위해 IAM role을 생성해야 하며, 이 IAM role은 실제 사용자가 아닌 AWS 서비스에 의해 사용됩니다. 예를 들어, EC2 인스턴스와 같은 가상 서버가 AWS 내에서 작업을 수행하려 할 때, IAM role을 통해 필요한 권한을 부여받습니다. IAM role에 할당된 권한을 통해, EC2 인스턴스는 AWS에서 요구하는 정보에 접근할 수 있게 됩니다. 또한, EC2 인스턴스 롤뿐만 아니라 람다 함수 role이나 CloudFormation 등 다양한 AWS 서비스가 IAM 롤을 사용할 수 있습니다.
IAM에서 사용할 수 있는 보안 도구에 대해 이야기해 보겠습니다.
첫 번째로, IAM 자격 증명 보고서를 생성할 수 있으며, 이는 계정 수준에서 모든 사용자와 그들의 다양한 자격 증명 상태를 포함한 보고서입니다.
두 번째 보안 도구는 IAM 액세스 어드바이저로, 이는 사용자 수준에서 사용되며, 사용자에게 부여된 서비스 권한과 그 서비스가 마지막으로 접근된 시간을 보여줍니다. 이는 최소 권한 원칙에 대해 이미 논의하고 있기 때문에 매우 유용할 것이며, 이 도구를 사용하여 사용되지 않는 권한을 확인하고 사용자가 받을 수 있는 권한을 최소 권한 원칙에 맞게 줄일 수 있습니다
이런식으로 어떤 서비스에 access했으며 어떤 policy가 이를 허락해줬는지 명시 되어있습니다.
루트 계정 사용 제한: AWS 계정 설정 시를 제외하고, 루트 계정의 사용을 최소화하세요. 대신 개별 사용자 계정을 사용해야 합니다.
개별 사용자 계정 생성: 실제 사용자마다 별도의 AWS 사용자 계정을 만들어야 하며, 다른 사람과 자격 증명을 공유해서는 안 됩니다.
그룹 사용 및 권한 할당: 사용자를 그룹에 할당하고, 그룹에 권한을 부여하여 보안을 관리하고 강력한 암호 정책을 설정하세요.
MFA 사용 및 시행: 가능한 경우 다중 인증 요소(MFA)를 사용하고 시행하여 계정 보안을 강화하세요.
역할 사용: AWS 서비스에 권한을 부여할 때는 반드시 IAM 역할을 생성하고 사용하세요. 이는 가상 서버 인스턴스에도 적용됩니다.
액세스 키 관리: 프로그래밍적 접근이나 CLI, SDK 사용 시 생성된 액세스 키를 안전하게 관리하며, 비밀번호처럼 매우 비밀스럽게 다루어야 합니다.
권한 관리 도구 사용: IAM 자격 증명 보고서나 IAM 액세스 어드바이저 기능을 사용하여 계정 권한을 효율적으로 관리하세요.
공유하지 않기: IAM 사용자와 액세스 키는 절대로 공유하지 마세요.