[AWS] IAM Role, AssumeRole

Jisun-Rea·2022년 2월 12일
1

iam role과 assume role에 대한 이해를 의식의 흐름대로 정리했음...🧐🥺 틀릴 수 있음 주의!

IAM Role이란

  • 여러 policy와 연결함으로써 권한을 가질 수 있다.
  • 여러 객체에게 부여할 수 있다.
  • 한 사람만이 user을 사용할 수 있는것과 달리
  • role은 필요로 하는 이는 누구나 사용 가능
  • 단, 신뢰할 수 있는 사람만!

Assume Role

예제 1

예를 들면, EC2에 S3를 조회하는 Role을 부여한다고 해보자.
role 정의 부분을 terraform 코드로 보면 다음과 같다.

resource "aws_iam_instance_profile" "bastion" {
  name = "iam-${local.name}-instance-profile"
  role = aws_iam_role.bastion.name
}

resource "aws_iam_role" "bastion" {
  name               = "iam-${local.name}-role"
  path               = "/ec2/"
  assume_role_policy = <<EOF
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": "sts:AssumeRole",
      "Principal": {
        "Service": ["ec2.amazonaws.com"]
      },
      "Effect": "Allow"
    }
  ]
}
EOF
}

data "aws_iam_policy_document" "bastion" {
  statement {
    sid = "ReadBucket"

    actions = [
      "s3:Get*",
      "s3:List*",
    ]

    resources = [
      "arn:aws:s3:::jisun-*",
    ]
  }
}

resource "aws_iam_policy" "bastion" {
  name   = "iam-${local.name}-s3"
  path   = "/ec2/"
  policy = data.aws_iam_policy_document.bastion.json
}

resource "aws_iam_role_policy_attachment" "bastion" {
  role       = aws_iam_role.bastion.id
  policy_arn = aws_iam_policy.bastion.arn
}

policy를 정의하고 이를 role에 붙이는 부분은 딱 알 수 있을 것이다.
그렇다면, assume_role_policy 부분의 정의는 무엇일까?

이 부분이 바로 해당 role을 사용할 수 있는 대상을 지정하는 부분이다. aws console상에선 trusted entities에서 확인할 수 있다.

Principal이 assume role이 allow 된다. 즉, EC2 리소스가 이 role을 사용할 수 있게 된 것이다.

그러면 EC2는 이 role에 대한 권한을 위임받아서 role과 연결된 policy에 대한 권한, 즉 s3를 list하고 get할 수 있는 권한을 얻게 된다.

예제2

A user에 assume role 정의
B role에 s3 list 권한 부여

A는 B의 권한을 위임받아서 s3 list를 할 수 있음

너무 좋은 사이트..!:
https://jonnung.dev/posts/2021-01-28-aws-iam-role/

profile
호기심 많고 걱정도 많은 사람👻 @DevOps @Cloud

0개의 댓글