はじめに
AWS の開発環境として IDE を準備する際、手間だと感じたことはありませんか?例えば、各種インストールやアクセスキーの設定など、開発者にとっては煩わしい作業です。また、チーム内で同様の初期セットアップを繰り返すのは、避けたいところです。
本記事では、セキュアかつ迅速に AWS 開発できる環境の構築方法を解説します。AWS 開発環境の構築を省きたい方、特にエンタープライズ企業で AWS 開発に携わるエンジニアの方々にオススメです。
本記事のポイント
- AWS IAM Identity Center の設定を引用し、Dev Container でプロファイルを作成
- IDE から、クレデンシャルレスで AWS CLI を利用
- 開発環境の構築手順を大幅に削減し、セキュアなアクセスを実現
構成図
構成図は以下の通りです。ユーザー管理に Microsoft Entra ID を採用しており、GitHub と AWS へのシングルサインオンを実現しています。3つの簡単なステップで開発環境が構築され、数分で AWS 環境へアクセスできます。
本構成のメリット
-
シングルサインオン:
Microsoft Entra ID の認証情報のみで、GitHub と複数の AWS アカウント・ロールへシームレスにアクセス可能 -
AWS リソースへの迅速な操作:
GitHub Codespaces 起動後、aws sso login
コマンド一つでAWSリソースを操作可能 -
クレデンシャルレスによるセキュリティ向上:
クレデンシャルのセットアップが不要になるため、アクセスキー漏洩リスクを抑制 -
一元的なアクセス制御:
AWS IAM Identity Center でアクセス権限を一元管理し、プロファイル切替で柔軟なアクセス制御が可能 -
開発効率の最大化:
開発環境の準備時間を削減し、開発者はすぐにコーディングへ着手可能
実際にアクセスしてみる
① Codespaces 起動
② SSO ログイン
③ 認証コード確認 & データアクセス許可
① Codespaces 起動
まずは、GitHub リポジトリの任意ブランチから、Codespaces を起動します。
Codespaces 用のウィンドウへ自動遷移します。並行して devcontainer.json で定義している初期セットアップが実行されます。利用しているイメージで異なりますが、暫くするとターミナルに以下メッセージが表示されます。
👋 Welcome to Codespaces! You are on a custom image defined in your devcontainer.json file.
🔍 To explore VS Code to its fullest, search using the Command Palette (Cmd/Ctrl + Shift + P)
📝 Edit away, then run your build command to see your code running in the browser.
② SSO ログイン
Codespaces のターミナルから、以下のコマンドで SSO ログインを実行します。
$ aws sso login --profile CdkDeployment # プロファイルはdevconatinerで事前に作成
自動的に以下のポップアップが表示されます。
「開く」をクリックすると、ブラウザの別ウィンドウが開きます。
③ 認証コード確認 & データアクセス許可
別ウィンドウで、認証コードの確認が求められます。Codespaces のターミナルで表示されていたコードと一致していれば、「確認して続行」をクリックしてください。
次にデータアクセス許可を求められますので、「許可」をクリックしてください。
その後、Codespaces のターミナルに戻ると以下のメッセージが表示されます。
Successfully logged into Start URL: https://{IdentityStoreID}.awsapps.com/start#/
シンプルな構成 (86MB 程度) のリポジトリであれば、①〜③のステップは約3分で完了します。これは、Codespaces の最小構成である 2-core (8GB RAM) での計測結果です1。8-core (32GB RAM) にすると、約1分半で構築が完了します。もし起動時間が長い場合は、以下のような対策を検討してみてください。
- GitHub Codespaces のマシンタイプを変更
- Dev Container の見直し
- カスタムイメージを使用
- 拡張機能の取捨選択
AWS CLI の実行
①〜③のステップ完了後、AWS CLI を利用できます。試しに、以下コマンドを実行してみましょう。AWSReservedSSO_
で始まる許可セットの IAM ロールを引き受けできていることが、確認できます。
$ aws sts get-caller-identity --profile CdkDeployment
{
"UserId": "AROAxxxx:yusei.matsuo@example.com",
"Account": "111122223333",
"Arn": "arn:aws:sts::111122223333:assumed-role/AWSReservedSSO_CdkDeployment_1a12345b12c123d1/yusei.matsuo@example.com"
}
補足として、私の所属するチームでは IaC ツールに AWS CDK を採用しています。上記の方法で AWS CDK CLI による diff やデプロイも迅速に実行できるため、非常に便利です。新しく参加したメンバーも開発環境を素早く構築できるため、オンボーディングにも効果的です。
設定手順
ここからは、上記構成の設定手順を説明します。
前提条件
- AWS IAM Identity Center の組織インスタンスが有効化2
- GitHub Enterprise Cloud でリポジトリを作成済3
- Microsoft Entra ID 関連の SAML 連携を設定済45
1. AWS IAM Identity Center 許可セットの作成
管理アカウントの AWS IAM Identity Center で、必要なアクセス権限を持つ許可セットを作成します。例えば、AWS CDK 実行用に許可セットを作成したい場合、以下のようなインラインポリシーを指定します6。
{
"Version": "2012-10-17",
"Statement": [{
"Sid": "AssumeCDKRoles",
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "*",
"Condition": {
"StringEquals": {
"iam:ResourceTag/aws-cdk:bootstrap-role": [
"image-publishing",
"file-publishing",
"deploy",
"lookup"
]
}
}
}]
}
参考手順:Create a permission set - AWS IAM Identity Center
2. AWS IAM Identity Center アクセスの割り当て
AWS IAM Identity Center のユーザー・グループ7に対して、アクセスを割り当てます。アクセス先の AWS アカウントに対して、ユーザー・グループ&先ほど作成した許可セットを指定します。
開発用途での割り当ては、グループの方が便利です。新しいメンバーが参加した際に、Microsoft Entra ID からグループに追加するだけでアクセス権限が付与されるためです。
参考手順:Assign user access to AWS accounts - AWS IAM Identity Center
3. Dev Container の設定
GitHub のリポジトリで .devcontainer/devcontainer.json
を作成します。extensions
には、チームで共通に利用する拡張機能を指定します。
{
// 用途に応じてイメージを変更
"image": "mcr.microsoft.com/devcontainers/typescript-node",
"features": {
// AWS CLI のインストール
"ghcr.io/devcontainers/features/aws-cli:1": {}
},
// 起動後に実行するコマンドを指定
"postCreateCommand": "sh .devcontainer/initialize.sh",
// VSCode の拡張機能などを定義(以下はサンプル)
"customizations": {
"vscode": {
"extensions": [
"dbaeumer.vscode-eslint",
"esbenp.prettier-vscode",
"GitHub.copilot",
"GitHub.copilot-chat",
"ms-azuretools.vscode-docker",
"ms-vscode.vscode-typescript-next",
"amazonwebservices.aws-toolkit-vscode"
]
}
}
}
上記の postCreateCommand
では、AWS CLI のプロファイル設定に関するスクリプトを実行します。ここで設定するプロファイルは、GitHub Codespaces で AWS SSO ログインするときに利用します8。
.devcontainer/initialize.sh
を作成し、以下のスクリプトを記述します。
#!/bin/bash
mkdir -p ~/.aws
# 許可セットなど、アクセス割り当てに準じたプロファイルを作成
cat <<EOL > ~/.aws/config
[default]
region=ap-northeast-1
output=json
[profile CdkDeployment]
sso_start_url = https://{IdentityStoreID}.awsapps.com/start#/
sso_region = ap-northeast-1
sso_registration_scopes = sso:account:access
sso_account_id = 111122223333
sso_role_name = CdkDeployment
[profile Viewer]
sso_start_url = https://{IdentityStoreID}.awsapps.com/start#/
sso_region = ap-northeast-1
sso_registration_scopes = sso:account:access
sso_account_id = 444455556666
sso_role_name = Viewer
EOL
echo "AWS config file created successfully at ~/.aws/config"
npm install
複数のプロファイルを設定することで、アクセス権限を柔軟に使い分けることができます。例えば、開発・ステージング・本番環境の AWS アカウントごとに異なる権限を設定できます。上記の設定例では、以下のような使い分けを想定しています。
-
CdkDeployment
プロファイル:AWS CDK のデプロイに必要な権限を持つロール -
Viewer
プロファイル:AWS リソースの参照のみが可能なロール
これらのプロファイルがプライベートリポジトリに含まれることは問題ありません。なぜなら、IAM Identity Center で認可設定を一元管理しているからです。IAM Identity Center でアクセス割り当てされていないユーザーは、プロファイルを使用しても AWS リソースにアクセスできません。
最後に、上記2つのファイルをリポジトリにコミット・プッシュします。前述の通り、GitHub Codespaces を起動すると自動的に Dev Container で initialize.sh
が実行されます。
おわりに
AWS IAM Identity Center と Dev Container を組み合わせることで、開発環境の構築を劇的に簡素化できます。開発者はリポジトリから Codespaces を起動して数分後に、AWS リソースへアクセスできるようになります。また、クレデンシャルのセットアップが不要なため、セキュリティの向上にも寄与します。
本記事がどなたかのお役になれば幸いです。
参考資料
- IAM Identity Center とは何ですか? - AWS IAM Identity Center
- AWS CLI を使用した IAM アイデンティティセンター認証の設定 - AWS Command Line Interface
- GitHub Codespaces の概要 - GitHub Docs
- Developing inside a Container using Visual Studio Code Remote Development
- Microsoft Artifact Registry
-
次回以降の起動はさらに短時間で完了します。 ↩
-
新しいリポジトリの作成 - GitHub Enterprise Cloud Docs: リポジトリ作成後、
cdk init app --language typescript
など任意のプロジェクトを作成してください。本記事の設定手順では、npm プロジェクトを想定した処理になっています。 ↩ -
Microsoft Entra ID と IAM Identity Center を使用して SAML と SCIM を構成する - AWS IAM Identity Center ↩
-
チュートリアル: Microsoft Entra SSO と GitHub Enterprise Cloud - Enterprise アカウントの統合 - Microsoft Entra ID | Microsoft Learn ↩
-
記載例のポリシーはSecurity And Safety Dev Guide · aws/aws-cdk Wikiを引用しています。 ↩
-
構成図における AWS IAM Identity Center のユーザー・グループは、外部 ID プロバイダーの「Microsoft Entra ID」から同期されています。 ↩
-
initialize.sh
で任意ツールのインストールコマンドを追加すれば、Codespaces 起動後に自動でインストールされます。 ↩