KR_AWS_IAM - somaz94/DevOps-Engineer GitHub Wiki
AWS μν κ°μ μ μ¬μ©νλ©΄ μμ 보μ μ격 μ¦λͺ (μ‘μΈμ€ ν€, 보μ μ‘μΈμ€ ν€ λ° μΈμ ν ν°)μ νλνμ¬ λ€λ₯Έ κ³μ μ AWS 리μμ€μ μ‘μΈμ€νκ±°λ λμΌν κ³μ λ΄μμ λ€λ₯Έ κΆνμ μ¬μ©ν μ μλ€.
-
sts:AssumeRoleμμ μ μ¬μ©νλ©΄ λ€λ₯Έ AWS κ³μ μ΄λ μμ μ κ³μ λ΄μ μ‘΄μ¬νλ μν μ λ§‘μ μ μλ€. μν μ λ§‘μΌλ©΄ ν΄λΉ μν κ³Ό κ΄λ ¨λ κΆνμ μΌμμ μΌλ‘ νλνκ² λλ€.- κ΅μ°¨ κ³μ μ‘μΈμ€: λ€λ₯Έ AWS κ³μ μ μν μ λ§‘μ ν΄λΉ κ³μ μ 리μμ€μ μ‘μΈμ€ν μ μλ€.
- λμΌ κ³μ λ΄: νμ¬ λͺ λ Ήμ μ€ννλ μ¬μ©μ λλ μλΉμ€μ λ€λ₯Έ κΆνμ κ°μ§ μν μ λ§‘λλ€.
-
λ€μμ Assume Role μ μ¬μ©νμ¬ κ³μ Bμ EKS 리μμ€μ λν κ³μ A μ‘μΈμ€ κΆνμ λΆμ¬νλ λ°©λ²μ΄λ€.
κ³μ 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 μ μ± μ μν μ μ°κ²°νλ€.
- EKS 리μμ€λ₯Ό κ΄λ¦¬νκΈ° μν΄
κ³μ 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μ νμν μ¬μ©μ, κ·Έλ£Ή λλ μν μ μ°κ²°νλ€.
μν μ λ§‘μ κΆνμ΄ μλ κ³μ 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 ν΄λ¬μ€ν°μ μ‘μΈμ€νκ³ κ΄λ¦¬νλ λ° μ¬μ©ν μ μλ μμ μ격 μ¦λͺ (μ‘μΈμ€ ν€, λΉλ° ν€ λ° μΈμ ν ν°)μ μ 곡νλ€.
- μμ μ격 μ¦λͺ μ μ¬μ©νλ©΄ κ³μ 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 ν΄λ¬μ€ν°λ₯Ό κ΄λ¦¬ν μ μλ€.
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 ν ν°μ λ°κΈνκ³ , ν΄λΉ ν ν°μ
AssumeRoleWithWebIdentityAPI νΈμΆμ ν¬ν¨νμ¬ AWSλ‘ μ μ‘νλ€. - AWSλ ꡬμ±λ OIDC 곡κΈμλ₯Ό κΈ°μ€μΌλ‘ ν ν°μ κ²μ¦νκ³ , ν ν° λ° μ‘°κ±΄μ΄ μ ν¨ν κ²½μ° μν μ λν μμ μ격 μ¦λͺ μ λ°κΈνλ€.
| νΉμ§ | sts:AssumeRole |
sts:AssumeRoleWithWebIdentity |
|---|---|---|
| μΈμ¦ λ°©μ | AWS IAM μ격 μ¦λͺ (μ‘μΈμ€ ν€μ λΉλ° ν€) | OIDC ν ν° λλ SAML μ΄μ€μ |
| μ¬μ© μ¬λ‘ | AWS λ΄ κ³μ κ° μ κ·Ό | μΈλΆ 곡κΈμλ‘λΆν° ν΅ν© μ κ·Ό |
| μ§μ ID μ ν | AWS IAM μν°ν°(μ¬μ©μ, κ·Έλ£Ή, μν ) | μ°ν© ID(μ: Google, GitHub, Cognito) |
| CI/CD ν΅ν© | λλ¬Όκ² μ¬μ©λ¨ | GitHub Actions, Kubernetes λ±μμ μμ£Ό μ¬μ©λ¨ |