2024년 12월 12일 업데이트:
해당 게시글에서 언급한 PR이 머지되었습니다. 이제 이 글은 읽을 필요 없겠습니다. ;)
지난 포스팅에서 Terraform 으로 Identity Provider 를 설정하는 방법에 대해 기술했습니다.
리소스 블럭:
resource "aws_iam_openid_connect_provider" "github_actions_idp" {
url = "https://token.actions.githubusercontent.com"
client_id_list = ["sts.amazonaws.com"]
thumbprint_list = [var.github_thumbprint]
}
오늘은 이 thumbprint_list 값에 대한 이야기를 다룹니다.
테라폼 공식 문서를 보면 리소스는 다음과 같이 정의되어 있습니다.
- url - (Required) The URL of the identity provider. Corresponds to the iss claim.
- client_id_list - (Required) A list of client IDs (also known as audiences). When a mobile or web app registers with an OpenID Connect provider, they establish a value that identifies the application. (This is the value that's sent as the client_id parameter on OAuth requests.)
- thumbprint_list - (Required) A list of server certificate thumbprints for the OpenID Connect (OIDC) identity provider's server certificate(s).
이중에서도 thumbprint_list 값은 Required 값으로, Identity Provider 를 검증하는 데 사용한다고 합니다.
certificate thumbprint를 가져오는 것은 번거롭다
직접 certificate thumbprint 를 가져오는 일은 꽤나 번거로운 일입니다. 사실, AWS Management Console 에서 리소스를 생성하고자 한다면 이 과정이 필요 없습니다.
직접 확인해보아도 thumbprint 를 입력하는 필드는 확인할 수 없습니다. 콘솔에서 Identity Provider 를 구성하고 AWS CLI 를 통해 thumbprint 를 조회해봅시다.
aws iam get-open-id-connect-provider \\
--open-id-connect-provider-arn arn:aws:iam::123456789012:oidc-provider/your-idp
>>
{
"Url": "token.actions.githubusercontent.com",
"ClientIDList": [
"sts.amazonaws.com"
],
"ThumbprintList": [
"1b511abead59c6ce207077c0bf0e0043b1382612"
],
"CreateDate": "2024-07-18T01:42:11.251000+00:00",
"Tags": []
}
저희는 입력한 적이 없지만 ThumbprintList 가 “알아서 잘” 들어가 있습니다. 신기하군요. 저는 여기서 왜 Terraform 에서는 이 값이 필수인지 궁금해졌습니다.
AWS CLI 에서 설명을 보도록 합시다.
aws iam create-open-id-connect-provider help
>>
...
--thumbprint-list (list)
A list of server certificate thumbprints for the OpenID Connect
(OIDC) identity provider's server certificates. Typically this list
includes only one entry. However, IAM lets you have up to five
thumbprints for an OIDC provider. This lets you maintain multiple
thumbprints if the identity provider is rotating certificates.
This parameter is optional. If it is not included, IAM will retrieve
and use the top intermediate certificate authority (CA) thumbprint
of the OpenID Connect identity provider server certificate.
The server certificate thumbprint is the hex-encoded SHA-1 hash
value of the X.509 certificate used by the domain where the OpenID
Connect provider makes its keys available. It is always a 40-charac-
ter string.
CLI 에서도 확인할 수 있듯 이 인자는 optional 입니다. 그러므로 Terraform 에서도 thumbprint_list 가 optional 이어야 하지만, 아직은 필수 값으로 남아있는 것 같습니다.
찾아보니 실제로 저와 같은 고민을 하고 테라폼에서 thumbprint_list 값을 Optional 로 바꾸는 작업을 진행하고 Pull Request 를 올려주신 분이 계십니다. 이를 확인하고 싶다면 다음을 참고하세요.
AWS secures communication with some OIDC identity providers (IdPs) through a library of trusted root certificate authorities (CAs) instead of using a certificate thumbprint to verify the IdP server certificate. In these cases, a specified thumbprint list remains in the configuration, but is not used for validation. These OIDC IdPs include Auth0, GitHub, GitLab, Google, and those that use an Amazon S3 bucket to host a JSON Web Key Set (JWKS) endpoint.
추가로 이런 정보를 찾았습니다. Github 을 포함한 몇몇 OIDC 를 사용하는 경우 직접 thumbprint 를 넘겨준다고 하더라도 AWS 는 해당 값을 사용하지도 않습니다. 정말 그런지 확인해봅시다.
먼저, thumbprint list 값으로 임의의 문자열을 입력해줍니다:
variable "github_thumbprint" {
description = "Github OIDC thumbprint"
type = string
default = "mushroomommushroomommushroomommushroomom"
}
리소스 생성 후, 다음 명령어를 통해 thumbprint list 를 조회할 수 있습니다:
aws iam get-open-id-connect-provider \\
--open-id-connect-provider-arn arn:aws:iam::123456789012:oidc-provider/your-idp
>>
{
"Url": "token.actions.githubusercontent.com",
"ClientIDList": [
"sts.amazonaws.com"
],
"ThumbprintList": [
"mushroomommushroomommushroomommushroomom"
],
"CreateDate": "2024-07-18T01:42:11.251000+00:00",
"Tags": []
}
결과에서 확인할 수 있듯, thumbprint list 에 아무 값이나 넣은 것을 확인할 수 있습니다. 그럼 정상적으로 작동하지 않을까요?
여전히 잘 작동하고 있습니다. IdP 에 대한 검증이 여러분이 입력한 certificate thumbprint 대신 trusted root certificate authorities (CAs) 를 통해 이루어지기 때문입니다.
결론
결론입니다. Github Actions 로 활용을 원하시는 케이스라면, 테라폼 리소스 블럭의 thumbprint_list 에는 아무 값이나 40자 넣으시면 됩니다. 테라폼이 해당 변경 사항을 반영해주었으면 좋겠네요. 그렇다고 진짜 아무 값이나 넣으라고 하니 불편하신 분들이 있을겁니다.
- Github 의 OIDC Identity Provider 를 사용하고자 한다면, 다음을 입력하세요: 1b511abead59c6ce207077c0bf0e0043b1382612
- 그 외의 thumbprint 를 알고싶다면, 두 방법이 있습니다. 먼저, 공식 문서를 따라가며 확인하고자 하신다면 다음을 참고하세요. 또는, AWS Management Console 에서 Identity Provider 를 등록한 뒤에 AWS CLI 를 호출하여 thumbpirint 를 확인할 수 있습니다. (테라폼으로 편하게 프로비저닝 하고자 했는데 오히려 콘솔을 참고하고 있는 아이러니..)
마치며
이 글을 읽고 공감하셨다면, 특히 테라폼 기능의 업데이트가 이루어지길 바라신다면 해당 Pull Request 에 따봉 리액션 👍 부탁드립니다.
Pull Request에 대한 관심은 빠른 점검과 반영으로 이어집니다(실제로 priortizing 에 기여할 수 있습니다). 제가 작업한 내용은 아니지만 반영 되었으면 좋겠네요.
2024년 12월 12일 업데이트:
해당 게시글에서 언급한 PR이 머지되었습니다. 이제 이 글은 읽을 필요 없겠습니다. ;)
'AWS' 카테고리의 다른 글
[EN]Multi-account environment with CloudFormation StackSets (0) | 2024.08.16 |
---|---|
AWS re:Post web crawler with AWS Serverless services (0) | 2024.08.08 |
[AWS IAM] Hands-on: Github Actions에 임시 자격 증명 사용하기 (0) | 2024.07.17 |
[AWS IAM] Identity Federation & Cognito Basics (0) | 2024.07.16 |
[AWS IAM] STS Basics (0) | 2024.07.15 |