기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Terraform을 사용하여 AWS 권한 집합을 동적으로 관리
Vinicius Elias 및 Marcos Vinicius Pinto Jordao, Amazon Web Services
요약
AWS IAM Identity Center 는 AWS 계정 및 클라우드 애플리케이션에 대한 Single Sign-On 액세스를 관리하기 위한 중앙 집중식 허브를 제공하여 AWS Identity and Access Management (IAM)를 개선합니다. 그러나 IAM Identity Center 권한 세트의 수동 관리는 조직이 성장함에 따라 점점 더 복잡해지고 오류가 발생하기 쉽습니다. 이러한 복잡성으로 인해 잠재적인 보안 격차와 관리 오버헤드가 발생할 수 있습니다.
이 솔루션을 사용하면 네이티브로 구축된 지속적 통합 및 지속적 전달(CI/CD) 파이프라인을 사용하여 코드형 인프라(IaC)를 통해 권한 세트를 관리할 수 있습니다 AWS 서비스. 권한 세트 할당 메커니즘을 AWS Control Tower 수명 주기 이벤트 또는 Account Factory for Terraform(AFT) 환경과 원활하게 통합할 수 있습니다. 이 접근 방식은 신규 및 기존 모두에 동적 자격 증명 구성을 제공합니다 AWS 계정.
Amazon EventBridge 규칙은 AWS 계정 생성 및 업데이트를 모니터링하여 ID 구성을 조직 구조와 동기화된 상태로 유지하는 데 도움이 됩니다. AWS Control Tower 또는 AFT에서 계정을 생성하거나 업데이트하면 파이프라인이 트리거됩니다. 권한 세트 정의 및 할당 규칙을 사용하여 JSON 파일 세트를 평가합니다. 그런 다음 파이프라인은 모든 계정에 걸쳐 설정을 적용하고 동기화합니다.
이 접근 방식은 다음과 같은 이점을 제공합니다.
일관성 - AWS 조직 전체의 수동 구성 드리프트 제거
감사 가능성 - 모든 자격 증명 관리 변경 사항에 대한 전체 기록을 유지합니다.
확장성 - AWS 환경이 증가함에 따라 구성을 자동으로 적용합니다.
보안 - 권한 할당에서 인적 오류를 줄입니다.
규정 준수 - 문서화된 변경 사항 및 할당 규칙을 통해 규제 요구 사항 충족을 촉진합니다.
사전 조건 및 제한 사항
AWS Control Tower 및가 AWS Organizations 설정된 다중 계정 환경입니다. 선택적으로 AFT를와 함께 사용할 수 있습니다 AWS Control Tower.
IAM Identity Center가 솔루션을 수신 AWS 계정 하도록 관리자를 위임했습니다. 자세한 내용은 IAM Identity Center 설명서의 위임된 관리를 참조하세요.
기본 코드를 처리하기 위한 버전 관리 시스템(VCS) 리포지토리입니다. 샘플은 솔루션의 GitHub 리포지토리
를 참조하세요. Amazon Simple Storage Service(Amazon S3) 버킷 및 Amazon DynamoDB 테이블과 같은 Terraform 백엔드 관리에 필요한 AWS 리소스입니다.
제한 사항
파이프라인은 AWS 네이티브 리소스와 오픈 소스 Terraform을 사용합니다. 파이프라인은 타사 에코시스템을 호출할 준비가 되어 있지 않습니다.
일부 AWS 서비스 는 전혀 사용할 수 없습니다 AWS 리전. 리전 가용성은 AWS 리전별 서비스를
참조하세요. 특정 엔드포인트는 서비스 엔드포인트 및 할당량을 참조하고 서비스 링크를 선택합니다.
아키텍처
다음 다이어그램은이 패턴의 구성 요소와 워크플로를 보여줍니다.

AWS Control Tower 이벤트 흐름
솔루션은 AWS Control Tower 또는 AFT에서 발생하는 이벤트의 통합으로 시작됩니다. 변수 정의를 통해 구현 시 하나 또는 다른 서비스 중에서 선택합니다. 사용된 방법에 관계없이 계정이 생성되거나 업데이트될 때마다 파이프라인이 트리거됩니다. 파이프라인은 권한 세트 관리 리포지토리에 저장된 정책을 조정합니다.
수명 AWS Control Tower 주기 이벤트는 다음과 같습니다.
CreateManagedAccount
- 새 계정이 생성될 때UpdateManagedAccount
- 기존 계정이 업데이트되는 경우
이벤트 라우팅
EventBridge는 AWS Control Tower 계정에서 생성된 이벤트를 캡처하는 중앙 이벤트 처리 서비스 역할을 합니다. 이벤트가 발생하면 EventBridge는 이를 솔루션 계정의 중앙 집중식 이벤트 버스로 지능적으로 라우팅합니다. AWS Control Tower 수명 주기 이벤트는 고유한 라우팅 패턴을 따릅니다. AFT가 이벤트 소스로 정의된 경우 AFT 관리 계정은 AWS Control Tower 계정 대신 이벤트를 처리합니다. 이 이벤트 기반 아키텍처를 사용하면 수동 개입 없이 조직 변화에 자동으로 대응할 수 있습니다.
AFT 통합 프로세스
AWS Control Tower 수명 주기 이벤트가 AFT 관리 계정에 도달하면 AFT에 고유한 여러 다운스트림 프로세스를 자동으로 트리거합니다. AFT 계정 사용자 지정 워크플로가 완료되면 전용 aft-notifications
Amazon Simple Notification Service(Amazon SNS) 주제에 메시지가 게시됩니다. 이 주제는이 솔루션에서 구현한 aft-new-account-forward-event
AWS Lambda 함수를 트리거합니다. Lambda 함수는 파이프라인을 시작하는 데 사용되는 솔루션 계정 이벤트 버스로 이벤트를 보냅니다.
코드형 인프라 파이프라인
솔루션 파이프라인은 완전 자동화된 배포 메커니즘으로 작동합니다. AWS CodePipeline 서비스는 리포지토리의 변경 사항을 지속적으로 모니터링합니다. 새 커밋을 감지하면 배포 워크플로가 자동으로 시작되고 검증 및 실행 단계가 포함된 순차적 프로세스가 시작됩니다. 시스템은 제안된 변경 사항을 식별하기 위해 Terraform plan
작업을 실행한 다음 환경에서 이러한 변경 사항을 구현하기 위해 Terraform apply
명령을 실행합니다 AWS . 특히 파이프라인은 수동 승인 게이트 없이 실행됩니다. 이 접근 방식을 사용하면 파이프라인 로그 및 Terraform 상태 파일을 통해 감사 가능성을 유지하면서 인프라 변경 사항을 신속하게 배포할 수 있습니다.
파이프라인은 AWS CodeBuild 를 활용하여 적절한 권한이 있는 제어된 환경에서 Terraform 작업을 실행합니다. 이 IaC 접근 방식을 통해 파이프라인은 다음을 포함한 포괄적인 권한 관리 작업을 수행할 수 있습니다.
새 권한 세트를 생성합니다.
기존 권한 세트를 업데이트합니다.
불필요한 권한 세트를 제거합니다.
AWS 조직 내 계정 및 그룹 간에 이러한 권한 할당을 관리합니다.
인프라 일관성을 유지하고 충돌하는 변경을 방지하기 위해 솔루션은 Amazon S3 버킷과 전용 Amazon DynamoDB 테이블을 사용하여 Terraform 백엔드 상태 관리 시스템을 구현합니다. 이 접근 방식은 Terraform 상태 파일 및 상태 잠금 메커니즘에 대한 영구 스토리지 위치를 제공하여 동일한 리소스에 대한 동시 수정을 방지합니다.
기본 Terraform 코드는 공식 AWS permission-sets
Terraform 모듈을 사용합니다. 이 모듈은 권한 세트 템플릿을 기반으로 IAM Identity Center에서 권한 세트를 동적으로 관리할 수 있습니다.
소스 제어 관리
권한 세트 템플릿(JSON 파일)은 자격 증명 관리 구성을 위한 중앙 집중식 리포지토리를 제공하는 GitHub와 같은 외부 버전 관리 시스템에 있습니다. 이 접근 방식은 권한 세트 정의에 대한 단일 정보 소스를 설정하는 동시에 표준 코드 검토 사례를 통해 공동 개발을 가능하게 합니다. 권한 있는 사용자는 조직 변경 관리 프로세스에 따라 이러한 템플릿에 변경 사항을 커밋할 수 있습니다. 이러한 커밋은 자동 배포 파이프라인의 기본 트리거 역할을 하여 인프라 업데이트 프로세스를 시작합니다.
리포지토리의 JSON 파일을 사용하여 권한 세트를 구성하는 방법의 예는 추가 정보를 참조하세요.
도구
AWS 서비스
AWS CodeBuild는 소스 코드를 컴파일하고, 단위 테스트를 실행하고, 배포할 준비가 된 아티팩트를 생성하는 데 도움이 되는 완전 관리형 빌드 서비스입니다.
AWS CodeConnections를 사용하면 CodePipeline과 같은 AWS 리소스와 서비스가 GitHub와 같은 외부 코드 리포지토리에 연결할 수 있습니다.
AWS CodePipeline를 사용하면 소프트웨어 릴리스의 다양한 단계를 신속하게 모델링 및 구성하고 소프트웨어 변경 사항을 지속적으로 릴리스하는 데 필요한 단계를 자동화할 수 있습니다.
AWS Command Line Interface (AWS CLI)는 명령줄 셸의 명령을 AWS 서비스 통해와 상호 작용하는 데 도움이 되는 오픈 소스 도구입니다.
AWS Control Tower는 규범적 모범 사례를 따라 AWS 다중 계정 환경을 설정하고 관리하는 데 도움이 됩니다.
Amazon DynamoDB는 빠르고 예측 가능하고 확장 가능한 성능을 제공하는 완전 관리형 NoSQL 데이터베이스 서비스입니다.
Amazon EventBridge는 애플리케이션을 다양한 소스의 실시간 데이터와 연결할 수 있는 서버리스 이벤트 버스 서비스입니다. 예를 들어 AWS Lambda 함수, API 대상을 사용하는 HTTP 호출 엔드포인트 또는 다른의 이벤트 버스 등이 있습니다 AWS 계정.
AWS Identity and Access Management (IAM)는 AWS 리소스에 대한 액세스를 인증하고 사용할 수 있는 권한을 부여받은 사용자를 제어하여 리소스에 대한 액세스를 안전하게 관리하는 데 도움이 됩니다.
AWS IAM Identity Center를 사용하면 모든 AWS 계정 및 클라우드 애플리케이션에 대한 Single Sign-On(SSO) 액세스를 중앙에서 관리할 수 있습니다.
AWS Lambda는 서버를 프로비저닝하거나 관리할 필요 없이 코드를 실행하는 데 도움이 되는 컴퓨팅 서비스입니다. 필요할 때만 코드를 실행하며 자동으로 확장이 가능하므로 사용한 컴퓨팅 시간만큼만 비용을 지불합니다.
AWS Organizations는 여러을 생성하여 중앙에서 관리하는 조직 AWS 계정 으로 통합할 수 있는 계정 관리 서비스입니다.
Amazon Simple Notification Service(Amazon SNS)를 사용하면 웹 서버 및 이메일 주소를 포함하여 게시자와 클라이언트 간의 메시지 교환을 조정하고 관리할 수 있습니다. 이를 통해 계정 관리 이벤트에 대한 푸시 알림을 활성화하여 관련 당사자가 시스템 내의 중요한 변경 사항 또는 작업에 대한 알림을 받을 수 있습니다.
Amazon Simple Storage Service(S3)는 원하는 양의 데이터를 저장, 보호 및 검색하는 데 도움이 되는 클라우드 기반 객체 스토리지 서비스입니다.
기타 도구
Terraform
은 HashiCorp의 코드형 인프라(IaC) 도구로, 클라우드 및 온프레미스 리소스를 생성하고 관리하는 데 도움이 됩니다.
코드 리포지토리
이 패턴의 코드는 AWS sample-terraform-aws-permission-sets-pipeline 리포지토리의 GitHub에 있는 샘플 조직에서 사용할 수 있습니다. sample-terraform-aws-permission-sets-pipeline
모범 사례
에픽
작업 | 설명 | 필요한 기술 |
---|---|---|
Terraform 백엔드 리소스를 생성합니다. | 아직 Terraform 백엔드 AWS 리소스를 생성하지 않은 경우 다음 단계를 사용하여 Amazon S3 버킷(
| 관리자 |
교차 계정 역할을 생성합니다. |
이 예제에서는 AWS 관리형 IAM 정책 AdministratorAccess를 사용합니다. 원하는 경우 보다 구체적인 정책을 사용할 수 있습니다. | 관리자 |
작업 | 설명 | 필요한 기술 |
---|---|---|
전용 리포지토리를 생성합니다. | 이 작업은 GitHub를 사용한다고 가정합니다. 기본 Terraform 코드와 권한 세트 템플릿 JSON 파일을 저장할 전용 리포지토리를 생성합니다. | DevOps 엔지니어 |
권한 세트 코드를 준비합니다. | 다음 파일을 구성하는 방법에 대한 자세한 내용은 솔루션 리포지토리의 샘플 코드를 ""── main.tf ""── outputs.tf ""── providers.jinja "── 템플릿 콘텐츠를 복사하고, | DevOps 엔지니어 |
변경 사항을 커밋합니다. | 변경 사항을 커밋하고 이전에 생성한 리포지토리로 푸시합니다. 리포지토리 이름과와 같은 GitHub 조직을 저장합니다 | DevOps 엔지니어 |
작업 | 설명 | 필요한 기술 |
---|---|---|
콘텐츠를 다운로드합니다. | 솔루션 리포지토리 | DevOps 엔지니어 |
변수를 채웁니다. |
추가 변수 옵션에 대한 자세한 내용은이 패턴의 GitHub 리포지토리에 있는 variables.tf | DevOps 엔지니어 |
Terraform 백엔드 구성을 조정합니다. |
원하는 경우 자체 Terraform 백엔드 구성을 사용할 수 있습니다. | DevOps 엔지니어 |
Terraform 공급자 구성을 조정합니다. |
| DevOps 엔지니어 |
작업 | 설명 | 필요한 기술 |
---|---|---|
를 선택합니다 AWS 계정. | IAM Identity Center 위임된 관리자 계정에 솔루션을 배포하는 것이 좋습니다. 그러나 AWS Organizations 관리 계정에 배포할 수도 있습니다. IAM Identity Center 인스턴스와 동일한 리전에서 선택한 계정에 로그인하려면를 사용합니다 AWS CLI. 사용 중인 IAM 역할에 이전 단계에서 | 관리자 |
Terraform을 수동으로 실행합니다. | 구성을 초기화, 계획 및 적용하려면 표시된 순서대로 다음 Terraform 명령을 실행합니다.
| DevOps 엔지니어 |
배포 결과를 확인합니다. | IAM Identity Center 위임된 관리자 계정에서 | DevOps |
CodeConnections 구성을 완료합니다. | CodeConnections 구성을 완료하려면 다음 단계를 사용합니다.
이제 파이프라인이 권한 세트 리포지토리에 액세스할 수 있습니다. 자세한 지침은 개발자 도구 콘솔 설명서의 보류 중인 연결 업데이트를 참조하세요. | DevOps |
작업 | 설명 | 필요한 기술 |
---|---|---|
AWS Control Tower 또는 AFT 업데이트를 기준으로 파이프라인을 실행합니다. | AWS Control Tower 또는 AFT(선택한 수명 주기 이벤트 유형에 따라 다름)를 사용하여 계정을 생성하거나 변경하면 파이프라인이 시작됩니다. | 관리자 |
코드를 변경하여 파이프라인을 실행합니다. | 코드를 변경하고 | DevOps |
파이프라인을 수동으로 실행합니다. | 파이프라인을 수동으로 시작하려면의 변경 사항 릴리스 기능을 사용합니다 AWS CodePipeline. | DevOps |
문제 해결
문제 | Solution |
---|---|
액세스 거부됨 | 솔루션을 배포하는 데 필요한 권한이 있는지 확인합니다. |
CodeConnections 문제 |
|
파이프라인 실행 문제 |
|
권한 세트 배포 문제 |
|
관련 리소스
AWS 서비스 설명서
권한 세트 AWS 계정 로 관리(IAM Identity Center 설명서)
기타 리소스
AWS 권한 세트 모듈
(Terraform)
추가 정보
샘플 권한 세트가 있는 JSON 파일
다음 예제에서는 리포지토리의 JSON 파일을 사용하여 권한 세트를 구성하는 방법을 보여줍니다.
{ "Name": "ps-billing", // Permission set identifier "Comment": "Sample permission set for billing access", // Comment to document the purpose of the permission set "Description": "Billing access in AWS", // Detailed description "SessionDuration": "PT4H", // Session duration = 4 hours (ISO 8601 format) "ManagedPolicies": [ // List of AWS IAM managed policies "arn:aws:iam::aws:policy/job-function/Billing", "arn:aws:iam::aws:policy/job-function/SupportUser", "arn:aws:iam::aws:policy/AWSSupportAccess", "arn:aws:iam::aws:policy/job-function/ViewOnlyAccess" ], "CustomerPolicies": [], // References to IAM policies previously created "CustomPolicy": {}, // Inline IAM policy defined directly in the permission set "PermissionBoundary": { // AWS or customer managed IAM policy to be used as boundary "ManagedPolicy": "", "CustomerPolicy": "" }, "Assignments": [ // Define the assignment rules { "all_accounts": true, // Apply to ALL active AWS accounts in organization "principal": "G_BILLING_USERS", // Group/user name in Identity Center "type": "GROUP", // Can be "GROUP" or "USER" "account_id": [], // List of AWS account ID (empty since all_accounts=true) "account_ou": [], // List of AWS Organizational Unit IDs with target AWS accounts "account_tag": [] // List of tags (key:value) to match AWS Organization accounts tags } ] }
자세한 내용은 Terraform 웹 사이트의 AWS 권한 세트 모듈 설명서에서 JSON 스키마를 참조하세요
팁
Terraform 가져오기 블록
을 사용하여 기존 권한 세트를 솔루션으로 가져올 수 있습니다. AFT를 사용하여 위임된 계정에서 AWS 권한 세트 파이프라인을 구현할 수 있습니다. 자세한 내용은 AFT 청사진을 참조하세요
.