IaC

Terraform - (6) IAM

Operation CWAL 2021. 6. 18. 20:08

AWS IAM

IAM은 'Identitiy and Access Management'의 약자로, AWS 리소스에 대한 접근을 제어할 수 있는 서비스이다. IAM을 통해 Authentication 및 Authorization이 이루어진다. 자세한 내용은 링크를 참고하기 바란다.

 

IAM이란 무엇인가요? - AWS Identity and Access Management

이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오.

docs.aws.amazon.com

이번 시간엔 Terraform을 통해 IAM User와 Policy를 생성하고 이를 Binding하는 동작을 Terraform으로 정의해보자. 우선 모든 S3 리소스에 대해 모든 List 동작을 수행하는 Policy를 다음과 같은 JSON 포맷으로 정의할 수 있다. 

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "s3:ListStorageLensConfigurations",
                "s3:ListBucketMultipartUploads",
                "s3:ListAllMyBuckets",
                "s3:ListJobs",
                "s3:ListBucketVersions",
                "s3:ListBucket",
                "s3:ListMultipartUploadParts"
            ],
            "Resource": "*"
        }
    ]
}

 

위 Policy를 "s3_list_polcy" 라는 이름의 IAM Policy로 생성하고, 이를 IAM User "test_user"에 Binding하는 Terraform 파일 main.tf를 아래와 같이 정의할 수 있다. 

provider "aws" {
    region = "ap-northeast-2"
}

resource "aws_iam_user" "my_iam_user" {
    name = "test_user"
}

resource "aws_iam_policy" "my_iam_policy" {
    name = "s3_list_policy"
    policy = <<EOF
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "s3:ListStorageLensConfigurations",
                "s3:ListBucketMultipartUploads",
                "s3:ListAllMyBuckets",
                "s3:ListJobs",
                "s3:ListBucketVersions",
                "s3:ListBucket",
                "s3:ListMultipartUploadParts"
            ],
            "Resource": "*"
        }
    ]
}
EOF
}

resource "aws_iam_policy_attachment" "policy_bind" {
    name = "attachment"
    users = [aws_iam_user.my_iam_user.name]
    policy_arn = aws_iam_policy.my_iam_policy.arn
}

 

aws_iam_policy.my_iam_policy의 내용을 확인하면 policy 값으로 미리 준비한 JSON 형식의 Policy를 정의한 것을 볼 수 있다. <<EOF ~ EOF 사이에 Multi Line으로 작성된 텍스트를 넣을 경우, 한줄로 처리되는 것을 이용한 Terraform 파일 작성 방식이다. 다만 6144 byte를 초과하는 Policy는 사용할 수 없음에 유의하자.

aws_iam_policy_attachment 리소스는 IAM User와 IAM Policy를 Binding하는 기능을 수행한다. IAM User 이름(복수 허용)과 Policy ARN을 지정하는 방식으로 동작한다.

 

'terraform init' 명령어로 해당 디렉토리를 초기화 한 뒤, 'terraform apply' 명령어를 수행해보자. IAM User와 Policy가 생성되는 것을 볼 수 있다.

AWS 콘솔에서 실제 결과를 확인해보자. IAM Policy 's3_list_policy', 그리고 IAM User 'test_user'가 다음과 같이 생성되었으며, binding 역시 성공적으로 이루어졌다.

 

 

'IaC' 카테고리의 다른 글

Terraform - Azure(1)  (0) 2022.03.11
Terraform - (7) Advanced  (1) 2021.06.19
Terraform - (5) Modules  (0) 2021.06.10
Terraform - (4) 기본 AWS 리소스  (0) 2021.06.08
Terraform - (3) Variables  (0) 2021.06.07