[AWS] IAM - Identity and Access Management
AWS IAM은 클라우드 리소스에 대한 보안 및 접근 제어를 관리하는 서비스이다.
스프링 시큐리티에서 권한과 그룹을 설정하는 것과 유사하다.
AWS 계정 내에서 사용자, 그룹, 역할, 정책을 활용해 세분화된 권한을 설정한다.
먼저 계정을 만들고 AWS 웹 콘솔에 접근할텐데.. 여기서 만든 계정은 루트 계정으로, 모든 AWS 서비스에 접근할 수 있는 권한을 가진다.
AWS 계정 하나로 여러 IAM 사용자를 만들 수 있고, 각 사용자는 IAM 서비스가 제공하는 권한에 따라 지정된 서비스에만 접근할 수 있다. (ex. 개발자는 EC2, 데이터 분석자는 S3 버킷에만 접근)
https://[IAM 아이디].signin.aws.amazon.com/console
IAM 사용자들은 각각 고유한 URL을 발급받고, 해당 URL을 통해 로그인하고 AWS 서비스를 사용할 수 있다.
AWS CLI 를 사용하거나 백엔드에서 SDK를 통해 AWS에 접근할 때는 Access Key와 Secret Key를 사용한다.
스프링 시큐리티에서 슈퍼관리자 계정을 지정하고 슈퍼관리자 계정으로는 다른 사용자들의 권한을 설정하는 역할만 수행하는 것 처럼, AWS 루트 계정으로는 IAM 사용자들의 권한만 설정하고 실제 AWS 서비스를 사용하는 작업은 IAM 사용자 계정을 통해 수행한다.
AWS 루트 계정으로 RDS, S3, EC2 등 여러 AWS 서비스를 대여했다고 하자.
대여한 후 여러 IAM 계정을 만들고 적절한 역할과 권한을 설정해주면, 이제 만들어진 IAM 계정으로 CLI나 콘솔에 로그인한다.
IAM 계정으로 로그인한 경우 해당 계정에 부여된 권한에 따라 이용할 수 있는 서비스를 확인할 수 있다.
EC2 계정의 pem파일을 생성하고 다운로드하거나, RDS 인스턴스를 관리할 수 있다.
IAM 계정으로 AWS 서비스에 접근하는 방식은 서비스마다 다르지만, 요점은 IAM 계정을 통해 AWS 서비스에 접근하는 것..
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "StatementID",
"Effect": "Allow",
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::sample-bucket"
}
]
}
IAM 권한 정책은 사용자, 그룹, 역할에 적용할 수 있고 JSON 형태로 작성된다.
여기서 Version은 AWS에서 제공하는 정책 언어의 버전으로 현재는 2012-10-17 으로 사용된다.
권한 정책은 영구적으로 사용자, 그룹, 역할에 부여할 때 사용되고, 신뢰 정책은 역할을 정의할 때 권한 정책과 함께 사용돼 세션이 만료되면 사라진다.
임시 자격 증명을 수행할 때 사용되고, 주로 외부 계정이나 EC2 / lambda같은 AWS 서비스에 S3같은 AWS 서비스 접근 권한을 할당할 때 사용된다.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "ec2.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
신뢰 정책도 JSON 형태로 작성되고, Security Token Service로 임시 자격 증명을 수행한다.
권한 정책은 역할을 맡은 주체가 AWS 리소스에 어떤 작업을 할 수 있는지를 정의하고, 신뢰 정책은 어떤 주체가 해당 역할을 맡을 수 있는지를 정의한다.
권한 정책으로 EC2가 S3에 접근할 수 있는 권한을 부여하고, 신뢰 정책으로 EC2가 IAM 역할을 맡을 수 있도록 정의한다고 생각하자.