티스토리 뷰

AWS IAM(Identity and Access Management)

AWS 리소스에 대해 인증과 권환을 부여해, 리소스에 대한 액세스를 안전하게 제어할 수 있는 웹 서비스

 

기능

  • 액세스 관리를 통해 계정에서 보안 주체 엔터티허용된 권한을 정의할 수 있음(define what a principal entity is allowed to do in an account)
  • 여러 사람이 AWS 계정에 대한 Shared Access 를 할 수 있음
  • MFA (멀티 팩터 인증)

 

정의할 요소

보안 주체 엔터티 (principle entity) - person (user) 또는 group
- application (role)
허용된 권한 관리 - policy (정책)
  • AWS는 IAM 엔터티(사용자 또는 역할)가 요청을 보낼 때 Policy(허용된 권한)을 평가
  • 계정 권한에 대해 IAM role,rbac 또는 ACL을 사용
  • policy는 보통 json 파일을 이용

 

Terraform 으로 IAM 구성하기

aws_iam_policy_document

  • terraform resource가 아니라 data source임
  • 만약 resource 타입을 사용하려면 aws_iam_policy 를 사용해야 함
  • aws의 ${. . . } 문법이 기존 terraform 의 interpolation 과 충돌하기 때문에, terraform 의 interpolation을 쓰기 위해서는 ${...}을 사용하고, aws의 policy variable을 쓰기 위해서는 &{...}을 사용
  • json 포맷의 iam policy documnet를 생성해줌
  • 이 리소스를 쓰는 방법 대신, terraform 에서 json 문자열을 주입하거나, file을 읽는 방법도 있음

 

aws_iam_role

  • 만약 정책이 aws_iam_policy_attachment_resource를 통해서 role에 부착된 상항에서, role의 이름이나 경로를 변경하려 한다면, force_detach_policies_argument 를 true를 설정해야 한다. (aws_iam_role-policy_attachment 의 경우 이 설정을 하지 않아도 됨)

 

aws_iam_policy

resource "aws_iam_policy" "policy" {
  name        = "test_policy"
  path        = "/"
  description = "My test policy"

  # Terraform's "jsonencode" function converts a
  # Terraform expression result to valid JSON syntax.
  policy = jsonencode({
    Version = "2012-10-17"
    Statement = [
      {
        Action = [
          "ec2:Describe*",
        ]
        Effect   = "Allow"
        Resource = "*"
      },
    ]
  })
}

 

 

aws_iam_role_policy_attachment

  • policy를 role에 부착

 

 

AWS instance profile

인스턴스마다 어플리케이션의 자격증명 어려움 어플리케이션은 AWS credential 로 API 요청에 서명해야하기 때문에, EC2 인스턴스에서 인스턴스의 credential 을 관리해야한다. 각 인스턴스마다 (특이 Auto scaling 그룹의 인스턴스에 대해) credential을 관리하기 어렵다.
그래서 IAM 역할을 사용 애플리케이션이 사용하는 보안 자격 증명을 직접 관리할 필요 없이 IAM 역할을 사용하여 API 요청 전송 권한을 위임할 수 있다.
ex) Amazon S3의 버킷을 사용해야 하는 애플리케이션에 해당 권한을 부여 가능

https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html

 

Amazon EC2의 IAM 역할 - Amazon Elastic Compute Cloud

IAM 역할과 함께 인스턴스 메타데이터를 사용하는 서비스를 사용하는 경우 서비스에서 사용자 대신 HTTP 호출을 수행할 때 자격 증명이 노출되지 않도록 주의하세요. 자격 증명이 노출될 수 있는

docs.aws.amazon.com

 

terraform 에서 aws_iam_instance_profile

resource "aws_iam_instance_profile" "test_profile" {
  name = "test_profile"
  role = aws_iam_role.role.name
}

resource "aws_iam_role" "role" {
  name = "test_role"
  path = "/"

  assume_role_policy = <<EOF
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": "sts:AssumeRole",
            "Principal": {
               "Service": "ec2.amazonaws.com"
            },
            "Effect": "Allow",
            "Sid": ""
        }
    ]
}
EOF
}

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함