AWS SDK로 IAM 정책 버전 롤백하기

AWS SDK로 IAM 정책 버전 롤백하기

이 코드 예제에서는 AWS SDK를 사용해 IAM 정책 버전을 이전 버전으로 롤백하는 방법을 보여드려요.

출처: 문서

본문

이 예제는 다음 작업들을 다루어요.

  • 정책 버전 목록을 날짜순으로 가져오기
  • 기본(default) 정책 버전 찾기
  • 이전 정책 버전을 기본으로 설정하기
  • 기존 기본 버전 삭제하기

Python (SDK for Python / Boto3)

Note GitHub에 더 많은 내용이 있어요. AWS Code Examples Repository에서 전체 예제와 설정·실행 방법을 확인할 수 있어요.

def rollback_policy_version(policy_arn):
    """
    Rolls back to the previous default policy, if it exists.

    1. Gets the list of policy versions in order by date.
    2. Finds the default.
    3. Makes the previous policy the default.
    4. Deletes the old default version.

    :param policy_arn: The ARN of the policy to roll back.
    :return: The default version of the policy after the rollback.
    """
    try:
        policy_versions = sorted(
            iam.Policy(policy_arn).versions.all(),
            key=operator.attrgetter("create_date"),
        )
        logger.info("Got %s versions for %s.", len(policy_versions), policy_arn)
    except ClientError:
        logger.exception("Couldn't get versions for %s.", policy_arn)
        raise

    default_version = None
    rollback_version = None
    try:
        while default_version is None:
            ver = policy_versions.pop()
            if ver.is_default_version:
                default_version = ver
        rollback_version = policy_versions.pop()
        rollback_version.set_as_default()
        logger.info("Set %s as the default version.", rollback_version.version_id)
        default_version.delete()
        logger.info("Deleted original default version %s.", default_version.version_id)
    except IndexError:
        if default_version is None:
            logger.warning("No default version found for %s.", policy_arn)
        elif rollback_version is None:
            logger.warning(
                "Default version %s found for %s, but no previous version exists, so "
                "nothing to roll back to.",
                default_version.version_id,
                policy_arn,
            )
    except ClientError:
        logger.exception("Couldn't roll back version for %s.", policy_arn)
        raise
    else:
        return rollback_version

API 상세는 AWS SDK for Python (Boto3) API Reference의 다음 항목을 참고해요.

  • DeletePolicyVersion
  • ListPolicyVersions
  • SetDefaultPolicyVersion

더 알아보기 (Learn more)