IAM user 기본 생성
- IAM User를 생성할 때는 aws_iam_user 리소스를 사용하면되고, 필수적으로 필요한 설정은 name 이다.
provider "aws" {
region = "us-east-2"
}
resource "aws_iam_user" "ihwoo" {
name = "ihwoo"
}
위 Terraform 코드를 통해 IAM user 를 생성해주었다고 하더라도, console 을 접속할 수 는 없다. 생성한 user의 password 가 설정되어있지 않기 때문. 비밀번호와 MFA는 직접 console을 통해 설정해야 한다. 혹은 AWS CLI 를 통해서 자동화를 진행할 수 도 있다. 물론 테라폼을 통해 설정을 할 수 도 있으나, aws_iam_user_login_profile 을 사용해야 한다.
IAM group 기본 생성
- IAM User를 생성할 때는 aws_iam_group 리소스를 사용하면되고, 필수적으로 필요한 설정은 name 이다..
provider "aws" {
region = "us-east-2"
}
resource "aws_iam_group" "cloud_tech_group" {
name = "cloud_tech"
}
생성한 IAM user 를 IAM group 에 등록
- IAM user를 IAM group 에 등록하는 것도 Terraform 으로 진행할 수 있다. 실제로 AWS IAM user 를 개발자, 데브옵스, 검증 등 조직의 실제 그룹으로 나누고 등록하고 관리해야 한다.
- Terraform을 통해서 IAM group membership을 생성해보자. IAM User를 등록할 때는 aws_iam_group_membership 리소스를 사용하면 된다.
resource "aws_iam_group_membership" "cloud_tech" {
name = aws_iam_group.cloud_tech_group.name
users = [
aws_iam_user.ihwoo.name
]
group = aws_iam_group.cloud_tech_group.name
}
AWS IAM policy 와 group policy 는 ‘or’ 조건을 따른다고 생각하면 편하다. allow permission은 합집합으로 permission을 검사한.
EC2를 위한 IAM role 기본 생성
- IAM role을 생성할 때는 aws_iam_role 리소스를 사용하면 되고, 필수적으로 필요한 설정은 name 이다. 여기에 aws_iam_role_policy 도 만들어 생성한 aws_iam_role 와 연결하는 작업도 진행해보자.
resource "aws_iam_role" "hello" {
name = "hello-iam-role"
path = "/"
assume_role_policy = <<EOF
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": "ec2.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
EOF
}
resource "aws_iam_role_policy" "hello_s3" {
name = "hello-s3-download"
role = aws_iam_role.hello.id
policy = <<EOF
{
"Statement": [
{
"Sid": "AllowAppArtifactsReadAccess",
"Action": [
"s3:GetObject"
],
"Resource": [
"*"
],
"Effect": "Allow"
}
]
}
EOF
}
resource "aws_iam_instance_profile" "hello" {
name = "hello-profile"
role = aws_iam_role.hello.name
}
aws_iam_instance_profile은 IAM 역할을 위한 컨테이너로서 인스턴스 시작 시 EC2 인스턴스에 역할 정보를 전달하는 데 사용됩니다. 만약 AWS Management 콘솔을 사용하여 Amazon EC2 역할을 생성하는 경우, 콘솔이 자동으로 인스턴스 프로파일을 생성하여 해당 역할과 동일한 이름을 부여합니다.
AWS IAM Policy 의 종류
- AWS의 접근하는 해당 권한을 정의하는 개체로 AWS IAM 리소스들과 연결하여 사용할 수 있다. 즉 AWS IAM policy 는 user 에 할당 할 수 도, group 에 할당 할 수 있다. IAM policy 는 여러 타입으로 나누어져 있다.
- AWS Managed policy — AWS에서 먼저 생성해놓은 Policy set. 사용자가 권한(Permission)을 변경할 수 없다.
- Customer Managed policy — User 가 직접 생성하는 Policy 로 권한을 직접 상세하게 만들어 관리할 수 있다.
IAM user policy 생성
resource "aws_iam_user" "ihwoo" {
name = "ihwoo"
}
resource "aws_iam_user_policy" "super_admin" {
name = "super-admin"
user = aws_iam_user.ihwoo.name
policy = <<EOF
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"*"
],
"Resource": [
"*"
]
}
]
}
EOF
}
resource “aws_iam_user_policy” “super_admin” 을 생성함으로써, gildong.hong 사용자는 해당권한을 가지게 되었습니다. 참고로 해당 iam 권한은 모든 권한을 갖는 권한입니다. 결국 json 형태인 iam policy 를 적절하게 생성하고 부여를 할 수 있어야 합니다.
'Terraform > AWS and 테라폼: Infrastructure as' 카테고리의 다른 글
[AWS and 테라폼: Infrastructure as Code] VARIABLES 활용하기 (0) | 2024.01.21 |
---|---|
[AWS and 테라폼: Infrastructure as Code] Backend 활용하기 (0) | 2024.01.21 |
[AWS and 테라폼: Infrastructure as Code] AWS IAM 소개 (0) | 2024.01.21 |
[AWS and 테라폼: Infrastructure as Code] Amazon S3 실습 (0) | 2024.01.21 |