티스토리 뷰

반응형
  • variable.tf를 다음과 같이 작성
    • bucket-name-for-job : 사용할 Bucket이 유동적이라면 변수로 선언하여 사용.
      • 주의 : variable로 만든다고 해서 Bucket이 실제로 생성되는 것은 아님을 명심할 것.
      • 실제 생성은 resource "aws_s3_bucket"과 같은 형식으로, 별도로 코드를 작성해주어야 한다.
    • assumeRoleiot : Role 생성시 해당 Role이 신뢰할 수 있는 개체를 지정
    • policy_job_s3 : IoT의 작업에 사용하기 위한 실제 권한을 할당
      • 특히, resources의 bucket-name-for-job을 변수에 지정하여 사용할 수 있음
//variable.tf

// 사용할 Bucket 명을 변수로 지정
variable "bucket-name-for-job" {
  type = string
}

// Role에 신뢰할 수 있는 개체를 지정하는 Assume Role
data "aws_iam_policy_document" "assumeRoleiot" {
  statement {
    actions = [
      "sts:AssumeRole"
    ]
    principals {
      identifiers = ["iot.amazonaws.com"]
      type = "Service"
    }
    effect = "Allow"
  }
}

// Role에 attach할 Policy의 내용
data "aws_iam_policy_document" "policy_job_s3" {
  statement {
    effect = "Allow"
    sid = "s3JobPolicy"
    actions = [
      "s3:ListBucket",
      "s3:ListAllMyBuckets",
      "s3:CreateBucket",
      "s3:PutBucketVersioning",
      "s3:GetBucketLocation",
      "s3:GetObjectVersion",
      "s3:GetObject",
      "s3:PutObject",
      "s3:ListBucketVersions"
    ]
    resources = [
      "arn:aws:s3:::${var.bucket-name-for-job}",
      "arn:aws:s3:::${var.bucket-name-for-job}/*",
      "arn:aws:s3:::us-east-1-greengrass-updates/*",
      "arn:aws:s3:::us-west-2-greengrass-updates/*",
      "arn:aws:s3:::ap-northeast-1-greengrass-updates/*",
      "arn:aws:s3:::ap-northeast-2-greengrass-updates/*",
      "arn:aws:s3:::ap-southeast-2-greengrass-updates/*",
      "arn:aws:s3:::eu-central-1-greengrass-updates/*",
      "arn:aws:s3:::eu-west-1-greengrass-updates/*"
    ]
  }
}

 

  • iam.tf를 다음과 같이 작성
    • 위의 variable.tf와 같은 파일에 작성하여도 무방하나, 추후 관리를 위해 파일을 분리하는 것을 권장
    • common_iam_Policy_job_s3 : Role에 붙일 policy이며, Policy 내용은 variable.tf의 내용을 가져옴
    • common_iam_Role_job_s3 : 실제 사용할 IAM Role을 생성하며, 신뢰할 수 있는 개체로 variable.tf의 내용을 가져옴
    • common_iam_Role_Policy_job : 위의 정책과 역할을 attach함
//iam.tf

// Role에 attach할 Policy
resource "aws_iam_policy" "common_iam_Policy_job_s3" {
  name = "policy-for-job"
  policy = data.aws_iam_policy_document.policy_job_s3.json
}

// 사용하고자 하는 Role
resource "aws_iam_role" "common_iam_Role_job_s3" {
  name = "role-for-job"
  assume_role_policy = data.aws_iam_policy_document.assumeRoleiot.json
}

// Role에 Policy를 실제로 Attach하기 위한 예시
resource "aws_iam_role_policy_attachment" "common_iam_Role_Policy_job" {
  policy_arn = aws_iam_policy.common_iam_Policy_job_s3.arn
  role = aws_iam_role.common_iam_Role_job_s3.id
}

 

  • 중요 : 실행 후 생성된 역할에 Policy가 Attach 되지 않았다면 새로고침할 것... 이 것 때문에 계속 만들고 지우고 하기 쉽다.
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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
글 보관함