[AWS] IAM (Identity and Access Management)

1. IAM (Identity and Access Management) 란?

이메일로 만든 AWS 계정은 루트 계정 으로서 AWS의 모든 리소스에 접근할 수 있는 강력한 권한을 가지고 있다. 계정의 모든 사용자가 루트 계정을 사용하는 것은 보안에 좋지 않기 때문에 AWS는 IAM (Identity and Access Management) 서비스를 제공한다.

사용자

​ 루트 계정 아래 IAM 사용자 를 생성한다. IAM 사용자는 루트 계정에 의해 접근이 허가된 AWS리소스만 사용 가능하다.

역할 (Role)

​ 각 AWS 서비스들이 타 서비스에 접근할 권한도 설정하며, 이를 역할(Role) 이라고 한다. 예를 들어, EC2 인스턴스가 S3에 접근하기 위 해서는 이에 맞는 정책이 적용된 IAM 역할을 부여받아야 한다.

정책 (Policy)

​ IAM 사용자 혹은 AWS 서비스들에게 주어진 접근 권한을 정책(Policy) 라고 한다. JSON 형태로 저장되며 각 사용자, 그룹, 역할에 부여 할 수 있다. AWS에서 미리 정의된 정책을 사용할 수도 있고, 사용자 정책을 직접 작성하여 사용할 수도 있다.

그룹

​ 사용자를 그룹으로 묶어 관리할 수 있다. 소속된 사용자들은 그룹에 부여된 정책에 영향을 받는다.

AWS CLI로 서비스를 이용할 시 루트 사용자로의 접근은 제한된다.

2. 역할

1. 사용자에게 역할 부여

서비스가 다른 서비스에 접근할 때 역할에 정책을 적용해 권한을 부여하기도 하지만, 임시자격증명을 생성해 사용자에게 부여할 때에도 사용된다.

역할로 유효기간이 있는 임시 자격증명을 생성하며, 사용자가 기존에 가지고 있던 자격증명에 추가되는 것이 아니라 대체되는 것이다. 즉, 기존 권한은 일시적으로 무시된다.

예를 들어, S3에 접근할 수 있는 권한을 가진 사용자에게 EC2 접근 권한이 있는 역할을 위임하면 EC2에는 접근 가능하지만 S3에 접근할 권한은 사라진다. 역할의 유효기간이 끝나면 원래 가지고 있던 자격증명으로 연결된다.

유효기간이 있기 때문에 영구 자격증명보다 훨씬 안전하다.

또한 교차 계정 액세스가 가능하다. 다른 계정의 사용자가 자신의 서비스에 접근할 수 있도록 역할을 생성하여 줄 수 있다.

2. STS (Security Token Service)

AWS STS는 IAM 사용자 또는 자격증명 연동으로 인증된 사용자에게 제한적인 임시 권한을 제공하는 웹 서비스이다.

STS가 AssumeRoleAPI 를 호출해 역할로 자격증명을 만들고, 이 자격증명에 정책과 유효기간을 부여한다. 따라서 사용자에게 STS AssumRole 서비스에 접근할 수 있는 권한을 주어야 한다.

{
  "Version": "2012-10-17",
  "Statement": {
    "Effect": "Allow",
    "Action": "sts:AssumeRole",
    "Resource": "arn:aws:iam::ACCOUNT_ID:role/ROLE_NAME"
  }
}

3. Amazon Cognito

Cognito는 웹 및 모바일 앱에서 AWS 리소스에 접근할 수 있도록 인증,권한 부여 및 사용자 관리를 제공하는 서비스이다. 사용자 풀자격 증명 풀로 구성된다.

사용자 풀

앱 사용자의 가입 및 로그인 옵션을 제공하는 사용자 디렉토리이다.

자격 증명 풀

AWS 서비스에 접근할 수 있는 임시 자격 증명을 사용자에게 부여한다.

Cognito를 사용하는 간단한 시나리오는 다음과 같다.

image

어플리케이션에서 사용자가 사용자 풀을 이용해 로그인하고 토큰을 받는다.

받아온 토큰을 자격 증명 풀에서 AWS 자격증명과 교환한다.

앱 사용자는 교환받은 AWS 자격증명을 사용해 AWS 서비스에 접근한다.

카테고리:

업데이트:

댓글남기기