マルチクラウド・マルチクラスタ環境では、Kubernetes(SPIFFE ID)とAWS IAM(ロール)が別々に管理されることが多く、統合されたアイデンティティ管理が課題になります。
この課題を解決するのが、SPIREとAWS IAMの統合です。
- Kubernetes → SPIFFE ID
- AWS → IAM Role
これらを連携することで、Pod単位でAWSリソースに安全にアクセスできるようになります。
1. アーキテクチャ概要
Pod(SPIFFE ID)
↓
SPIRE Agent
↓
SPIRE Server
↓
OIDC / STS
↓
AWS IAM Role
↓
S3 / DynamoDB / RDS
SPIFFE IDを元に、一時的なAWS認証情報を取得します。
2. 実現方法のパターン
① OIDC Federation(推奨)
- SPIREをOIDC Providerとして利用
- AWS IAMで信頼関係を構築
② IAM Roles Anywhere
- X.509証明書ベースで認証
- SPIFFE証明書を活用可能
③ IRSA(比較用)
- EKS専用(ServiceAccountベース)
- SPIFFEより柔軟性が低い
3. OIDC Federation構成
① SPIREでOIDC Discovery有効化
spire-server { oidc_discovery_provider { issuer = "https://spire.example.org" } }
② AWSにOIDC Provider登録
aws iam create-open-id-connect-provider \ --url https://spire.example.org \ --client-id-list sts.amazonaws.com
4. IAMロールの信頼ポリシー
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::123456789012:oidc-provider/spire.example.org" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "spire.example.org:sub": "spiffe://example.org/ns/default/sa/my-app" } } } ] }
SPIFFE IDとIAMロールを直接マッピングします。
5. Podからの認証フロー
1. PodがSPIFFE ID取得 2. OIDCトークン発行 3. STSへリクエスト 4. 一時認証情報取得
AWS CLI例
aws sts assume-role-with-web-identity \ --role-arn arn:aws:iam::123456789012:role/MyRole \ --web-identity-token token.jwt
6. IAM Roles Anywhereパターン
SPIFFEのX.509証明書をそのまま利用する方法です。
構成
SPIFFE証明書 ↓ IAM Roles Anywhere ↓ AWS認証情報発行
メリット
- OIDC不要
- X.509ベースでシンプル
7. セキュリティ設計ポイント
- 短命トークン(数分〜数時間)
- 最小権限IAMポリシー
- Trust Domain分離
特にSPIFFE ID単位で権限制御することが重要です。
8. 実務構成例
Kubernetes(SPIRE) ↓ OIDC Federation ↓ AWS IAM ↓ S3 / DynamoDB / Secrets Manager
- アプリ → S3アクセス
- バッチ → DynamoDB操作
9. IRSAとの比較
| 項目 | IRSA | SPIRE |
|---|---|---|
| 対応環境 | EKS限定 | マルチクラスタ対応 |
| ID粒度 | ServiceAccount | Workload単位 |
| 柔軟性 | 低 | 高 |
10. ベストプラクティス
- SPIFFE IDをIAMポリシーに直接マッピング
- OIDC Federationを基本に設計
- 証明書・トークンの自動ローテーション
- CloudTrailで監査
まとめ
- SPIREとAWS IAMを統合することでID管理を一本化
- Pod単位で安全にAWSアクセスが可能
- OIDC Federationが最も実用的
- ゼロトラストの中核は「ID」
SPIRE × IAMは、Kubernetesとクラウドをつなぐ次世代の認証基盤です。