KR_AWS_IAM - somaz94/DevOps-Engineer GitHub Wiki

AWS IAM & Assume Role

1. Assume Role

AWS μ—­ν•  가정을 μ‚¬μš©ν•˜λ©΄ μž„μ‹œ λ³΄μ•ˆ 자격 증λͺ…(μ•‘μ„ΈμŠ€ ν‚€, λ³΄μ•ˆ μ•‘μ„ΈμŠ€ ν‚€ 및 μ„Έμ…˜ 토큰)을 νšλ“ν•˜μ—¬ λ‹€λ₯Έ κ³„μ •μ˜ AWS λ¦¬μ†ŒμŠ€μ— μ•‘μ„ΈμŠ€ν•˜κ±°λ‚˜ λ™μΌν•œ 계정 λ‚΄μ—μ„œ λ‹€λ₯Έ κΆŒν•œμ„ μ‚¬μš©ν•  수 μžˆλ‹€.

  • sts:AssumeRole μž‘μ—…μ„ μ‚¬μš©ν•˜λ©΄ λ‹€λ₯Έ AWS κ³„μ •μ΄λ‚˜ μžμ‹ μ˜ 계정 내에 μ‘΄μž¬ν•˜λŠ” 역할을 맑을 수 μžˆλ‹€. 역할을 맑으면 ν•΄λ‹Ή μ—­ν• κ³Ό κ΄€λ ¨λœ κΆŒν•œμ„ μΌμ‹œμ μœΌλ‘œ νšλ“ν•˜κ²Œ λœλ‹€.

    • ꡐ차 계정 μ•‘μ„ΈμŠ€: λ‹€λ₯Έ AWS κ³„μ •μ˜ 역할을 λ§‘μ•„ ν•΄λ‹Ή κ³„μ •μ˜ λ¦¬μ†ŒμŠ€μ— μ•‘μ„ΈμŠ€ν•  수 μžˆλ‹€.
    • 동일 계정 λ‚΄: ν˜„μž¬ λͺ…령을 μ‹€ν–‰ν•˜λŠ” μ‚¬μš©μž λ˜λŠ” μ„œλΉ„μŠ€μ™€ λ‹€λ₯Έ κΆŒν•œμ„ κ°€μ§„ 역할을 λ§‘λŠ”λ‹€.
  • λ‹€μŒμ€ Assume Role 을 μ‚¬μš©ν•˜μ—¬ 계정 B의 EKS λ¦¬μ†ŒμŠ€μ— λŒ€ν•œ 계정 A μ•‘μ„ΈμŠ€ κΆŒν•œμ„ λΆ€μ—¬ν•˜λŠ” 방법이닀.

Step1: 계정 Bμ—μ„œ IAM μ—­ν•  생성

계정 Bμ—μ„œ 계정 Aκ°€ 이 역할을 맑도둝 ν—ˆμš©ν•˜λŠ” μ‹ λ’° 정책을 μ‚¬μš©ν•˜μ—¬ IAM 역할을 μƒμ„±ν•œλ‹€. 이 역할은 계정 Bμ—μ„œ EKS λ¦¬μ†ŒμŠ€λ₯Ό 관리할 수 μžˆλŠ” κΆŒν•œμ„ λΆ€μ—¬ν•œλ‹€.

  • 계정 B에 AssumeRole μ—­ν•  생성 μ˜ˆμ‹œ: 이 정책은 계정 A의 μ‚¬μš©μž λ˜λŠ” 역할이 λ‹€μŒ 역할을 맑도둝 ν—ˆμš©ν•œλ‹€.
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::123456789012:root" // Account A ID
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

λ˜λŠ” 계정 Aμ—μ„œ νŠΉμ • 역할을 μ§€μ •ν•  수 μžˆλ‹€.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::123456789012:role/AccountARole"  // Replace with specific role in Account A
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
  • 계정 B의 역할에 EKS κΆŒν•œμ„ μ—°κ²°ν•œλ‹€.
    • EKS λ¦¬μ†ŒμŠ€λ₯Ό κ΄€λ¦¬ν•˜κΈ° μœ„ν•΄ AmazonEKSClusterPolicy λ˜λŠ” μ‚¬μš©μž μ§€μ • κΆŒν•œκ³Ό 같은 ν•„μˆ˜ EKS 정책을 역할에 μ—°κ²°ν•œλ‹€.

Step2: 계정 Aμ—μ„œ IAM μ •μ±… 생성

계정 A의 μ‚¬μš©μž λ˜λŠ” μ„œλΉ„μŠ€κ°€ 계정 B의 역할을 맑도둝 ν—ˆμš©ν•˜λ €λ©΄ 계정 Aμ—μ„œ IAM 정책을 μƒμ„±ν•œλ‹€.

계정 A μ •μ±… μ˜ˆμ‹œ:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "sts:AssumeRole",
      "Resource": "arn:aws:iam::111122223333:role/EKSAdminRole" // Role ARN in Account B
    }
  ]
}
  • 이 정책을 계정 A의 ν•„μš”ν•œ μ‚¬μš©μž, κ·Έλ£Ή λ˜λŠ” 역할에 μ—°κ²°ν•œλ‹€.

Step3: 계정 Aμ—μ„œ μ—­ν•  μœ„μž„

역할을 맑을 κΆŒν•œμ΄ μžˆλŠ” 계정 A의 μ‚¬μš©μž λ˜λŠ” μ„œλΉ„μŠ€λŠ” AWS CLI, SDK λ˜λŠ” AWS μ½˜μ†”μ„ μ‚¬μš©ν•˜μ—¬ 이λ₯Ό μˆ˜ν–‰ν•  수 μžˆλ‹€.

AWS CLI μ˜ˆμ‹œ:

aws sts assume-role \
  --role-arn arn:aws:iam::111122223333:role/EKSAdminRole \
  --role-session-name eks-session
  • 이 λͺ…령은 계정 Bμ—μ„œ EKS ν΄λŸ¬μŠ€ν„°μ— μ•‘μ„ΈμŠ€ν•˜κ³  κ΄€λ¦¬ν•˜λŠ” 데 μ‚¬μš©ν•  수 μžˆλŠ” μž„μ‹œ 자격 증λͺ…(μ•‘μ„ΈμŠ€ ν‚€, λΉ„λ°€ ν‚€ 및 μ„Έμ…˜ 토큰)을 μ œκ³΅ν•œλ‹€.

Step4: μ•‘μ„ΈμŠ€λ₯Ό μœ„ν•΄ μž„μ‹œ 자격 증λͺ… μ‚¬μš©

  • μž„μ‹œ 자격 증λͺ…을 μ‚¬μš©ν•˜λ©΄ 계정 A에 κΆŒν•œμ΄ μžˆλŠ” κ²ƒμ²˜λŸΌ 계정 B의 λ¦¬μ†ŒμŠ€λ₯Ό 관리할 수 μžˆλ‹€.

계정 Bμ—μ„œ EKS ν΄λŸ¬μŠ€ν„°λ₯Ό κ΄€λ¦¬ν•˜λ„λ‘ kubeconfigλ₯Ό μ—…λ°μ΄νŠΈ μ˜ˆμ‹œ:

aws eks --region us-west-2 update-kubeconfig --name eks-cluster \
  --role-arn arn:aws:iam::111122223333:role/EKSAdminRole
  • 이λ₯Ό 계정 A의 kubectl을 μ‚¬μš©ν•˜μ—¬ 계정 Bμ—μ„œ EKS ν΄λŸ¬μŠ€ν„°λ₯Ό 관리할 수 μžˆλ‹€.

sts:AssumeRoleWithWebIdentity

Google, GitHub Actions, AWS Cognito λ˜λŠ” OIDC ν˜Έν™˜ ID κ³΅κΈ‰μžμ™€ 같은 μ™ΈλΆ€ κ³΅κΈ‰μž(OIDC λ˜λŠ” SAML)λ‘œλΆ€ν„° μ—°ν•©λœ IDλ₯Ό 기반으둜 역할을 μž„μ‹œλ‘œ νšλ“ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λœλ‹€.

인증 방식

AWS IAM 자격 증λͺ… λŒ€μ‹  OIDC 토큰 λ˜λŠ” SAML μ–΄μ„€μ…˜μ΄ ν•„μš”ν•˜λ‹€.

μ£Όμš” μ‚¬μš© 사둀
  • OIDC 톡합 μ•‘μ„ΈμŠ€: GitHub Actions, Kubernetes μ„œλΉ„μŠ€ 계정, AWS Cognito λ˜λŠ” μ™ΈλΆ€ ID κ³΅κΈ‰μžμ™€ 같은 CI/CD μ‹œμŠ€ν…œ.
  • μž₯κΈ° IAM 자격 증λͺ… 없이 AWS λ¦¬μ†ŒμŠ€μ— μ•ˆμ „ν•˜κ³  λ‹¨κΈ°μ μœΌλ‘œ μ ‘κ·Όν•  수 μžˆλ‹€.
  • OIDC κ³΅κΈ‰μžκ°€ μ‚¬μš©μžλ‚˜ μ„œλΉ„μŠ€μ— OIDC 토큰을 λ°œκΈ‰ν•˜κ³ , ν•΄λ‹Ή 토큰을 AssumeRoleWithWebIdentity API ν˜ΈμΆœμ— ν¬ν•¨ν•˜μ—¬ AWS둜 μ „μ†‘ν•œλ‹€.
  • AWSλŠ” κ΅¬μ„±λœ OIDC κ³΅κΈ‰μžλ₯Ό κΈ°μ€€μœΌλ‘œ 토큰을 κ²€μ¦ν•˜κ³ , 토큰 및 쑰건이 μœ νš¨ν•œ 경우 역할에 λŒ€ν•œ μž„μ‹œ 자격 증λͺ…을 λ°œκΈ‰ν•œλ‹€.
sts:AssumeRole vs sts:AssumeRoleWithWebIdentity
νŠΉμ§• sts:AssumeRole sts:AssumeRoleWithWebIdentity
인증 방식 AWS IAM 자격 증λͺ… (μ•‘μ„ΈμŠ€ 킀와 λΉ„λ°€ ν‚€) OIDC 토큰 λ˜λŠ” SAML μ–΄μ„€μ…˜
μ‚¬μš© 사둀 AWS λ‚΄ 계정 κ°„ μ ‘κ·Ό μ™ΈλΆ€ κ³΅κΈ‰μžλ‘œλΆ€ν„° 톡합 μ ‘κ·Ό
지원 ID μœ ν˜• AWS IAM μ—”ν„°ν‹°(μ‚¬μš©μž, κ·Έλ£Ή, μ—­ν• ) μ—°ν•© ID(예: Google, GitHub, Cognito)
CI/CD 톡합 λ“œλ¬Όκ²Œ μ‚¬μš©λ¨ GitHub Actions, Kubernetes λ“±μ—μ„œ 자주 μ‚¬μš©λ¨

β†’ λͺ©λ‘μœΌλ‘œ λŒμ•„κ°€κΈ°

⚠️ **GitHub.com Fallback** ⚠️