배경

DR 점검 중 Spring Profile이 정상적으로 잡히지 않는 현상이 발생했다. 환경 Setting 및 정상적으로 접근은 되었는데 Kafka 특히 SecretsManager로의 접근이 비정상적으로 접근이 되고 있었다. DR 환경에서는 us-east-1을 제외한 region의 자원에 접근하지 못하는 환경이었는데… 조금 더 꼼꼼히 봤다면 해결할 수 있었을 문제였다.

해결

답은 application.yaml 쪽의 문제였다. 인프라 상에서는 모두 동일한 환경이었고 다른 서비스들은 정상적으로 기동이 되고 있었다. 하지만, java쪽 source를 깠을 때도 spring profile이나 그런 것들은 모두 정상적으로 기입되어 있었다.

문제의 부분은 아래였다.

String credentialRegion = Binder.get(env)
	.bind("app.external.client.kafka.credentail-region", String.class)
	.orElse("ap-northeast-2");
# application.yaml
app:
	external:
		client:
			kafka:
				credential-arn: [SECRETSMANAGER_ARN]

즉, java 쪽에서 credential-region이 없으면 ap-northeast-2로 잡아버리고 있었기 때문에 정상적으로 동작하고 있지 않는 상황이었다. 개발자가 아닌 인프라 운영이다보니 소스 쪽 문제가 있다라는 것에 확신을 갖지 못한게 아쉬운 상황이기도 했고 application.yaml을 조금 더 자세히 봤으면 발견할 수 있었던 문제였는데 아쉽다. DR 이후 개발자에게 전달하여 해결하였다.

# application.yaml
app:
	external:
		client:
			kafka:
				credential-arn: [SECRETSMANAGER ARN]
				credential-region: us-east-1 # 해당 내용 추가

추가적으로, 이 문제를 찾기 어려웠던 점은 cloudtrail에서 호출 정보를 모두 알지 못했다는 점에 있다.

보통이라면, getSecret 또는 describeSecret과 같은 action이 trail에 남아있어야 했지만 이번 사항 같은 경우는 그러지 않았다.

그 이유는, us-east-1에서 ap-northeast-2로 트래픽 자체가 가지 않았기 때문이다. 즉, 호출 자체가 실패했다는 말이다.

Dr 환경의 경우 외부 인터넷으로 통하는 모든 트래픽이 막혀있기 때문에 AWS 환경 상 private link를 통하지 않는다면 통신이 불가하다. 정확히 말하면 us-east-1에서 외부 인터넷으로 트래픽 자체가 막힌 것이다.

Java 상에서 문제도 있었지만 Cloud의 내부적인 트래픽에 대해서도 충분히 생각해볼 수 있었던 케이스였다.