본문 바로가기

개발환경/Build

Artifactory 2.2.1 "Allow Anonymous Access"에 대한 고찰

메이븐을 이용하면서 레파지토리로 Nexus나 Artifactory를 이용할 수 있다.
필자의 경우 최근엔 Nexus를 이용하고 있지만 아직도 Artifactory를 사용하는 프로젝트가 많이 있어서 종종 사용하게 된다. 

오늘은 다음과 같은 목적으로 Artifactory의 설정을 바꿔보았다.

1. 새로운 레파지토리가 필요하여 아이디를 지정하고 생성함.
2. 보안을 위해서 기존 사용자는 모든 레파지토리를 이용할 수 있지만 신규 사용자는 새로 만들어진 레파지토리만 이용하게하려고 함.
3. 사용자와 그룹 및 퍼미션을 생성하고 관계를 설정.
4. 생성된 레파지토리에 퍼미션을 할당함.
5. Admin -> Security -> General 메뉴에서 "Allow Anonymous Access"를 Unchecked 함.

기대했던 동작은 기존 사용자는 모든 레파지토리에 접근할 수 있고 신규 사용자만 새로이 생성된 레파지토리에 접근했어야 했는데 어찌된 일인지 모든 사용자에게서 

[WARNING] repository metadata for: 'snapshot kr.flowerteam.pom:BasicPOM:1.1.2-SNAPSHOT' could not be retrieved from repository: snapshots due to an error: Authorization failed: Access denied to: http://{myhost}/artifactory/repo/kr/flowerteam/pom:BasicPOM/7.13-SNAPSHOT/maven-metadata.xml 


와 같은 경고와 더불어 배포가 되지 않았다.

다음은 당시의 설정 내역이다.

setting.xml

...

<servers>
    <server>
      <id>flowerteam-rep</id>
      <username>flowerteam</username>
      <password>flowerteam</password>
    </server>
  </servers>
...



pom.xml

...
 <distributionManagement>

    <repository>
      <id>flowerteam-rep</id>
      <name>Flowerteam Releases</name>
      <url>dav:http://{myhost}/artifactory/libs-releases-local</url>
    </repository>
    <snapshotRepository>
      <id>flowerteam-rep</id>
      <name>Flowerteam Snapshots</name>
      <url>dav:http://{myhost}/artifactory/libs-snapshots-local</url>
    </snapshotRepository>
  </distributionManagement>
... 


지금까지는 Security 설정을 변경해 본적이 없어서 사용자와 패스워드만 맞으면 되는 것으로알았다. 그런데 "Allow Anonymous Access" 체크를 빼보니 그렇지 않다는 것을 알 수 있었다.

이에 대한 논의는 2010년에 많이 있었던 듯하다. 
참고: http://forums.jfrog.org/quot-Allow-Anonymous-Access-quot-only-for-selected-repos-td5469007.html
 
별다른 성과가 없었는데 

다음의 URL에서 실마리를 찾을 수 있었다.
참고: http://old.nabble.com/Authorization-failed---Access-denied-td28238554.html

중간쯤에 freddy33 이라는 사람이 답글에 보면 각각의 레파지토리는 서버 선언에 따라서 ID가 필요하다는 내용을 볼 수 가 있다. 아래는 그 내용이다.

Re: Authorization failed - Access denied

Click to flag this post 

by freddy33 Apr 14, 2010; 06:02pm :: Rate this Message:    - Use ratings to moderate (?)

Reply | Print | View Threaded | Show Only this Message

Hi,

You just need to repeat yourself :) The DRY principle does not really apply in Maven...
Every repository declaration with ID needs its corresponding server declaration. So adding:
<server>
     <id>central</id>
     <username>user1</username>
     <password><here the password encrypted></password>
</server>
<server>
     <id>snapshots</id>
     <username>user1</username>
     <password><here the password encrypted></password>
</server>

to your list of server should solve your issue.
HTH,
Fred.


그래서 위에 문제가 되었던 설정 부문을 다음과 같이 변경함으로써 해결되었다.

setting.xml

...

<servers>
    <server>
      <id>flowerteam-rep-central</id>
      <username>flowerteam</username>
      <password>flowerteam</password>
    </server>
    <server>
      <id>flowerteam-rep-snapshots</id>
      <username>flowerteam</username>
      <password>flowerteam</password>
    </server> 
  </servers>
...



pom.xml

...
 <distributionManagement>

    <repository>
      <id>flowerteam-rep-central</id>
      <name>Flowerteam Releases</name>
      <url>dav:http://{myhost}/artifactory/libs-releases-local</url>
    </repository>
    <snapshotRepository>
      <id>flowerteam-rep-snapshots</id>
      <name>Flowerteam Snapshots</name>
      <url>dav:http://{myhost}/artifactory/libs-snapshots-local</url>
    </snapshotRepository>
  </distributionManagement>
...