기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
AWS CodePipeline 및 Amazon Bedrock을 사용하여 AWS Organizations 정책을 코드로 관리
작성자: Andre Cavalcante(AWS) 및 Mariana Pessoa de Queiroz(AWS)
요약
에서 권한 부여 정책을 사용하여 멤버 계정의 보안 주체 및 리소스에 대한 액세스를 AWS Organizations 중앙에서 구성하고 관리할 수 있습니다. 서비스 제어 정책(SCPs 조직의 AWS Identity and Access Management (IAM) 역할 및 사용자에 대해 사용 가능한 최대 권한을 정의합니다. 리소스 제어 정책(RCPs 조직의 리소스에 사용할 수 있는 최대 권한을 정의합니다.
이 패턴은 SCPs 및 RCPs를 지속적 통합 및 지속적 배포(CI/CD) 파이프라인을 통해 배포하는 코드형 인프라(IaC)로 관리하는 데 도움이 됩니다. AWS CloudFormation 또는 Hashicorp Terraform을 사용하여 이러한 정책을 관리하면 여러 권한 부여 정책 구축 및 유지 관리와 관련된 부담을 줄일 수 있습니다.
이 패턴에는 다음 기능이 포함됩니다.
매니페스트 파일(
scp-management.json
및 )을 사용하여 권한 부여 정책을 생성, 삭제 및 업데이트합니다rcp-management.json
.정책 대신 가드레일을 사용합니다. 매니페스트 파일에서 가드레일과 해당 대상을 정의합니다.
AWS CodeBuild 및를 사용하는 파이프라인은 매니페스트 파일의 가드레일을 AWS CodePipeline병합하고 최적화합니다. 매니페스트 파일의 각 문에 대해 파이프라인은 가드레일을 단일 SCP 또는 RCP로 결합한 다음 정의된 대상에 적용합니다.
AWS Organizations 는 정책을 대상에 적용합니다. 대상은 AWS 계정, 조직 단위(OU), 환경(
environments.json
파일에서 정의한 계정 또는 OUs 그룹) 또는 AWS 태그를 공유하는 계정 그룹일 수 있습니다.Amazon Bedrock은 파이프라인 로그를 읽고 모든 정책 변경 사항을 요약합니다.
파이프라인에는 수동 승인이 필요합니다. 승인자는 Amazon Bedrock이 준비한 실행 요약을 검토할 수 있으므로 변경 사항을 이해하는 데 도움이 됩니다.
사전 조건 및 제한 사항
사전 조건
에서 조직으로 관리 AWS 계정 되는 여러 AWS Organizations. 자세한 내용은 조직 생성을 참조하세요.
SCP 및 RCP 기능은에서 활성화됩니다 AWS Organizations. 자세한 내용은 정책 유형 활성화를 참조하세요.
Terraform 버전 1.9.8 이상이 설치되어
있습니다. Terraform 파이프라인을 통해이 솔루션을 배포하지 않는 경우 정책 관리 파이프라인을 배포 AWS 계정 하는의 Amazon Simple Storage Service(Amazon S3) 버킷에 Terraform 상태 파일을 저장
해야 합니다. Python 버전 3.13.3 이상이 설치되어
있습니다.
제한 사항
이 패턴을 사용하여이 CI/CD 파이프라인 외부에서 생성된 SCPs 또는 RCPs 관리할 수 없습니다. 그러나 파이프라인을 통해 기존 정책을 다시 생성할 수 있습니다. 자세한 내용은이 패턴의 추가 정보 섹션에서 파이프라인으로 기존 정책 마이그레이션을 참조하세요.
각 계정의 계정, OUs 및 정책 수에는 할당량 및 서비스 제한이 적용됩니다 AWS Organizations.
이 패턴은 백업 정책, 태그 정책, 채팅 애플리케이션 정책 또는 선언적 정책과 같은의 관리 정책을 구성하는 데 사용할 수 없습니다. AWS Organizations
아키텍처
다음 다이어그램은 정책 관리 파이프라인의 워크플로와 관련 리소스를 보여줍니다.

이 다이어그램은 다음 워크플로를 보여줍니다.
사용자는 원격 리포지토리의 기본 브랜치에 있는
scp-management.json
또는rcp-management.json
매니페스트 파일에 변경 사항을 커밋합니다.main
브랜치를 변경하면에서 파이프라인이 시작됩니다 AWS CodePipeline.CodePipeline은
Validate-Plan
CodeBuild 프로젝트를 시작합니다. 이 프로젝트는 원격 리포지토리의 Python 스크립트를 사용하여 정책 및 정책 매니페스트 파일을 검증합니다. 이 CodeBuild 프로젝트는 다음을 수행합니다.SCP 및 RCP 매니페스트 파일에 고유한 문 IDs(
Sid
)가 포함되어 있는지 확인합니다.scp-policy-processor/main.py
및rcp-policy-processor/main.py
Python 스크립트를 사용하여 가드레일 폴더의 가드레일을 단일 RCP 또는 SCP 정책으로 연결합니다.Resource
,Action
및가 동일한 가드레일을 결합합니다Condition
.AWS Identity and Access Management Access Analyzer 를 사용하여 최적화된 최종 정책을 검증합니다. 조사 결과가 있으면 파이프라인이 중지됩니다.
Terraform이 리소스를 생성하는 데 사용하는
scps.json
및rcps.json
파일을 생성합니다.terraform plan
명령을 실행하여 Terraform 실행 계획을 생성합니다.
(선택 사항)
Validate-Plan
CodeBuild 프로젝트는bedrock-prompt/prompt.py
스크립트를 사용하여 Amazon Bedrock에 프롬프트를 보냅니다.bedrock-prompt/prompt.txt
파일에서 프롬프트를 정의합니다. Amazon Bedrock은 Anthropic Claude Sonnet 3.5를 사용하여 Terraform 및 Python 로그를 분석하여 제안된 변경 사항의 요약을 생성합니다.CodePipeline은 Amazon Simple Notification Service(Amazon SNS) 주제를 사용하여 승인자에게 변경 사항을 검토해야 함을 알립니다. Amazon Bedrock이 변경 요약을 생성한 경우 알림에이 요약이 포함됩니다.
정책 승인자는 CodePipeline에서 작업을 승인합니다. Amazon Bedrock이 변경 요약을 생성한 경우 승인자는 승인 전에 CodePipeline의 요약을 검토할 수 있습니다.
CodePipeline은
Apply
CodeBuild 프로젝트를 시작합니다. 이 프로젝트는 Terraform을 사용하여 RCP 및 SCP 변경 사항을 적용합니다 AWS Organizations.
이 아키텍처와 연결된 IaC 템플릿은 정책 관리 파이프라인을 지원하는 다음 리소스도 배포합니다.
scp-policy-processor/main.py
및와 같은 CodePipeline 아티팩트 및 스크립트를 저장하기 위한 Amazon S3 버킷bedrock-prompt/prompt.py
이 솔루션에서 생성한 리소스를 암호화하는 AWS Key Management Service (AWS KMS) 키
도구
AWS 서비스
Amazon Bedrock은 통합 API를 통해 많은 고성능 파운데이션 모델을 사용할 수 있도록 하는 완전관리형 AI 서비스입니다.
AWS CodeBuild는 소스 코드를 컴파일하고, 단위 테스트를 실행하고, 배포할 준비가 된 아티팩트를 생성하는 데 도움이 되는 완전 관리형 빌드 서비스입니다.
AWS CodePipeline를 사용하면 소프트웨어 릴리스의 다양한 단계를 신속하게 모델링 및 구성하고 소프트웨어 변경 사항을 지속적으로 릴리스하는 데 필요한 단계를 자동화할 수 있습니다.
AWS Organizations는 여러을 생성하여 중앙에서 관리하는 조직 AWS 계정 으로 통합하는 데 도움이 되는 계정 관리 서비스입니다.
AWS SDK for Python (Boto3)
는 Python 애플리케이션, 라이브러리 또는 스크립트를와 통합하는 데 도움이 되는 소프트웨어 개발 키트입니다 AWS 서비스. Amazon Simple Storage Service(S3)는 원하는 양의 데이터를 저장, 보호 및 검색하는 데 도움이 되는 클라우드 기반 객체 스토리지 서비스입니다.
기타 도구
HashiCorp Terraform
은 코드를 사용하여 클라우드 인프라 및 리소스를 프로비저닝하고 관리하는 데 도움이 되는 IaC 도구입니다.
코드 리포지토리
이 패턴의 코드는 organizations-policy-pipelinesample-repository
폴더에 포함된 키 파일입니다.
environments
폴더에는 환경 목록이environments.json
포함되어 있습니다. 환경은 대상 그룹이며 AWS 계정 IDs 또는 조직 단위(OUs.rcp-management
폴더에서:guardrails
폴더에는 RCPspolicies
폴더에는 개별 RCPs.rcp-management.json
매니페스트 파일은 RCP 가드레일, 전체 RCPs 및 관련 대상을 관리하는 데 도움이 됩니다.
scp-management
폴더에서:guardrails
폴더에는 SCPspolicies
폴더에는 개별 SCPs.scp-management.json
매니페스트 파일은 SCP 가드레일, 전체 SCPs 및 관련 대상을 관리하는 데 도움이 됩니다.
utils
폴더에는 파이프라인을 통해 관리할 수 있도록 현재 SCPs 및 RCPs를 마이그레이션하는 데 도움이 되는 스크립트가 포함되어 있습니다. 자세한 내용은 이 패턴의 추가 정보 섹션을 참조하세요.
모범 사례
파이프라인을 설정하기 전에 AWS Organizations 할당량 한도에 도달하지 않았는지 확인하는 것이 좋습니다.
AWS Organizations 관리 계정은 해당 계정에서 수행해야 하는 작업에만 사용하는 것이 좋습니다. 자세한 내용은 관리 계정 모범 사례를 참조하세요.
에픽
작업 | 설명 | 필요한 기술 |
---|---|---|
리포지토리를 생성합니다. | 보안 운영 팀이 정책을 관리할 리포지토리를 생성합니다. 가 AWS CodeConnections 지원하는 타사 리포지토리 공급자 중 하나를 사용합니다. | DevOps 엔지니어 |
정책 관리를 위임합니다. | 파이프라인을 배포하는 멤버 계정에 AWS Organizations 정책 관리를 위임합니다. 지침은 를 사용하여 리소스 기반 위임 정책 생성을 AWS Organizations 참조하세요. 샘플 정책은이 패턴의 추가 정보 섹션에서 샘플 리소스 기반 위임 정책을 참조하세요. | 관리자 |
(선택 사항) 파운데이션 모델을 활성화합니다. | 정책 변경 요약을 생성하려면 파이프라인을 배포하는 AWS 계정 의 Amazon Bedrock에서 Anthropic Claude 3.5 Sonnet 파운데이션 모델에 대한 액세스를 활성화합니다. 지침은 Amazon Bedrock 파운데이션 모델에 대한 액세스 추가 또는 제거를 참조하세요. | 일반 AWS |
작업 | 설명 | 필요한 기술 |
---|---|---|
리포지토리를 복제합니다. | 다음 명령을 입력하여 GitHub에서 organizations-policy-pipeline
| DevOps 엔지니어 |
배포 방법을 정의합니다. |
| DevOps 엔지니어 |
파이프라인을 배포합니다. |
| DevOps 엔지니어, Terraform |
원격 리포지토리를 연결합니다. | 이전 단계에서 Terraform은 타사 리포지토리에 대한 CodeConnections 연결을 생성했습니다. AWS 개발자 도구 콘솔 | DevOps |
Amazon SNS 주제를 구독하세요. | Terraform은 Amazon SNS 주제를 생성했습니다. 엔드포인트에서 주제를 구독하고 구독을 확인하여 승인자가 파이프라인에서 보류 중인 승인 작업에 대한 알림을 받을 수 있도록 합니다. 지침은 Amazon SNS 주제에 대한 구독 생성을 참조하세요. | 일반 AWS |
작업 | 설명 | 필요한 기술 |
---|---|---|
원격 리포지토리를 채웁니다. | 복제된 리포지토리에서 | DevOps 엔지니어 |
환경을 정의합니다. |
| DevOps 엔지니어 |
가드레일을 정의합니다. |
| DevOps 엔지니어 |
정책을 정의합니다. |
| DevOps 엔지니어 |
작업 | 설명 | 필요한 기술 |
---|---|---|
매니페스트 파일을 구성합니다. |
| DevOps 엔지니어 |
파이프라인을 시작합니다. |
| DevOps 엔지니어 |
변경 사항을 승인합니다. |
| 일반 AWS, 정책 승인자 |
배포를 검증합니다. |
| 일반 AWS |
문제 해결
문제 | Solution |
---|---|
파이프라인 |
|
파이프라인 | 가드레일 또는 정책 정의에 오류가 있는 경우 파이프라인 출력에 “검증 및 계획 단계 중 IAM Access Analyzer의 결과” 메시지가 나타납니다. 이 패턴은 IAM Access Analyzer를 사용하여 최종 정책을 검증합니다. 다음을 수행합니다.
|
관련 리소스
JSON 정책 요소 참조(IAM 설명서)
리소스 제어 정책(AWS Organizations 문서)
서비스 제어 정책(AWS Organizations 문서)
Amazon Bedrock 파운데이션 모델에 대한 액세스 추가 또는 제거(Amazon Bedrock 설명서)
CodePipeline에서 승인 작업 승인 또는 거부(CodePipeline 설명서)
추가 정보
샘플 리소스 기반 위임 정책
다음은에 대한 샘플 리소스 기반 위임 정책입니다 AWS Organizations. 이를 통해 위임된 관리 계정이 조직의 SCPs 및 RCPs 관리할 수 있습니다. 다음 샘플 정책에서를 정책 관리 파이프라인을 배포하는 계정의 ID<MEMBER_ACCOUNT_ID>
로 바꿉니다.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "DelegationToAudit", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<MEMBER_ACCOUNT_ID>:root" }, "Action": [ "organizations:ListTargetsForPolicy", "organizations:CreatePolicy", "organizations:DeletePolicy", "organizations:AttachPolicy", "organizations:DetachPolicy", "organizations:DisablePolicyType", "organizations:EnablePolicyType", "organizations:UpdatePolicy", "organizations:DescribeEffectivePolicy", "organizations:DescribePolicy", "organizations:DescribeResourcePolicy" ], "Resource": "*" } ] }
기존 정책을 파이프라인으로 마이그레이션
이 파이프라인을 통해 마이그레이션하고 관리하려는 기존 SCPs 또는 RCPs가 있는 경우 코드 리포지토리의 sample-repository/utils
폴더에 있는 Python 스크립트를 사용할 수 있습니다. 이러한 스크립트에는 다음이 포함됩니다.
check-if-scp-exists-in-env.py
-이 스크립트는environments.json
파일에 정의한 특정 환경의 대상에 지정된 정책이 적용되는지 여부를 확인합니다. 다음 명령을 입력하여이 스크립트를 실행합니다.python3 check-if-scp-exists-in-env.py \ --policy-type <POLICY_TYPE> \ --policy-name <POLICY_NAME> \ --env-id <ENV_ID>
이 명령에서 다음을 바꿉니다.
<POLICY_TYPE>
가scp
또는rcp
<POLICY_NAME>
는 SCP 또는 RCP의 이름입니다.<ENV_ID>
는environments.json
파일에 정의한 환경의 ID입니다.
create-environments.py
-이 스크립트는 환경의 현재 SCPs 및 RCPs를 기반으로 environment.json 파일을 생성합니다. 를 통해 배포된 정책은 제외됩니다 AWS Control Tower. 다음 명령을 입력하여이 스크립트를 실행합니다. 여기서<POLICY_TYPE>
는scp
또는 입니다rcp
.python create-environments.py --policy-type <POLICY_TYPE>
verify-policies-capacity.py
-이 스크립트는 정의한 각 환경을 확인하여 각 AWS Organizations 정책 관련 할당량에 남아 있는 용량의 양을 결정합니다.environments.json
파일에서 확인할 환경을 정의합니다. 다음 명령을 입력하여이 스크립트를 실행합니다. 여기서<POLICY_TYPE>
는scp
또는 입니다rcp
.python verify-policies-capacity.py --policy-type <POLICY_TYPE>