2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS開発環境の3分クッキング!IAM Identity CenterとDev Containerの活用

Last updated at Posted at 2025-01-26

はじめに

AWS の開発環境として IDE を準備する際、手間だと感じたことはありませんか?例えば、各種インストールやアクセスキーの設定など、開発者にとっては煩わしい作業です。また、チーム内で同様の初期セットアップを繰り返すのは、避けたいところです。

本記事では、セキュアかつ迅速に AWS 開発できる環境の構築方法を解説します。AWS 開発環境の構築を省きたい方、特にエンタープライズ企業で AWS 開発に携わるエンジニアの方々にオススメです。

本記事のポイント

  • AWS IAM Identity Center の設定を引用し、Dev Container でプロファイルを作成
  • IDE から、クレデンシャルレスで AWS CLI を利用
  • 開発環境の構築手順を大幅に削減し、セキュアなアクセスを実現

構成図

構成図は以下の通りです。ユーザー管理に Microsoft Entra ID を採用しており、GitHub と AWS へのシングルサインオンを実現しています。3つの簡単なステップで開発環境が構築され、数分で AWS 環境へアクセスできます。

構成図

本構成のメリット

  1. シングルサインオン:
    Microsoft Entra ID の認証情報のみで、GitHub と複数の AWS アカウント・ロールへシームレスにアクセス可能
  2. AWS リソースへの迅速な操作:
    GitHub Codespaces 起動後、aws sso login コマンド一つでAWSリソースを操作可能
  3. クレデンシャルレスによるセキュリティ向上:
    クレデンシャルのセットアップが不要になるため、アクセスキー漏洩リスクを抑制
  4. 一元的なアクセス制御:
    AWS IAM Identity Center でアクセス権限を一元管理し、プロファイル切替で柔軟なアクセス制御が可能
  5. 開発効率の最大化:
    開発環境の準備時間を削減し、開発者はすぐにコーディングへ着手可能

実際にアクセスしてみる

① Codespaces 起動
② SSO ログイン
③ 認証コード確認 & データアクセス許可

① Codespaces 起動

まずは、GitHub リポジトリの任意ブランチから、Codespaces を起動します。

Codespaces 起動画面

Codespaces 用のウィンドウへ自動遷移します。並行して devcontainer.json で定義している初期セットアップが実行されます。利用しているイメージで異なりますが、暫くするとターミナルに以下メッセージが表示されます。

Codespaces 起動メッセージ
👋 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 ログインを実行します。

SSO ログイン
$ aws sso login --profile CdkDeployment # プロファイルはdevconatinerで事前に作成

自動的に以下のポップアップが表示されます。

ポップアップ

「開く」をクリックすると、ブラウザの別ウィンドウが開きます。

③ 認証コード確認 & データアクセス許可

別ウィンドウで、認証コードの確認が求められます。Codespaces のターミナルで表示されていたコードと一致していれば、「確認して続行」をクリックしてください。

認証コード確認

次にデータアクセス許可を求められますので、「許可」をクリックしてください。

データアクセス許可

その後、Codespaces のターミナルに戻ると以下のメッセージが表示されます。

SSO ログイン成功メッセージ
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 ロールを引き受けできていることが、確認できます。

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 やデプロイも迅速に実行できるため、非常に便利です。新しく参加したメンバーも開発環境を素早く構築できるため、オンボーディングにも効果的です。

設定手順

ここからは、上記構成の設定手順を説明します。

  1. AWS IAM Identity Center 許可セットの作成
  2. AWS IAM Identity Center アクセスの割り当て
  3. Dev Container の設定

前提条件

  • 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 には、チームで共通に利用する拡張機能を指定します。

.devcontainer/devcontainer.json
{
  // 用途に応じてイメージを変更
  "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 を作成し、以下のスクリプトを記述します。

.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 リソースへアクセスできるようになります。また、クレデンシャルのセットアップが不要なため、セキュリティの向上にも寄与します。

本記事がどなたかのお役になれば幸いです。

参考資料

  1. 次回以降の起動はさらに短時間で完了します。

  2. AWS IAM Identity Center の有効化 - AWS IAM Identity Center

  3. 新しいリポジトリの作成 - GitHub Enterprise Cloud Docs: リポジトリ作成後、cdk init app --language typescript など任意のプロジェクトを作成してください。本記事の設定手順では、npm プロジェクトを想定した処理になっています。

  4. Microsoft Entra ID と IAM Identity Center を使用して SAML と SCIM を構成する - AWS IAM Identity Center

  5. チュートリアル: Microsoft Entra SSO と GitHub Enterprise Cloud - Enterprise アカウントの統合 - Microsoft Entra ID | Microsoft Learn

  6. 記載例のポリシーはSecurity And Safety Dev Guide · aws/aws-cdk Wikiを引用しています。

  7. 構成図における AWS IAM Identity Center のユーザー・グループは、外部 ID プロバイダーの「Microsoft Entra ID」から同期されています。

  8. initialize.sh で任意ツールのインストールコマンドを追加すれば、Codespaces 起動後に自動でインストールされます。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?