IAM role과 k8s service account를 연동시켜 쿠버네티스 상에 provisioning되는 리소스들에 대한 AWS APIs를 호출할 수 있는 권한을 부여하자.
IAM role과 k8s service account를 연동하는 이유는?
IAM role이 부여된 service account는 아래와 같은 장점이 있다.
k8s 인증 완벽이해 #3 - OpenID Connect
Google OAuth와 같은 인증 provider이다. OpenID Connect(OIDC)는 권한허가 프로토콜인 OAuth 2.0 기술을 이용하여 만들어진 인증 레이어다. OpenID Connect를 이용하면 손쉽게 외부 서비스를 통하여 사용자 인증을 구현할 수 있다. 참고로 OAuth 2.0는 권한허가를 처리하기 위해 만들어진 표준 프로토콜이다. Google, Facebook, Twitter 등에서 자신의 서비스를 외부 시스템에서 사용할 수 있게 제공해주기 위해서 생겨난 기술이다. → Google id로 넷플릭스 등 다른 서비스에 로그인 가능한 것

본 실습을 하려면 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를 통해 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에 넣어준다.