목표

IAM role과 k8s service account를 연동시켜 쿠버네티스 상에 provisioning되는 리소스들에 대한 AWS APIs를 호출할 수 있는 권한을 부여하자.

IAM role과 k8s service account를 연동하는 이유는?

IAM role이 부여된 service account는 아래와 같은 장점이 있다.

OIDC(OpenID Connect) provider란?

k8s 인증 완벽이해 #3 - OpenID Connect

Google OAuth와 같은 인증 provider이다. OpenID Connect(OIDC)는 권한허가 프로토콜인 OAuth 2.0 기술을 이용하여 만들어진 인증 레이어다. OpenID Connect를 이용하면 손쉽게 외부 서비스를 통하여 사용자 인증을 구현할 수 있다. 참고로 OAuth 2.0는 권한허가를 처리하기 위해 만들어진 표준 프로토콜이다. Google, Facebook, Twitter 등에서 자신의 서비스를 외부 시스템에서 사용할 수 있게 제공해주기 위해서 생겨난 기술이다. → Google id로 넷플릭스 등 다른 서비스에 로그인 가능한 것

Untitled

Cluster 생성

본 실습을 하려면 terraform으로 cluster을 만들 수 있어야 한다.

hashicorp/aws provider의 aws_eks_cluster를 사용했다. → 참고

resource "aws_eks_cluster" "terraform_pipeline_cluster" {
  name     = var.cluster_name
  version  = var.kubernetes_version
  role_arn = var.role_arn

  vpc_config {
    subnet_ids              = var.subnet_ids
    endpoint_private_access = false
    endpoint_public_access  = true
  }

  # Ensure that IAM Role permissions are created before and deleted after EKS Cluster handling.
  # Otherwise, EKS will not be able to properly delete EKS managed EC2 infrastructure such as Security Groups.
  depends_on = [
    var.cluster_policy_role,
    var.vpn_resource_controller_role,
  ]
}

OIDC Provider 생성

OIDC를 통해 JSON web token(JWT)을 받고 이 토큰을 AWS Security Token Service(AWS STS)로 보내면 IAM 임시 role 자격 증명을 할 수 있다.

AWS Security Token Service(AWS STS)를 사용하면 AWS 리소스에 대한 액세스를 제어할 수 있는 임시 보안 자격 증명을 생성할 수 있다.

OIDC 자격 증명을 얻는 방법은 아래와 같다. 먼저 tls_certificate라는 TLS provider를 통해 thumbprint를 얻어 aws_iam_openid_connect_provider라는 OIDC Provider에 넣어준다.