セキュリティで保護されたパイプラインをサポートするようにプロジェクトとリポジトリの構造を構成する
このラボでは、セキュリティで保護されたパイプラインをサポートするように Azure DevOps でプロジェクトとリポジトリの構造を構成する方法について学習します。 このラボでは、プロジェクトとリポジトリの編成、アクセス許可の割り当て、セキュリティで保護されたファイルの管理に関するベスト プラクティスについて説明します。
これらの演習の所要時間は約 30 分です。
開始する前に
ラボの演習を行うには、Azure サブスクリプション、Azure DevOps 組織、eShopOnWeb アプリケーションが必要です。
- 手順に従ってラボ環境を検証します。
手順
演習 1:セキュリティで保護されたプロジェクト構造を構成する
この演習では、新しいプロジェクトを作成し、プロジェクトのアクセス許可を割り当てることで、セキュリティで保護されたプロジェクト構造を構成します。 責任とリソースを、特定のアクセス許可を持つ異なるプロジェクトまたはリポジトリに分離することで、セキュリティがサポートされます。
タスク 1:新しいチーム プロジェクトを作成する
-
Azure DevOps ポータル (
https://aex.dev.azure.com
) に移動し、自分の組織を開きます。 -
ポータルの左下隅にある組織の設定を開き、[全般] セクションで [プロジェクト] を選択します。
-
[新しいプロジェクト] オプションを選び、次の設定を使用します。
- name: eShopSecurity
- 可視性: プライベート
- 詳細設定: バージョン コントロール: Git
- 詳細設定: 作業項目プロセス: スクラム
-
[作成] を選択して、新しいプロジェクトを作成します。
-
これで、Azure DevOps ポータルの左上隅にあるAzure DevOps アイコンをクリックして、さまざまなプロジェクトを切り替えることができるようになりました。
各プロジェクトのアクセス許可と設定を個別に管理するには、[プロジェクトの設定] メニューに移動して、該当するチーム プロジェクトを選択します。 複数のユーザーまたはチームがさまざまなプロジェクトで作業している場合は、各プロジェクトに個別にアクセス許可を割り当てることもできます。
タスク 2:新しいリポジトリを作成し、プロジェクトのアクセス許可を割り当てる
-
Azure DevOps ポータルの左上隅にある組織名を選択し、新しい eShopSecurity プロジェクトを選択します。
-
[Repos] メニューを選択します。
-
README.md ファイルを追加し、[初期化] ボタンを選択して新しいリポジトリを初期化します。
-
ポータルの左下隅にある [プロジェクトの設定] メニューを開き、[Repos] セクションで [リポジトリ] を選択します。
-
新しい eShopSecurity リポジトリを選択し、[セキュリティ] タブを選択します。
注: プロジェクト内のすべてのリポジトリではなく、特定のリポジトリでのみ [セキュリティ] タブを選択していることを確認します。 すべてのリポジトリを選択すると、プロジェクト内の他のリポジトリにアクセスできなくなる可能性があります。
-
[継承] トグル ボタンをオフにして、親からのアクセス許可継承を削除します。
-
[共同作成者] グループを選択し、[アクセス許可の管理] と [読み取り] を除くすべてのアクセス許可に対して [拒否] ドロップダウンを選択します。 これにより、共同作成者グループのすべてのユーザーがリポジトリにアクセスできなくなります。
注: 実際のシナリオでは、共同作成者グループに対するアクセス許可の管理も拒否します。 このラボでは、共同作成者グループがアクセス許可を管理して、ラボを完了できるようにします。
-
[ユーザー] でご自身のユーザーを選択し、[許可] ボタンを選択して、すべてのアクセス許可を許可します。
注: [ユーザー] セクションに自分の名前が表示されない場合は、[ユーザーまたはグループの検索] テキスト ボックスに自分の名前を入力し、結果の一覧でそれを選択します。
-
変更は自動的に保存されます。
これで、アクセス許可を割り当てたユーザーと管理者のみがリポジトリにアクセスできるようになりました。 これは、特定のユーザーがリポジトリにアクセスし、eShopOnWeb プロジェクトからパイプラインを実行できるようにする場合に便利です。
演習 2:セキュリティで保護されたパイプラインをサポートするようにパイプラインとテンプレートの構造を構成する
タスク 1: CI パイプラインをインポートして実行する
まず、eshoponweb-ci.yml という CI パイプラインをインポートします。
-
Azure DevOps ポータル (
https://aex.dev.azure.com
) に移動し、自分の組織を開きます。 -
Azure DevOps で eShopOnWeb プロジェクトを開きます。
-
[パイプライン] > [パイプライン] に移動します。
-
[パイプラインを作成] ボタンを選択します。
-
[Azure Repos Git (Yaml)] を選びます。
-
eShopOnWeb リポジトリを選びます。
-
[既存の Azure Pipelines YAML ファイル] を選びます。
-
/.ado/eshoponweb-ci.yml ファイルを選び、 [続行] をクリックします。
-
[実行] ボタンを選んでパイプラインを実行します。
注: パイプラインには、プロジェクト名に基づく名前が付けられます。 パイプラインを特定しやすいように名前を変更します。
-
[パイプライン] > [パイプライン] に移動し、先ほど作成したパイプラインを選択します。 省略記号を選択し、[名前の変更/移動] オプションを選択します。
-
eshoponweb-ci という名前を付けて、[保存] を選択します。
タスク 2: CD パイプラインをインポートして実行する
注: このタスクでは、eshoponweb-cd-webapp-code.yml という名前の CD パイプラインをインポートして実行します。
-
[パイプライン] > [パイプライン] に移動します。
-
[新しいパイプライン] ボタンを選択します。
-
[Azure Repos Git (Yaml)] を選びます。
-
eShopOnWeb リポジトリを選びます。
-
[既存の Azure Pipelines YAML ファイル] を選びます。
-
/.ado/eshoponweb-cd-webapp-code.yml ファイルを選び、[続行] を選びます。
-
YAML パイプライン定義で、変数セクションを次のように設定します。
variables: resource-group: 'YOUR-RESOURCE-GROUP-NAME' location: 'centralus' templateFile: 'infra/webapp.bicep' subscriptionid: 'YOUR-SUBSCRIPTION-ID' azureserviceconnection: 'YOUR-AZURE-SERVICE-CONNECTION-NAME' webappname: 'YOUR-WEB-APP-NAME'
-
変数の値を実際の環境の値に置き換えます。
- YOUR-RESOURCE-GROUP-NAME を、このラボで使用するリソース グループの名前 (たとえば、rg-eshoponweb-secure) に置き換えます。
- location 変数の値を、リソースをデプロイする Azure リージョンの名前 (たとえば、centralus) に設定します。
- YOUR-SUBSCRIPTION-ID を、お使いの Azure サブスクリプション ID に置き換えます。
- YOUR-AZURE-SERVICE-CONNECTION-NAME を、azure subs に置き換えます
- YOUR-WEB-APP-NAME を、デプロイする Web アプリのグローバル一意識別子 (たとえば、文字列 eshoponweb-lab-multi-123456 の後にランダムな 6 桁の数字) に置き換えます。
-
[保存および実行] を選択し、メイン ブランチに直接コミットすることを選択します。
-
もう一度 [保存および実行] を選択します。
-
パイプライン実行を開きます。 “この実行を続行して [Web アプリへのデプロイ] に進む前に、リソースにアクセスするためのアクセス許可がこのパイプラインに必要です” というメッセージが表示された場合は、[表示]、[許可]、さらにもう一度 [許可] を選択します。 この操作は、パイプラインで Azure App Service リソースを作成するために必要です。
-
デプロイが完了するまでに数分かかる場合があります。パイプラインが実行されるまで待ちます。 パイプラインは、CI パイプラインの完了後にトリガーされ、次のタスクが含まれます。
- AzureResourceManagerTemplateDeployment: bicep テンプレートを使用して Azure App Service Web アプリをデプロイします。
- AzureRmWebAppDeployment: Web サイトを Azure App Service Web アプリに公開します。
注: デプロイに失敗した場合は、パイプライン実行ページに移動し、[失敗したジョブの再実行] を選択して別のパイプライン実行を呼び出します。
注: パイプラインには、プロジェクト名に基づく名前が付けられます。 パイプラインを識別しやすくするために、名前を変更しましょう。
-
[パイプライン] > [パイプライン] に移動し、先ほど作成したパイプラインを選択します。 省略記号を選択し、[名前の変更/移動] オプションを選択します。
-
eshoponweb-cd-webapp-code という名前を付け、 [保存] をクリックします。
これで 2 つのパイプラインが eShopOnWeb プロジェクトで実行されているはずです。
タスク 3:CD パイプライン変数を YAML テンプレートに移動する
このタスクでは、CD パイプラインで使用される変数を保存する YAML テンプレートを作成します。 これにより、他のパイプラインでテンプレートを再利用できるようになります。
-
[Repos] に移動し、次に [ファイル] に移動します。
-
.ado フォルダーを展開し、[新しいファイル] を選択します。
-
eshoponweb-secure-variables.yml ファイルに名前を付け、[作成] を選択します。
-
CD パイプラインで使用される変数セクションを新しいファイルに追加します。 ファイルは次のようになります。
variables: resource-group: 'rg-eshoponweb-secure' location: 'southcentralus' #the name of the Azure region you want to deploy your resources templateFile: 'infra/webapp.bicep' subscriptionid: 'YOUR-SUBSCRIPTION-ID' azureserviceconnection: 'azure subs' #the name of the service connection to your Azure subscription webappname: 'eshoponweb-lab-secure-XXXXXX' #the globally unique name of the web app
重要: 変数の値を環境の値 (リソース グループ、場所、サブスクリプション ID、Azure サービス接続、Web アプリ名) に置き換えます。
-
[コミット] を選択し、コミットの [コメント] テキスト ボックスに「
[skip ci]
」と入力し、[コミット] を選択します。注:
[skip ci]
コメントをコミットに追加すると、パイプラインが自動実行されなくなります。この時点では、パイプラインは既定でリポジトリへの変更が発生するたびに実行されています。 -
リポジトリ内のファイルの一覧から、eshoponweb-cd-webapp-code.yml パイプライン定義を開き、変数セクションを次のように置き換えます。
variables: - template: eshoponweb-secure-variables.yml
-
[コミット] を選択し、既定のコメントをそのまま使用してから、もう一度 [コミット] を選択してパイプラインを実行します。
-
パイプライン実行が正常に完了したことを確認します。
これで、CD パイプラインで使用される変数を含む YAML テンプレートが作成されました。 このテンプレートは、同じリソースをデプロイする必要があるシナリオの他のパイプラインで再利用できます。 また、運用チームは、テンプレートの値で、リソース グループ、リソースがデプロイされる場所などの情報を制御できます。パイプライン定義を変更する必要はありません。
タスク 4:YAML テンプレートを別のリポジトリとプロジェクトに移動する
このタスクでは、YAML テンプレートを別のリポジトリとプロジェクトに移動します。
-
eShopSecurity プロジェクトで、[Repos] > [ファイル] に移動します。
-
eshoponweb-secure-variables.yml という名前の新しいファイルを作成します。
-
.ado/eshoponweb-secure-variables.yml ファイルの内容を eShopOnWeb リポジトリから新しいファイルにコピーします。
-
変更をコミットします。
-
eShopOnWeb リポジトリで、eshoponweb-cd-webapp-code.yml パイプライン定義を開きます。
-
パイプライン定義で variables セクションの前の resources セクションに以下を追加します。
repositories: - repository: eShopSecurity type: git name: eShopSecurity/eShopSecurity #name of the project and repository
-
変数セクションを以下に置き換えます。
variables: - template: eshoponweb-secure-variables.yml@eShopSecurity #name of the template and repository
-
[コミット] を選択し、既定のコメントをそのまま使用してから、もう一度 [コミット] を選択してパイプラインを実行します。
-
パイプライン実行に移動し、パイプラインで eShopSecurity リポジトリの YAML ファイルが使用されていることを確認します。
これで YAML テンプレートが別のリポジトリとプロジェクトに移動されました。 このファイルは、同じリソースをデプロイする必要があるシナリオの他のパイプラインで再利用できます。 また、運用チームは、YAML ファイルの値を変更することで、リソース グループ、場所、セキュリティ、リソースがデプロイされる場所などの情報を制御できます。パイプライン定義を変更する必要はありません。
[!IMPORTANT] 不要な料金が発生しないように、Azure portal で作成されたリソースを必ず削除してください。
確認
このラボでは、Azure DevOps でセキュリティで保護されたプロジェクトとリポジトリの構造を構成する方法について学習しました。 アクセス許可を効果的に管理することで、DevOps パイプラインとプロセスのセキュリティと整合性を維持しながら、適切なユーザーが必要なリソースにアクセスできることを保証できます。