K8s 리소스로 IAM 역할 관리

(Naveen M) (2020 년 7 월 10 일)

AWS의 Kubernetes 클러스터에 배포 된 애플리케이션은 AWS 리소스를 관리하고 액세스하기위한 IAM 역할. Intuit에는 200 개 이상의 클러스터와 8000 개 이상의 네임 스페이스가 있습니다. 최근까지 IAM 역할은 중앙 집중식 애플리케이션의 Kubernetes 리소스와 별도로 관리되었습니다.

이는 잘 작동했지만 개발자가 애플리케이션을 배포하기 전에 IAM 정책을 수동으로 업데이트해야했습니다. IAM 정책 업데이트에 필요한 수동 변경으로 인해 개발자가 때때로 IAM 정책을 다음 스테이징 환경으로 승격하는 동안 업데이트하는 것을 잊어 버리는 오류가 발생했으며 이로 인해 많은 개발자에게 불만이 생겼습니다.

사용했습니다. 클러스터 관리 서비스에서 허용해야하는 권한을 제어하기 위해 일부 플랫폼 애플리케이션은 더 관대 한 정책을 허용하기 위해 예외가 필요했습니다. 예외를 코드에 적용하기 시작했지만 곧 더 확장 가능한 솔루션이 필요하다는 것을 깨달았습니다.

그때 iam-manager를 생각해 냈습니다. iam-manager 는 Kubernetes 리소스로 AWS IAM 역할을 관리하기위한 k8s CRD (사용자 지정 리소스 정의)입니다. iam-manager는 Keiko 프로젝트 의 일부로 오픈 소스이며 애플리케이션이 배포 파이프 라인의 일부로 IAM 역할을 안전하고 편리하게 만들고 관리 할 수 ​​있도록합니다 (예 : kubectl 적용) 다른 Kubernetes 리소스와 함께.

역할과 권한을 생성하거나 수정하는 모든 기능과 마찬가지로 보안이 가장 중요합니다. iam-manager는 AWS IAM 권한 경계 와 기타 보호 장치를 사용하여 적절한 수준의 가시성과 제어를 보장합니다.

AWS IAM 권한 경계 재생 개발자가 IAMRole 사양에 IAM 권한을 포함 할 수 있고 eks : * 또는 ec2 : * 권한이있는 IAM 역할이있는 애플리케이션이 전체 클러스터를 파괴 할 수 있기 때문에 보안 측면에서 중요한 역할을합니다. IAM 관리자가 생성 한 역할에 어떤 권한을 위임 할 수 있는지 제어하고 싶었고 권한 경계는 우리에게 완벽한 선택입니다. AWS IAM 권한 경계는 IAM 역할 정책에 지정된 내용에 관계없이 액세스 할 수있는 최대 허용 / (또는 거부) IAM 권한 목록으로 경계를 생성 할 수있는 개념입니다. 간단히 말해 실제 권한은 권한 경계 및 IAM 역할 정책에 지정된 권한의 교차 입니다.

p>

IAM 역할에 “ AdministratorAccess “정책이있는 예를 들어 보겠습니다. 이는 거의 모든 액세스 권한이 있지만 권한 경계를 연결하면 s3 : Get * 액세스 권한 만 있고 (사용자가 변경할 수없고 클러스터 관리자 만 변경할 수 있음) 역할에 “Administrator”권한이 있더라도 IAM 역할은 s3 : Get * 만 수행 할 수 있습니다. 간단히 말해서 권한 경계는 iam-manager CRD가 위임 할 수있는 권한을 제한하는 데 사용됩니다. 자세한 내용은 aws 설명서에서 AWS IAM 권한 경계 를 확인하세요.

IAMRole 사양에있는 경우 IAM 역할 생성을 거부하는 웹훅도 있습니다. 구성 맵을 통해 구성 할 수있는 화이트리스트 정책에 포함되지 않은 정책입니다. AWS IAM Permission Boundary는 과도한 권한을 처리하지만 정책을 매우 깔끔하게 유지하는 데 사용할 수 있으므로 이는 전적으로 선택 사항 입니다.

p>

마지막으로 우리는 iam-manager-controller pod 자체에 할당 된 IAM 역할에 매우주의해야했고 제한된 작업 만 수행 할 수있는 방식으로 IAM 권한 정책을 신중하게 설계했습니다. 즉, 사전 정의 된 권한 경계를 연결하지 않으면 IAM 역할을 생성 할 수 없으며 사전 정의 된 이름 (예 : k8s- *)으로 만 역할을 생성 할 수 있으며 사전 정의 된 TAG가없는 역할은 삭제할 수 없습니다. (iam-manager 만 만든 역할에 TAG를 추가했습니다). 자세한 내용은 iam-manager IAM 정책 을 참조하세요.

iam-manager를 설치하고 사용해 보려면 :

git clone 
[email protected]:keikoproj/iam-manager.git
cd hack#update config map according to your requirements. please refer #
config map for all the configuration options
vim iammanager.keikoproj.io\_iamroles-configmap.yamlexport KUBECONFIG=/Users/myhome/.kube/[email protected]
export AWS\_PROFILE=admin\_123456789012\_account
#./install.sh [cluster\_name] [aws\_region] [aws\_profile]
./install.sh eks-dev2-k8s us-west-2 aws\_profile

다음은 간단한 예입니다.

apiVersion: iammanager.keikoproj.io/v1alpha1
kind: Iamrole
metadata:
name: iam-manager-iamrole
spec:
# Add fields here
PolicyDocument:
Statement:
-
Effect: "Allow"
Action:
- "s3:Get*"
Resource:
- "arn:aws:s3:::intu-oim*"
Sid: "AllowS3Access"
AssumeRolePolicyDocument:
Version: "2012-10-17"
Statement:
-
Effect: "Allow"
Action: "sts:AssumeRole"
Principal:
AWS:
- "arn:aws:iam::XXXXXXXXXXX:role/20190504-k8s-kiam-role"

제출하려면 kubectl apply -f iam\_role .yaml — ns namespace1

IAM 역할을 만들고 원하는 상태를 항상 유지하는 것 외에도 주석을 추가하여 IRSA (서비스 계정에 대한 IAM 역할)에 대한 역할 생성을 지원합니다. br>” iam.amazonaws.com/irsa-service-account : 를 IAM 역할 사양으로 .

apiVersion: iammanager.keikoproj.io/v1alpha1
kind: Iamrole
metadata:
name: iam-manager-iamrole-irsa
annotations:
iam.amazonaws.com/irsa-service-account: aws-sa
spec:
# Add fields here
PolicyDocument:
Statement:
-
Effect: "Allow"
Action:
- "s3:Get*"
Resource:
- "arn:aws:s3:::intu-oim*"
Sid: "AllowS3Access"

요약하면 Kubernetes 클러스터에 iam-manager를 추가하면 클러스터 내에서 AWS IAM 역할 관리를위한 안전하고 편리한 솔루션을 제공 할뿐만 아니라 애플리케이션도 허용합니다. GitOps를 통해 다른 Kubernetes 리소스와 함께 배포 파이프 라인의 일부로 IAM 역할을 만들 수 있습니다.

전체 기능 목록은 의 기능 섹션을 확인하세요. div> https://github.com/keikoproj/iam-manager .

또한 (Ed Lee), (Kshama Jain) 및 다른 팀원들에게 소중한 기여를 해주신 iam-manager.

최신 글

보관함

메타