iam role과 assume role에 대한 이해를 의식의 흐름대로 정리했음...🧐🥺 틀릴 수 있음 주의!
예를 들면, 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할 수 있는 권한을 얻게 된다.
A user에 assume role 정의
B role에 s3 list 권한 부여
A는 B의 권한을 위임받아서 s3 list를 할 수 있음
너무 좋은 사이트..!:
https://jonnung.dev/posts/2021-01-28-aws-iam-role/