[AWS] IAM
IAM(Identity and Access Management)는 AWS(Amazon Web Services)의 글로벌 서비스로, 사용자와 리소스 접근을 안전하게 관리하는 기능을 제공합니다. IAM은 AWS 계정을 사용하는 모든 사용자와 애플리케이션에 대해 인증(Authentication)과 권한 부여(Authorization)를 설정해 AWS 자원을 보호합니다.
1. IAM의 기본 개념
1.1 루트 계정:
AWS 계정 생성 시 처음으로 생성되는 계정으로, 전체 권한을 가진 계정입니다. 루트 계정은 계정 생성 이후 보안을 위해 더 이상 사용하지 않고, 대신에 개별 사용자 계정을 만들어서 권한을 위임하는 것이 권장됩니다.
1.2 사용자(User):
• IAM 사용자는 회사 내의 실제 사용자와 일대일로 매핑됩니다. 즉, AWS 리소스에 접근해야 하는 각 개인이나 애플리케이션에 대해 IAM 사용자 계정을 만듭니다.
• 각 IAM 사용자에게 고유한 자격 증명(예: 비밀번호, 액세스 키 등)을 부여하여 AWS Management Console 또는 CLI/SDK를 통해 AWS 리소스에 접근할 수 있도록 합니다.
1.3 그룹(Group):
• IAM 그룹은 비슷한 접근 권한이 필요한 사용자들을 묶어 관리하는 단위입니다. 예를 들어, 개발자 그룹, 운영 그룹 등을 만들어 공통된 권한을 부여할 수 있습니다.
• 그룹에는 사용자만 포함될 수 있으며 다른 그룹을 포함할 수는 없습니다.
• 권한 부여를 간소화하기 위해 그룹에 대해 정책을 지정하면, 해당 그룹에 속한 모든 사용자는 동일한 권한을 상속받습니다.
1.4 정책(Policy):
• 정책은 AWS 리소스에 대한 접근 권한을 부여하는 JSON 형식의 문서입니다. 이를 통해 사용자가 수행할 수 있는 작업과 접근 가능한 리소스를 정의합니다.
• 정책은 주로 사용자, 그룹, **역할(Role)**에 할당되어 권한을 부여하는데 사용되며, AWS에서 미리 제공하는 **관리형 정책(Managed Policy)**과 사용자 정의가 가능한 커스텀 정책(Custom Policy) 두 가지가 있습니다.
• 예를 들어, S3ReadOnlyAccess라는 정책은 S3의 읽기 전용 권한만 부여하며, AdministratorAccess 정책은 모든 AWS 리소스에 대한 전체 접근 권한을 부여합니다.
1.4.1 정책 문서 구성:
IAM 정책은 JSON 형식으로 작성되며, 정책 문서의 주요 구성 요소는 다음과 같습니다:
• Version: 정책의 버전 정보를 명시합니다. 일반적으로 “2012-10-17” 버전이 사용됩니다.
• Statement: 정책의 실제 규칙을 정의하는 부분으로, 각 규칙은 개별 Statement로 작성됩니다.
• Effect: Allow 또는 Deny 값을 지정하여, 특정 작업을 허용하거나 거부할 수 있습니다.
• Action: 정책에서 허용하거나 거부할 작업을 지정합니다. 예를 들어 s3:PutObject는 S3 버킷에 객체를 업로드하는 작업을 의미합니다.
• Resource: 특정 작업을 수행할 AWS 리소스를 지정합니다. 리소스는 ARN(Amazon Resource Name) 형식으로 지정됩니다. 예를 들어, 특정 S3 버킷의 경로를 지정할 수 있습니다.
예시:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::example-bucket/*"
}
]
}
위 예시에서는 example-bucket 버킷에 객체를 업로드(PutObject)하는 권한을 부여하고 있습니다.
1.5 역할(Role):
• 역할은 IAM 사용자와 달리 AWS 서비스나 애플리케이션이 특정 권한을 일시적으로 사용할 수 있도록 허용하는 자격 증명입니다.
• AWS 리소스나 애플리케이션이 특정 작업을 수행할 때, 필요한 권한을 역할을 통해 부여할 수 있습니다. 예를 들어, EC2 인스턴스가 S3 버킷에 접근하도록 할 때 역할을 사용할 수 있습니다.
• 역할은 신뢰할 수 있는 외부 계정이나 서비스에도 임시로 권한을 위임할 수 있으므로, 사용자 자격 증명을 제공하지 않고도 권한을 위임할 수 있습니다.
2. IAM의 보안 기능
2.1 MFA(Multi-Factor Authentication, 다중 인증):
• IAM 사용자는 MFA를 활성화하여 보안을 강화할 수 있습니다. MFA는 비밀번호 외에 추가적인 인증 요소(일회용 비밀번호, OTP)를 요구해 보안을 강화합니다.
• AWS에서는 특히 루트 계정에 대해 MFA 활성화를 권장하여 계정 보호를 더욱 강화합니다.
2.2 비밀번호 정책:
• IAM에서는 사용자 비밀번호 강도와 만료 주기를 설정할 수 있는 비밀번호 정책을 제공합니다.
• 비밀번호의 최소 길이, 숫자, 특수 문자 포함 여부 등을 설정해 보안 요건에 맞춘 비밀번호 정책을 적용할 수 있습니다.
3. IAM에서의 접근 방식
3.1 AWS Management Console: 웹 브라우저를 통해 접근하는 GUI 기반의 AWS 접근 방식으로, 사용자 이름과 비밀번호로 로그인하며, 다중 인증(MFA)을 추가해 보안을 강화할 수 있습니다.
3.2 AWS CLI(Command Line Interface):
• CLI를 사용하면 명령줄에서 AWS API를 직접 호출하여 AWS 리소스를 제어할 수 있습니다.
• CLI를 통해 자동화된 작업을 실행하거나 스크립트를 사용해 배포나 설정을 간편하게 관리할 수 있습니다.
• CLI를 사용할 때는 **액세스 키(Access Key ID와 Secret Access Key)**를 통해 인증이 이루어지며, CLI 환경에서 보안을 유지하려면 이 키를 안전하게 관리해야 합니다.
3.3 AWS SDK(Software Development Kit):
• SDK는 AWS API를 호출해 AWS 리소스를 프로그래밍 언어 내에서 제어할 수 있는 프로그래밍 라이브러리입니다.
• 각 언어별 SDK(Java, Python, JavaScript 등)가 제공되며, 이를 통해 AWS 서비스와의 상호작용을 코드로 구현할 수 있습니다.
• 예를 들어, Spring 애플리케이션에서 AWS SDK for Java를 사용하여 S3에 파일을 업로드하거나, DynamoDB에 데이터를 저장할 수 있습니다.
4. IAM 감사 및 모니터링
4.1 IAM 자격 증명 보고서(Credential Report):
• IAM은 계정 내 모든 IAM 사용자의 자격 증명 상태(비밀번호 및 액세스 키 상태)를 보고서로 제공합니다.
• 이를 통해 각 사용자의 보안 상태를 파악하고, 비활성 키나 만료된 비밀번호를 점검해 보안을 강화할 수 있습니다.
4.2 IAM 액세스 어드바이저(Access Advisor):
• 사용자가 접근한 서비스 기록을 통해 권한을 최적화할 수 있는 기능입니다.
• 각 사용자가 AWS 서비스에 접근한 마지막 시간을 확인하여, 사용하지 않는 서비스에 대한 권한을 제거하거나 제한할 수 있습니다.
5. IAM 보안 모범 사례
5.1 루트 계정 사용 제한: AWS 루트 계정은 계정 생성 후 보관용으로만 사용하고, 일상적인 작업은 별도의 IAM 사용자에게 권한을 부여하여 처리합니다.
5.2 MFA 활성화: 모든 중요한 계정에 대해 MFA를 활성화하여 계정 보안을 강화합니다.
5.3 최소 권한 원칙(Least Privilege): IAM 정책을 통해 사용자가 반드시 필요한 권한만 부여합니다.
5.4 액세스 키 관리: 프로그래밍 접근에 사용하는 액세스 키를 정기적으로 회전시키고, 사용하지 않는 키는 삭제하여 보안을 유지합니다.
5.5 정기적인 보안 점검: IAM 자격 증명 보고서와 액세스 어드바이저를 활용해 보안 상태를 점검하고 권한을 최적화합니다.
IAM은 AWS 계정의 보안을 강화하고, 사용자의 접근을 효과적으로 관리하는 필수 서비스입니다. IAM 정책을 통해 필요한 최소한의 권한만 부여하고, 다양한 보안 기능을 활용하여 AWS 리소스를 안전하게 보호할 수 있습니다.