배운 내용/Kubernetes

[crossplane] IAM

JooJY 2024. 5. 20. 17:02
반응형

vpc flow log 이걸 하려면 먼저 IAM이 있어야 함.

사용자 생성

apiVersion: iam.aws.upbound.io/v1beta1
kind: User
metadata:
  name: joo-test-user # 리소스 이름, AWS 사용자 이름
spec:
  forProvider: {} # 아무것도 안 넣어도 만들어짐.
  providerConfigRef:
    name: aaa

그룹 생성

apiVersion: iam.aws.upbound.io/v1beta1
kind: Group
metadata:
  name: joo-test-group
spec:
  forProvider:
    path: /joo/
  providerConfigRef:
    name: aaa

그룹에 사용자 넣기

apiVersion: iam.aws.upbound.io/v1beta1
kind: GroupMembership
metadata:
  name: joo-crossplane-groupmembership
spec:
  forProvider:
    groupRef:
      name: joo-test-group
    userRefs: 
      - name: joo-test-user
    name: joo-group-membership
  providerConfigRef:
    name: aaa

정책 새로 만들기

apiVersion: iam.aws.upbound.io/v1beta1
kind: Policy
metadata:
  name: joo-user-policy
spec:
  forProvider:
    policy: |
      {
        "Version": "2012-10-17",
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "logs:CreateLogGroup",
              "logs:CreateLogStream",
              "logs:PutLogEvents",
              "logs:DescribeLogGroups",
              "logs:DescribeLogStreams"
            ],
            "Resource": "*"
          }
        ]
      }
  providerConfigRef:
    name: aaa

역할 새로 만들기

inlinePolicy : 역할의 권한 정책(위에서 만든 정책이 들어간다.)

assumeRolePolicy : 역할의 신뢰 정책

원래는 위에서 만든 policy와 role을 따로 만들어야 하지만 한번에 만들 수도 있다.

이 경우 역할에 신뢰 정책이 추가되어 만들어진다.

apiVersion: iam.aws.upbound.io/v1beta1
kind: Role
metadata:
  name: joo-user-role
spec:
  forProvider:
    assumeRolePolicy: |
      {
        "Version": "2012-10-17",
        "Statement": [
          {
            "Sid": "Statement1",
            "Effect": "Allow",
            "Principal": {"Service": "vpc-flow-logs.amazonaws.com"},
            "Action": "sts:AssumeRole"
          }
        ]
      }
    inlinePolicy:
      - name: joo-inline-policy
        policy: |
          {
            "Version": "2012-10-17",
            "Statement": [
              {
                "Effect": "Allow",
                "Action": [
                  "logs:CreateLogGroup",
                  "logs:CreateLogStream",
                  "logs:PutLogEvents",
                  "logs:DescribeLogGroups",
                  "logs:DescribeLogStreams"
                ],
                "Resource": "*"
              }
            ]
          }
  providerConfigRef:
    name: aaa

일단은 신뢰 정책만 만들어보자.

이렇게 하면 신뢰 정책만 있고 권한 정책이 없다.

apiVersion: iam.aws.upbound.io/v1beta1
kind: Role
metadata:
  name: joo-user-role
spec:
  forProvider:
    assumeRolePolicy: |
      {
        "Version": "2012-10-17",
        "Statement": [
          {
            "Sid": "Statement1",
            "Effect": "Allow",
            "Principal": {"Service": "vpc-flow-logs.amazonaws.com"},
            "Action": "sts:AssumeRole"
          }
        ]
      }
  providerConfigRef:
    name: aaa

신뢰 정책, 권한 정책 합치기

이걸하고 나면 역할에 권한 정책이 추가된 것을 알 수 있다.

apiVersion: iam.aws.upbound.io/v1beta1
kind: RolePolicyAttachment
metadata:
  name: joo-policy-attachment
spec:
  forProvider:
    policyArnRef:
      name: joo-user-policy # policy 리소스 이름
    roleRef:
      name: joo-user-role # role 리소스 이름
  providerConfigRef:
    name: aaa

사용자에게 역할 부여하기

apiVersion: iam.aws.upbound.io/v1beta1
kind: UserPolicyAttachment
metadata:
  name: joo-user-policy-attachment
spec:
  forProvider:
    policyArnRef:
      name: joo-user-policy # policy 리소스 이름
    userRef: 
      name: joo-test-user # 유저 리소스 이름
  providerConfigRef:
    name: aaa

그룹에 권한 부여하기

그룹 권한 정책에 정책이 추가된다.

apiVersion: iam.aws.upbound.io/v1beta1
kind: GroupPolicyAttachment
metadata:
  name: joo-group-policy-attachment
spec:
  forProvider:
    policyArnRef:
      name: joo-user-policy # 정책 리소스 이름
    groupRef: 
      name: joo-test-group # 그룹 리소스 이름
  providerConfigRef:
    name: aaa
반응형