안녕하세요, 엄..팀입니다.
이번 시간에는 Google Oauth2.0을 활용하여 AWS Role을 Assume하고, 임시자격증명을 통해 AWS SDK를 Keyless로 사용하는 방법에 대해 알아보겠습니다.
사전작업
- go 설치
- Oauth consent screen 구성
1. Oauth2.0 Client ID 생성
- redirect URL : http://127.0.0.1:3000/auth/google/callback
2. 생성 완료된 Client ID 및 Client Secret 확인
{
"web": {
"client_id": "**{{ CLIENT_ID }}**",
"project_id": "{{ PROEJCT_ID }}",
"auth_uri": "<https://accounts.google.com/o/oauth2/auth>",
"token_uri": "<https://oauth2.googleapis.com/token>",
"auth_provider_x509_cert_url": "<https://www.googleapis.com/oauth2/v1/certs>",
"client_secret": "**{{ CLIENT_SECRET }}**",
"redirect_uris": [
""
]
}
}
3. AWS Role 생성 및 권한 부여
- 임시로 AdministratorAccess 권한을 부여했습니다.
- 해당 Role에 필요한 권한을 부여하시면 됩니다.
4. AWS Role 신뢰관계 설정 (Trust Relationship)
- GCP에서 생성한 Client ID를 대체하시면 됩니다.
{
"Version": "2012-10-17",
"Statement":
{
"Effect": "Allow",
"Principal": {
"Federated": "accounts.google.com"
},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringEquals": {
"accounts.google.com:aud": "{{ CLIENT_ID }}.apps.googleusercontent.com"
}
}
}
]
}
5. GCP ID Token 획득
참고 : https://github.com/ssup2/golang-Google-OIDC.git
git clone <https://github.com/ssup2/golang-Google-OIDC.git>
# 환경 변수 세팅 (GCP Oauth2.0)
export GOOGLE_OAUTH2_CLIENT_ID={{ CLIENT_ID }}
export GOOGLE_OAUTH2_CLIENT_SECRET={{ CLIENT_SECRET }}
go run main.go
6. ID Token 확인
- http://127.0.0.1:3000 접속을 하면 다음 json형식의 ID Token을 확인할 수 있습니다.
{
"OAuth2Token": {
"access_token": "~",
"token_type": "Bearer",
"expiry": "2023-08-04T16:27:04.020651+09:00"
},
"IDToken": "**{{ ID_TOKEN }}**",
"IDTokenClaims": {
"iss": "<https://accounts.google.com>",
"azp": "~.apps.googleusercontent.com",
"aud": "~.apps.googleusercontent.com",
"sub": "~",
"email": "~",
"email_verified": true,
"at_hash": "~",
"nonce": "~",
"name": "~",
"picture": "~",
"given_name": "~",
"family_name": "조~,
"locale": "ko",
"iat": 1691130425,
"exp": 1691134025
}
}
7. Assume Role with Web Identity
aws sts assume-role-with-web-identity \\
--role-arn arn:aws:iam::123123123:role/GCP_OIDC_TEST \\
--role-session-name ~@gmail.com \\
--web-identity-token {{ ID_TOKEN }}
8. 임시자격증명 확인 및 환경변수 설정
{
"Credentials": {
"AccessKeyId": "{{ AWS_ACCESS_KEY_ID }}",
"SecretAccessKey": "{{ AWS_SECRET_ACCESS_KEY }}",
"SessionToken": "{{ AWS_SESSION_TOKEN }}",
"Expiration": "2023-08-04T06:06:03+00:00"
},
"SubjectFromWebIdentityToken": "114200070156872558746",
"AssumedRoleUser": {
"AssumedRoleId": "~",
"Arn": "arn:aws:sts::123123123:assumed-role/GCP_OIDC_TEST/~@gmail.com"
},
"Provider": "accounts.google.com",
"Audience": "~.apps.googleusercontent.com"
}
export AWS_ACCESS_KEY_ID = ABCDEFG123456789
export AWS_SECRET_ACCESS_KEY = ABCDEFG123456789
export AWS_SESSION_TOKEN = ABCDEFG123456789
9. 동작 수행 확인
aws s3 ls
![](https://t1.daumcdn.net/keditor/emoticon/friends1/large/025.gif)
'CSP (Cloud Service Provider) > AWS' 카테고리의 다른 글
[AWS]기존RDS 엔드포인트를 신규 RDS에 적용하는 방법 (0) | 2023.08.04 |
---|---|
AWS VPC FlowLog (0) | 2023.08.04 |
[AWS] VPC Traffic Mirroring (0) | 2023.08.04 |
[AWS] 예약 인스턴스(RI) 개념과 특징 (0) | 2023.08.03 |
AWS Global infra structure - Local zone (0) | 2023.08.03 |
댓글