kkamegawa's weblog

Visual Studio,TFS,ALM,VSTS,DevOps関係のことについていろいろと書いていきます。Google Analyticsで解析を行っています

プライベートで作ったAzure Artifactsフィードをほかのプロジェクトで参照したい

Azure Artifactsに関してこんな相談を受けました。

返信で回答しており、できたということなんですが、一応備忘録的に書いておきます。

まず、Azure Artifactsには全世界に見えるPublic、Organization、Projectといった三段階のスコープがあります。やったことはないですが、Publicにしても例えばAzure の条件付きアクセスポリシーを設定してしまえば、「社員(事務所など)からはみえるんだけど、一般の人には見えない」なんてArtifactsフィードもできるのかな。これできたらちょっと便利なケースがありそうですが。条件付きアクセスポリシーの対象外になるのかなーどうかなー。

f:id:kkamegawa:20200216213202p:plain

Active FeedsとDeleted Feedsの二種類があります。さらにProject(Testfeed)とOrganization(internal_pre_publishとlocalMaven)レベルですね。

f:id:kkamegawa:20200216213206p:plain

Deleted Feedsに切り替えるとゴミ箱に入れたフィードが表示されます(入れてないので空です)。さて、このProjectのフィード(TestFeed)はよそのチームプロジェクトからは参照できません。しかし、昔はArtifactsのスコープがProjectしかなかったので、その経緯でProjectのままになっているとか、あとから見せたくなったとか、理由で参照させたいことはあります。

f:id:kkamegawa:20200216213214p:plain

そういうときはClassicの場合、ビルド定義でBuild job authorization scopeProject Collectionにしてください。Collectionってなんやねん、と思われるかもしれませんが、現在のOrganizationのことです。Organizationという名前があとからできてしまったので、整合が取れて無いですね…。Azure DevOps Server 2019ではCollectionでいいのですが。

f:id:kkamegawa:20200216213219p:plain

え、おれのビルド定義もうYAMLしか書いてないけど、そんなのないよ?どうやるの?という方もいると思います。

f:id:kkamegawa:20200216213210p:plain

そういう場合、ProjectのPipelinesSettingsにあるLimit job authorization scope to current projectを設定します。有効にするとジョブは現在のプロジェクトのみです。スクリーンキャプチャはOrganizationレベルの設定なので、こちらを設定すると全プロジェクトはプロジェクト外のリソースにはアクセスできなくなります。

この設定はビルド管理者の権限が必要になるのと、有効にしてしまうとほかのプロジェクトのリソースに簡単に参照できるようになるので、気を付けてください。

過去のフィードは致し方ないのですが、Artifactsは基本的にOrganizationレベルで作ることをお勧めします。ここが一番大きなセキュリティの分界点です(というお話をIgnite The Tourでもさせていただきました)。