본문 바로가기
CSP (Cloud Service Provider)/AWS

[Assume Role with Web Identity] 구글 계정으로 AWS SDK 사용하기

by BTC_ryul 2023. 8. 4.

안녕하세요, 엄..팀입니다.

이번 시간에는 Google Oauth2.0을 활용하여 AWS Role을 Assume하고, 임시자격증명을 통해 AWS SDK를 Keyless로 사용하는 방법에 대해 알아보겠습니다.

 

사전작업

  • go 설치
  • Oauth consent screen 구성

1. Oauth2.0 Client ID 생성

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 확인

{
    "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 

 

댓글