メインコンテンツへスキップ

アカウント管理

アカウント管理ページは、AWSops のマルチアカウントモニタリングのための管理者専用ページです。Host アカウントの自動検出、Target アカウントの追加/削除、接続テスト、機能検出を 1 か所で実行できます。

アカウント管理
顧客セッションポイント

Steampipe Aggregator で全アカウントを単一画面から照会 — アカウントの追加/削除は data/config.jsonaccounts[] を修正するだけで、コード変更は不要です。→ なぜ AWSops なのか

設定フロー

以下のダイアグラムは、Host アカウントと Target アカウントの登録プロセス、および Admin アクセス制御のフローを示します。各ノードにマウスを合わせると詳細説明が表示されます。

主な機能

Host アカウント設定

アカウントが 1 つも登録されていない状態でページにアクセスすると、Host アカウント登録バナーが表示されます。

項目説明
自動検出EC2 インスタンスクレデンシャルで STS GetCallerIdentity を呼び出し
機能検出Cost Explorer、EKS、K8s API をプロービングして利用可能な機能を自動設定
Alias 入力Host アカウントの表示名を指定(デフォルト: "Host")
config.json 登録data/config.jsonaccounts[] 配列に isHost: true で登録

登録済みアカウントの管理

登録されたすべてのアカウントがテーブル形式で表示されます。

カラム説明
Aliasアカウント表示名
Account ID12 桁の AWS アカウント ID
Regionデフォルトリージョン
TypeHost または Target
FeaturesCost、EKS、K8s の有効化状態(バッジ形式)
Actions接続テスト、削除(Host アカウントは削除不可)

新規アカウントの追加

Target アカウントを追加するには、以下の情報を入力します。

フィールド形式説明
Account ID12 桁の数字AWS アカウント ID
Alias英数字/スペース/ハイフン/アンダースコアダッシュボードに表示される名前
Region選択主要 10 リージョンから選択
Role Name文字列クロスアカウント IAM ロール名(デフォルト: AWSopsReadOnlyRole

追加前に必ず Test Connection で AssumeRole 接続を確認してください。

Target アカウントの CloudFormation デプロイ

新しいアカウントを追加する前に、そのアカウントでクロスアカウント IAM ロールを先に作成する必要があります。

aws cloudformation deploy \
--template-file infra-cdk/cfn-target-account-role.yaml \
--stack-name awsops-target-role \
--parameter-overrides HostAccountId=<HOST_ACCOUNT_ID> \
--capabilities CAPABILITY_NAMED_IAM

このコマンドは以下を作成します:

  • AWSopsReadOnlyRole: Host アカウントから AssumeRole 可能な読み取り専用ロール
  • Trust Policy: Host アカウント ID を Principal に指定
  • 権限: ReadOnlyAccess + 必要な追加ポリシー

Admin アクセス制御

アカウント管理ページには管理者のみアクセスできます。

項目説明
設定場所data/config.jsonadminEmails 配列
空配列[] の場合、認証済みのすべてのユーザーにアクセスを許可
検証フローJWT からメールアドレスを抽出 → adminEmails 配列とマッチング → 許可/拒否
レート制限ユーザーあたり毎分 5 回のリクエスト制限
API 保護add-account、remove-account、init-host すべてに同一の admin チェックを適用
{
"adminEmails": ["admin@example.com", "ops@example.com"]
}
Admin 未設定の場合

adminEmails が空配列の場合、認証済みユーザーであれば誰でもアカウントを追加/削除できます。本番環境では必ず管理者メールアドレスを指定してください。

使い方

  1. Host アカウント登録: 初回アクセス時に表示されるバナーで Alias を入力し、「Detect & Register Host」をクリック
  2. Target アカウントの準備: Target アカウントで CloudFormation スタックをデプロイ
  3. 接続テスト: Account ID を入力し、「Test Connection」で AssumeRole を検証
  4. アカウント追加: Alias、Region を入力し、「Add Account」をクリック
  5. 確認: 登録済みアカウントテーブルで Features バッジを確認
  6. Steampipe 設定: 新しいアカウントの Steampipe connection を構成(Aggregator に自動追加)

Departments(Cognito グループベースのアクセス制御)

/accounts ページ下部の Departments セクションで、Cognito グループごとにページ・アカウント・EKS クラスター・外部データソースのアクセス権限を細かく設定できます。

フィールド説明
name部門名(例: "FinOps"、"SecOps")
cognitoGroupCognito User Pool のグループ名(完全一致)
accountsアクセス可能なアカウント ID の配列 — ["*"] の場合は全体
pagesアクセス可能なページパスの配列(/ec2/cost など)— ["*"] の場合は全体
eksClusterNamesアクセス可能な EKS クラスター名 — ["*"] の場合は全体
datasourceIdsアクセス可能な外部データソース ID — ["*"] の場合は全体

動作の仕組み

  • Cognito JWT の cognito:groups クレームを読み取り、マッチする Department の制限を適用します。
  • マッチする Department がない場合は admin かどうかに応じて動作します(admin は全アクセス、非 admin はブロック)。
  • 空配列は「全体無効」→ ["*"] を明示しないと全体許可になりません。

API

# 部門一覧の照会
curl '/awsops/api/steampipe?action=config' | jq '.departments'

# 部門の保存(admin 専用)
curl -X POST '/awsops/api/steampipe?action=save-departments' \
-H 'Content-Type: application/json' \
-d '{"departments":[{"name":"FinOps","cognitoGroup":"finops","accounts":["*"],"pages":["/cost","/inventory","/bedrock"],"eksClusterNames":["*"],"datasourceIds":["*"]}]}'
Departments を空にすると無効化

departments 配列が空の場合、部門ベースのアクセス制御は完全に無効になります — すべてのログインユーザーのアクセス権限は admin/一般ポリシーのみで決定されます。

使用上のヒント

機能バッジ

アカウントが登録されると、Cost、EKS、K8s の機能が自動検出されます。バッジが表示されない機能は、そのアカウントで該当サービスが有効化されていないか、権限が不足している場合です。

Steampipe Aggregator パターン

aws connection はすべての登録アカウントのデータを統合照会します。個別アカウントの照会には aws_{accountId} connection を使用し、AccountSelector のドロップダウンから選択できます。

アカウント削除時

Target アカウントを削除しても、そのアカウントの CloudFormation スタックは自動的に削除されません。必要に応じて Target アカウント側でスタックを個別に削除してください。

AI 分析のヒント

AI アシスタントに次のように質問すると、登録済みアカウントに関する情報をすばやく確認できます:

  • 「登録されているアカウントの一覧を見せて」
  • 「Cost Explorer が有効なアカウントは?」
  • 「EKS クラスターがあるアカウントは?」
  • 「Staging アカウントのリソース状況を教えて」
  • 「すべてのアカウントの EC2 インスタンス数を比較して」

関連ページ