Account Factory for Terraform을 사용하여 여러 계정에 대한 권한 세트 관리 - 권장 가이드

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Account Factory for Terraform을 사용하여 여러 계정에 대한 권한 세트 관리

Anand Krishna Varanasi 및 Siamak Heshmati, Amazon Web Services

요약

이 패턴은 AWS Control Tower Account Factory Terraform(AFT)을와 통합하여 대규모로 여러 AWS IAM Identity Center에 대한 권한을 구성하는 데 도움이 AWS 계정 됩니다. 이 접근 방식은 사용자 지정 AWS Lambda 함수를 사용하여 조직으로 관리 AWS 계정 되는에 대한 권한 세트 할당을 자동화합니다. 이렇게 하면 플랫폼 엔지니어링 팀의 수동 개입이 필요하지 않으므로 프로세스가 간소화됩니다. 이 솔루션은 운영 효율성, 보안 및 일관성을 향상시킬 수 있습니다. 안전하고 표준화된 온보딩 프로세스를 촉진 AWS Control Tower하므로 클라우드 인프라의 민첩성과 신뢰성을 우선시하는 기업에 없어서는 안 됩니다.

사전 조건 및 제한 사항

사전 조건 

제한 사항

  • 이 솔루션은를 통해 관리되는 계정에서만 사용할 수 있습니다 AWS Control Tower. 이 솔루션은 Account Factory for Terraform을 사용하여 배포됩니다.

  • 이 패턴에는 자격 증명 소스를 사용하여 자격 증명 페더레이션을 설정하는 지침이 포함되지 않습니다. 이 설정을 완료하는 방법에 대한 자세한 내용은 IAM Identity Center 설명서의 IAM Identity Center ID 소스 자습서를 참조하세요.

아키텍처

AFT 개요

AFT는 계정을 프로비저닝하고 사용자 지정하는 데 도움이 되는 Terraform 파이프라인을 설정합니다 AWS Control Tower. AFT는 계정 프로비저닝 프로세스를 자동화하는 GitOps 모델을 따릅니다 AWS Control Tower. 계정 요청 Terraform 파일을 생성하고 리포지토리에 커밋합니다. 이렇게 하면 계정 프로비저닝을 위한 AFT 워크플로가 시작됩니다. 계정 프로비저닝이 완료되면 AFT는 추가 사용자 지정 단계를 자동으로 실행할 수 있습니다. 자세한 내용은 AWS Control Tower 설명서의 AFT 아키텍처를 참조하세요.

AFT는 다음과 같은 기본 리포지토리를 제공합니다.

  • aft-account-request -이 리포지토리에는 생성 또는 업데이트할 Terraform 코드가 포함되어 있습니다 AWS 계정.

  • aft-account-customizations -이 리포지토리에는 계정별로 리소스를 생성하거나 사용자 지정하는 Terraform 코드가 포함되어 있습니다.

  • aft-global-customizations -이 리포지토리에는 모든 계정에 대한 리소스를 대규모로 생성하거나 사용자 지정하는 Terraform 코드가 포함되어 있습니다.

  • aft-account-provisioning-customizations -이 리포지토리는 AFT에서 생성하고 관리하는 특정 계정에만 적용되는 사용자 지정을 관리합니다. 예를 들어이 리포지토리를 사용하여 IAM Identity Center에서 사용자 또는 그룹 할당을 사용자 지정하거나 계정 해지를 자동화할 수 있습니다.

솔루션 개요

이 사용자 지정 솔루션에는 AWS Step Functions 상태 시스템과 여러 계정의 사용자 및 그룹에 권한 세트를 할당하는 AWS Lambda 함수가 포함되어 있습니다. 이 패턴을 통해 배포된 상태 시스템은 기존 AFT aft_account_provisioning_customizations 상태 시스템과 함께 작동합니다. 사용자는 새가 AWS 계정 생성되거나 계정이 생성된 후 IAM Identity Center 사용자 및 그룹 할당을 업데이트하라는 요청을 제출합니다. aft-account-request 리포지토리에 변경 사항을 푸시하여이 작업을 수행합니다. 계정 생성 또는 업데이트 요청은 Amazon DynamoDB Streams에서 스트림을 시작합니다. 그러면 대상에 대한 IAM Identity Center 사용자 및 그룹을 업데이트하는 Lambda 함수가 시작됩니다 AWS 계정.

다음은 대상 사용자 및 그룹에 권한 세트를 할당하기 위해 Lambda 함수에 제공할 수 있는 파라미터의 예입니다.

custom_fields = { "InstanceArn" = "<Organization ID>", "PermissionSetArn" = "<Permission set ARN>", "PrincipalId" = "<Principal ID>", }

다음은이 문의 파라미터입니다.

  • InstanceArn - 조직의 Amazon 리소스 이름(ARN)입니다.

  • PermissionSetArn - 권한 세트의 ARN

  • PrincipalId - 권한 집합이 적용될 IAM Identity Center의 사용자 또는 그룹의 식별자입니다.

참고

이 솔루션을 실행하기 전에 대상 권한 세트, 사용자 및 그룹을 생성해야 합니다.

InstanceArn 값은 일관되게 유지되어야 하지만 Lambda 함수를 수정하여 여러 대상 자격 증명에 여러 권한 세트를 할당할 수 있습니다. 권한 세트의 파라미터는 로 끝나야 PermissionSetArn하고 사용자 및 그룹의 파라미터는 로 끝나야 합니다PrincipalId. 두 속성을 모두 정의해야 합니다. 다음은 여러 권한 세트와 대상 사용자 및 그룹을 정의하는 방법의 예입니다.

custom_fields = { "InstanceArn" = "<Organization ID>", "AdminAccessPermissionSetArn" = "<Admin privileges permission set ARN>", "AdminAccessPrincipalId" = "<Admin principal ID>", "ReadOnlyAccessPermissionSetArn" = "<Read-only privileges permission set ARN>", "ReadOnlyAccessPrincipalId" = "<Read-only principal ID>", }

다음 다이어그램은 솔루션이 대상의 사용자 및 그룹에 대한 권한 세트를 AWS 계정 대규모로 업데이트하는 방법에 대한 step-by-step 워크플로를 보여줍니다. 사용자가 계정 생성 요청을 시작하면 AFT는 aft-account-provisioning-framework Step Functions 상태 시스템을 시작합니다. 이 상태 시스템은 extract-alternate-sso Lambda 함수를 시작합니다. Lambda 함수는 대상의 사용자 및 그룹에 권한 세트를 할당합니다 AWS 계정. 이러한 사용자 또는 그룹은 IAM Identity Center에 구성된 모든 자격 증명 소스에서 가져올 수 있습니다. 자격 증명 소스의 예로는 Okta, Active Directory 또는 Ping Identity가 있습니다.

계정이 생성되거나 업데이트될 때 권한 세트를 업데이트하는 워크플로입니다.

다이어그램은 새 계정이 생성될 때 다음 워크플로를 보여줍니다.

  1. 사용자가 aft-account-request리포지토리에 custom_fields 변경 사항을 푸시합니다.

  2. AWS CodePipeline 는 사용자 정의 메타데이터를 aft-request-audit Amazon DynamoDB 테이블에 기록하는 AWS CodeBuild 작업을 시작합니다. 이 테이블에는 사용자 정의 메타데이터를 기록하는 속성이 있습니다. ddb_event_name 속성은 AFT 작업의 유형을 정의합니다.

    • 값이 인 경우 INSERT솔루션은 새가 생성 AWS 계정 될 때 대상 자격 증명에 설정된 권한을 할당합니다.

    • 값이 인 경우 UPDATE솔루션은가 생성된 후 대상 자격 증명에 설정된 권한을 할당 AWS 계정 합니다.

  3. Amazon DynamoDB Streams는 aft_alternate_sso_extract Lambda 함수를 시작합니다.

  4. aft_alternate_sso_extract Lambda 함수는 AWS Control Tower 관리 계정에서 AWS Identity and Access Management (IAM) 역할을 수임합니다.

  5. Lambda 함수는 IAM Identity Center에 an AWS SDK for Python (Boto3) create_account_assignment API 호출을 수행하여 대상 사용자 및 그룹에 권한 세트를 할당합니다. aft-request-audit Amazon DynamoDB 테이블에서 권한 세트 및 자격 증명 할당을 검색합니다.

  6. Step Functions 워크플로가 완료되면 대상 자격 증명에 권한 세트가 할당됩니다.

자동화 및 규모 조정

AFT는 확장성이 뛰어난 CodePipeline, AWS CodeBuild, DynamoDB 및 Lambda AWS 서비스 와 같은를 사용하여 대규모로 작동합니다. 추가 자동화를 위해이 솔루션을 Jira와 같은 티켓 또는 문제 관리 시스템과 통합할 수 있습니다. 자세한 내용은 이 패턴의 추가 정보 섹션을 참조하세요.

도구

AWS 서비스

  • Account Factory for Terraform(AFT)은이 솔루션의 주요 도구입니다. aft-account-provisioning-customizations 리포지토리에는 사용자 지정 IAM Identity Center 사용자 또는 그룹 할당 AWS 계정과 같은에 대한 사용자 지정을 생성하기 위한 Terraform 코드가 포함되어 있습니다.

  • Amazon DynamoDB는 빠르고 예측 가능하고 확장 가능한 성능을 제공하는 완전 관리형 NoSQL 데이터베이스 서비스입니다.

  • AWS Lambda는 서버를 프로비저닝하거나 관리할 필요 없이 코드를 실행하는 데 도움이 되는 컴퓨팅 서비스입니다. 필요할 때만 코드를 실행하며 자동으로 확장이 가능하므로 사용한 컴퓨팅 시간만큼만 비용을 지불합니다.

  • AWS Step Functions는 AWS Lambda 함수 및 기타를 결합하여 비즈니스 크리티컬 애플리케이션을 구축하는 AWS 서비스 데 도움이 되는 서버리스 오케스트레이션 서비스입니다.

기타 도구

  • Python은 범용 컴퓨터 프로그래밍 언어입니다.

  • Terraform은 HashiCorp의 코드형 인프라(IaC) 도구로, 클라우드 및 온프레미스 리소스를 생성하고 관리하는 데 도움이 됩니다.

코드 리포지토리

AFT용 코드 리포지토리는 GitHub AWS Control Tower Account Factory for Terraform 리포지토리에서 사용할 수 있습니다. 이 패턴의 코드는 Account Factory for Terraform(AFT) 리포지토리 AWS 계정 를 사용하기 위한 관리 SSO 할당에서 사용할 수 있습니다.

모범 사례

에픽

작업설명필요한 기술

IAM 역할을 생성합니다.

AWS Control Tower 관리 계정에서 Terraform을 사용하여 IAM 역할을 생성합니다. 이 역할에는 교차 계정 액세스 권한과 자격 증명 공급자의 페더레이션 액세스를 허용하는 신뢰 정책이 있습니다. 또한를 통해 다른 계정에 대한 액세스 권한을 부여할 수 있는 권한도 있습니다 AWS Control Tower. Lambda 함수는이 역할을 수임합니다. 다음을 수행합니다.

  1. GitHub 코드 리포지토리에서 AFTCrossAccountRole.tf 파일을 다운로드합니다.

  2. AWS 환경에 맞게 AFTCrossAccountRole.tf 파일을 수정합니다.

  3. Terraform에서 다음 명령을 입력하여이 IAM 역할을 생성합니다.

    terraform init terraform plan terraform apply
  4. 역할이 성공적으로 배포되었고 예상되는 교차 계정 액세스 권한이 있는지 확인합니다.

AWS DevOps, 클라우드 아키텍트

환경에 맞는 솔루션을 사용자 지정합니다.

  1. 다음 명령을 입력하여 Account Factory for Terraform(AFT) 리포지토리를 AWS 계정 사용하기 위한 관리 SSO 할당을 로컬 워크스테이션에 복제합니다.

    git clone https://github.com/aws-samples/aft-custom-sso-assignment.git
  2. aft-account-provisioning-customizations/terraform 폴더에서 variables.tf 파일을 엽니다.

  3. 환경에 맞게 변수를 수정합니다.

  4. variables.tf 파일을 저장하고 닫습니다.

  5. aft-account-request 리포지토리에서 account-request.tf 파일을 엽니다.

  6. custom_fields 파라미터를 수정하여 권한 세트와 대상 사용자 및 그룹을 정의합니다. 자세한 내용은이 패턴의 아키텍처 섹션을 참조하세요.

  7. account-request.tf 파일을 저장하고 닫습니다.

AWS DevOps, 클라우드 아키텍트

솔루션을 배포합니다.

  1. 복제된 리포지토리에서 terraform 폴더의 내용을 복사한 다음 aft-account-provisioning-customizations리포지토리의 terraform 폴더에 붙여 넣습니다.

  2. AFT 관리 계정에서 ct-aft-account-provisioning-customizations 파이프라인을 시작합니다. 이렇게 하면 사용자 지정 솔루션이 배포됩니다. 지침은 CodePipeline에서 파이프라인 시작을 참조하세요.

  3. 리소스가 AFT 관리 계정에 성공적으로 배포되었는지 확인합니다.

AWS DevOps, 클라우드 아키텍트

코드 리포지토리 연결을 설정합니다.

구성 파일을 저장할 코드 리포지토리와 간에 연결을 설정합니다 AWS 계정. 지침은 AWS CodePipeline 설명서의 CodeConnections를 사용하여 파이프라인에 타사 소스 공급자 추가를 참조하세요.

AWS DevOps, 클라우드 아키텍트
작업설명필요한 기술

AFT 파이프라인을 시작하여 새 계정을 배포합니다.

AWS Control Tower 환경에서 새를 생성하는 파이프라인을 시작하려면 AFT로 새 계정 프로비저닝 AWS 계정 의 지침을 따릅니다. 계정 생성 프로세스가 완료될 때까지 기다립니다.

AWS DevOps, 클라우드 아키텍트

변경 사항을 확인합니다.

  1. AWS IAM Identity Center 콘솔을 엽니다.

  2. 계정 목록에서 새로 생성된 계정을 선택합니다.

  3. 대상 사용자 및 그룹에 대한 액세스 권한을 부여하도록 권한 세트가 할당되었는지 확인합니다.

AWS DevOps, 클라우드 아키텍트

문제 해결

문제Solution

권한 세트 할당이 작동하지 않습니다.

그룹 ARN, 조직 ID 및 Lambda 파라미터가 올바른지 확인합니다. 예제는이 패턴의 솔루션 개요 섹션을 참조하세요.

리포지토리에서 코드를 업데이트해도 파이프라인이 시작되지 않습니다.

이 문제는와 리포지토리 간의 연결 AWS 계정 과 관련이 있습니다. 에서 연결이 활성 상태인지 AWS Management Console확인합니다. 자세한 내용은 AWS CodePipeline 설명서의 GitHub 연결을 참조하세요.

추가 정보

티켓 관리 도구와 통합

이 솔루션을 Jira 또는 ServiceNow와 같은 티켓 또는 문제 관리 도구와 통합하도록 선택할 수 있습니다. 다음 다이어그램은이 옵션의 워크플로 예제를 보여줍니다. 도구의 커넥터를 사용하여 티켓 관리 도구를 AFT 솔루션 리포지토리와 통합할 수 있습니다. Jira 커넥터는 Jira를 GitHub와 통합을 참조하세요. ServiceNow 커넥터는 GitHub와 통합을 참조하세요. 사용자가 풀 요청 승인의 일부로 티켓 ID를 제공해야 하는 사용자 지정 솔루션을 구축할 수도 있습니다. AFT를 AWS 계정 사용하여 새를 생성하라는 요청이 승인되면 해당 이벤트는 aft-account-request GitHub 리포지토리에 사용자 지정 필드를 추가하는 워크플로를 시작할 수 있습니다. 사용 사례의 요구 사항을 충족하는 사용자 지정 워크플로를 설계할 수 있습니다.

GitHub Actions 및 티켓 관리 도구를 사용하는 워크플로입니다.

이 다이어그램은 다음 워크플로를 보여줍니다.

  1. 사용자는 Jira와 같은 티켓 관리 도구에서 사용자 지정 권한 세트 할당을 요청합니다.

  2. 사례가 승인되면 워크플로가 권한 세트 할당을 업데이트하기 시작합니다. (선택 사항)이 단계의 사용자 지정 자동화에 플러그인을 사용할 수 있습니다.

  3. 운영자는 업데이트된 권한 세트 파라미터와 함께 Terraform 코드를 aft-account-request리포지토리에 개발 또는 기능 브랜치로 전송합니다.

  4. GitHub 작업은 OpenID Connect(OIDC) 호출을 AWS CodeBuild 사용하여 시작합니다. CodeBuild는 tfseccheckov와 같은 도구를 사용하여 코드형 인프라(IaC) 보안 스캔을 수행합니다. 운영자에게 보안 위반을 경고합니다.

  5. 위반이 발견되지 않으면 GitHub Actions는 자동 풀 요청을 생성하고 코드 소유자에게 코드 검토를 할당합니다. 또한 풀 요청에 대한 태그를 생성합니다.

  6. 코드 소유자가 코드 검토를 승인하면 다른 GitHub Actions 워크플로가 시작됩니다. 다음을 포함하여 풀 요청 표준을 확인합니다.

    • 풀 요청 제목이 요구 사항을 충족하는 경우.

    • 풀 요청 본문에 승인된 사례 번호가 포함된 경우.

    • 풀 요청에 적절하게 태그가 지정된 경우.

  7. 풀 요청이 표준을 충족하는 경우 GitHub Actions는 AFT 제품 워크플로를 시작합니다. 는에서 ct-aft-account-request 파이프라인을 시작합니다 AWS CodePipeline. 이 파이프라인은 Step Functions에서 aft-account-provisioning-framework 사용자 지정 상태 시스템을 시작합니다. 이 상태 시스템은이 패턴의 솔루션 개요 섹션에 앞서 설명한 대로 작동합니다.