상세 컨텐츠

본문 제목

Amplify Console에서 환경(브랜치) 제거를 막자

TECH

by walkinpcm 2022. 10. 25. 19:02

본문

저는 Amplify Console에서 웹 호스팅을 하고 있고, 약 2년 동안 대체로 아주 만족하면서 사용하고 있습니다.

Amplify Console에서 웹 호스팅을 하는 방법은 아래 링크에서 볼 수 있습니다.
https://walkinpcm.tistory.com/11

 

그런데, 2년이나 사용하면서 간과하고 있던 것이 하나 있습니다.

그건 바로 '권한'입니다. 구체적으로는 Production Branch를 삭제하지 못하게 하는 권한입니다.

 

Amplify Console에서는 Git의 Branch 연결만으로 손 쉽게 배포환경이 만들어지고, Branch의 연결 해제만으로 손 쉽게 배포환경이 제거됩니다. 여기서 '손 쉽게 배포환경이 제거'되는 것은 큰 위험요인입니다.

사람은 언제든지 실수를 할 수 있기 때문에 언제든지 Production Branch를 삭제하여 Production 서비스를 없애버릴 수 있습니다.

당연하게도 Production Branch는 삭제할 수 없게 권한을 막아서 Production 서비스를 실수로 없애는 사고를 막아야합니다.

 

다행히 AWS IAM을 이용하면 특정 Amplify App의 특정 Branch의 삭제를 막는 정책을 적용할 수 있습니다.

 

아래에서 부터는 실험 상황을 만들어서 Branch 삭제를 막는 방법을 정리해보겠습니다.

 

# 실험 상황

  • AWS IAM에서 테스트를 위한 '사용자'를 만들고 'AdministratorAccess-Amplify' 권한을 부여 했습니다. 아래의 모든 작업은 이 사용자로 수행합니다.
  • Github Repository에 [do-not-remove] Branch를 만듭니다.
  • Amplify Console에 [do-not-remove] Branch를 연결 시킵니다.

Amplify Console에 [do-not-remove] Branch가 연결된 모습

 

# 사용자에게서 Branch 삭제 권한 제외하기

아래 정책을 적용하면 특정 Branch의 삭제를 못하게 만들 수 있습니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Deny",
            "Action": "amplify:DeleteBranch",
            "Resource": "arn:aws:amplify:{region}:{account-id}:apps/{app-id}/branches/{branch-name}"
        }
    ]
}

위 정책에서 region, account-id, app-id, branch-name은 각자 알맞게 넣어주면 됩니다.

정책을 해석해보자면, 'Resource'에 명시한 [amplify app]의 [branch-name]에 대한 [amplify:DeleteBranch] 동작을 [Deny] 막는다는 의미입니다.

 

정책 적용 확인

위의 정책을 사용자에게 적용하면 사용자가 Branch를 연결해제(삭제)하려고 할 때 아래와 같이 막히는 것을 볼 수 있습니다.

(참고로, IAM에서 사용자에게 정책을 적용시켰을 때 몇 초 정도는 적용되기까지 딜레이가 있습니다.)

'브랜치 분리'를 시도해본다.
Branch 삭제를 못 한다.

 

 

참고자료

관련글 더보기

댓글 영역