개요
테라폼을 사용할 때 자격 증명을 Access Key 방식을 사용하려고 했었는데, 여간 찜찜한 일이 아닐수 없었다. 그래서 검색 중 OIDC를 설정해서 AssumeRoleWithWebIdentity
를 이용해 Role을 Assume 해주는 방식이 있다는 것을 알았다.
가이드는 Github 제공 가이드와 AWS 제공 가이드가 있다.
OIDC(OpenID Connect)를 사용하면 클라우드 공급자에게 직접 수명이 짧은 액세스 토큰을 요청하도록 워크플로를 구성하여 다른 접근 방식을 취할 수 있습니다. 또한 클라우드 공급자는 OIDC를 지원해야 하며, 액세스 토큰을 요청할 수 있는 워크플로를 제어하는 트러스트 관계를 구성해야 합니다. 현재 OIDC를 지원하는 공급자로는 Amazon Web Services, Azure, Google Cloud Platform 및 HashiCorp Vault 등이 있습니다.
위의 사진은 OIDC가 적용되는 과정이다.
- 클라우드 공급자에서 클라우드에 액세스해야 하는 클라우드 역할과 GitHub Workflow 간에 OIDC 트러스트를 만듭니다.
- 작업이 실행될 때마다 GitHub의 OIDC 공급자는 OIDC 토큰을 자동으로 생성합니다. 이 토큰에는 인증하려는 특정 워크플로에 대해 보안이 강화되고 확인 가능한 ID를 설정하는 여러 클레임이 포함되어 있습니다.
- GitHub의 OIDC 공급자에서 이 토큰을 요청하고 클라우드 공급자에게 표시하는 단계 또는 동작을 작업에 포함할 수 있습니다.
- 클라우드 공급자가 토큰에 제공된 클레임의 유효성을 성공적으로 검사하면 작업 기간 동안에만 사용할 수 있는 수명이 짧은 클라우드 액세스 토큰을 제공합니다.
Access Key 방식보다는 훨씬 좋다고 생각이 든다. Assume Role의 위력은 여실히 알고 있기 때문에 따로 생각할 겨를도 없이 바로 적용해보고자 한다.
과정
자격 증명 공급자 생성
먼저 AWS에서 IAM OIDC 자격 증명 공급자를 생성해주어야한다.
GitHub 에서는 위와 같이 가이드 해주고 있다. 동일하게 생성해본다.
Provider는 정상적으로 생성하고, 이번엔 실제 작업을 진행할 수 있는 IAM Role을 생성하도록 한다.
Web identity 로 선택하게 되면 하위에 자동으로 Input 항목들이 생긴다. 본인 환경에 맞춰서 잘 기입해주면 된다.
Role도 정상적으로 생성이 되었다. Edit 버튼으로 Maximum session duration도 수정할 수 있으니 필요에 의해서 수정하면 될 것이다.
주의해야할 점은 신뢰관계 정책을 설정해야한다는 점이고, Web Idnetiry 로 선택하고 생성하게 되면 신뢰관계 정책을 설정하는 페이지가 Role 생성 과정에서 따로 있었던 것 같다.
Role을 생성완료 하면 GitHub Actions에 있는 configure-aws-credentials 를 이용해 Workflow에 설정해주면 된다.
위의 actions를 사용하기 위해서 두가지 항목에 집중하면 된다.
permissions:
id-token: write
contents: read
###################################
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v4
with:
# assume role을 위한 arn
role-to-assume: $AWS_ROLE_TO_ASSUME
aws-region: us-east-1 # Required
첫 번째는 AWS와의 OIDC를 위해 단기 자격 증명을 발급하는 과정에서 JWT를 생성하고, 이 토큰을 이용해서 역할을 Assume 한다고 한다. Assume하기 위해서는 id-token: write 가 필요하다. 해당 내용은 링크 에서 확인 가능하다.
또한 role-to-assume을 이용해 아까 생성한 Role의 Arn 을 지정해주면 action을 이용해 인증과정이 이루어진다. 나 같은 경우 GitHub에서 secrets를 이용해 해당 Arn을 제공해주었다.
인증이 성공적으로 완료되면 위와 같이 Assume을 진행하고 파이프라인을 계속 진행하게 된다.
[참조] :
https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/id_roles_providers_create_oidc.html
'기타 > 토이프로젝트' 카테고리의 다른 글
[Familiar] Terraform output for 반복문 사용하기 (0) | 2024.08.20 |
---|---|
[Familiar] Terraform 구조 잡기 & 문제 해결 (0) | 2024.08.08 |
[Familiar] Terraform plan & apply with GitHub Actions (0) | 2024.08.06 |
[Familiar] 토이 프로젝트 개요 (0) | 2024.08.01 |