implementing-aws-iam-permission-boundaries について
AWS IAM のアクセス許可境界でユーザーやロールの実効権限を制限するためのセキュリティスキルです。IAM リソース作成を開発者に委任する際のポリシー設計、デプロイ、権限昇格対策の検証を扱います。
主な機能
- 01アクセス許可境界ポリシーの定義
- 02新規ロールへの境界適用
- 03境界の削除・変更の防止
- 04Terraform によるデプロイ
- 05権限昇格対策の検証
活用シーン
- 01開発者への IAM ロール作成の委任
- 02サンドボックス・開発アカウントの分離
- 03マルチテナントロールの権限制限
- 04CI/CD 自動化ロールの制約
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ mukul975/ anthropic-cybersecurity-skills --skill implementing-aws-iam-permission-boundariesインストール後、Claude Code で/implementing-aws-iam-permission-boundariesを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
LICENSEassets/template.mdreferences/api-reference.mdstandards.mdworkflows.mdscripts/agent.pyprocess.py詳細
AWS IAM 権限境界の実装
概要
IAM 権限境界は、ID ベースのポリシーが IAM エンティティ(ユーザーまたはロール)に付与できる権限の上限を定める、AWS の高度な機能です。これにより、特権昇格のリスクを伴わずに、セキュリティチームがアプリケーション開発者へ IAM ロールやポリシーの作成を安全に委任できます。エンティティの実効権限は、その ID ベースのポリシーと権限境界の共通部分です。ID ポリシーで AdministratorAccess が付与されていても、権限境界によって許可されたアクションのみに制限されます。
使用する場面
- 環境に AWS IAM 権限境界の機能をデプロイまたは設定する場合
- コンプライアンス要件に沿ったセキュリティ制御を確立する場合
- この分野のセキュリティアーキテクチャを構築または改善する場合
- この実装が必要なセキュリティ評価を実施する場合
前提条件
- IAM 管理者アクセス権を持つ AWS アカウント
- AWS IAM ポリシー言語(JSON)の知識
- 適切な認証情報で設定された AWS CLI v2
- Infrastructure as Code によるデプロイ用の Terraform または CloudFormation
基本概念
権限境界の仕組み
Identity-Based Policy Permission Boundary
(What the role CAN do) ∩ (What the role MAY do)
│ │
└──────────┬───────────────────┘
│
Effective Permissions
(Only actions in BOTH policies)
ポリシー評価ロジック
AWS は次の順序で権限を評価します。
- ポリシー内の 明示的な拒否 — 常に優先されます
- Organizations SCP — 組織全体の上限を定めます
- 権限境界 — エンティティ単位の上限を定めます
- ID ベースのポリシー — 実際の権限を付与します
- リソースベースのポリシー — アカウント間アクセス(別途評価されます)
エンティティがアクションを実行できるのは、該当するすべての種類のポリシーで許可されている場合のみです。
主なユースケース
| ユースケース | 説明 |
|---|---|
| 開発者への委任 | 開発者が権限境界を超えて特権を昇格することなく IAM ロールを作成できるようにします |
| サンドボックスの分離 | サンドボックス/開発アカウントでロールが実行できる操作を制限します |
| マルチテナントワークロード | テナント固有のロールが他のテナントのリソースにアクセスできないようにします |
| CI/CD パイプラインのロール | 自動化ロールを特定のサービスに制限します |
ワークフロー
ステップ 1:権限境界ポリシーを定義する
許可する権限の上限を定める管理ポリシーを作成します。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowedServices",
"Effect": "Allow",
"Action": [
"s3:*",
"dynamodb:*",
"lambda:*",
"logs:*",
"cloudwatch:*",
"sqs:*",
"sns:*",
"events:*",
"states:*",
"xray:*",
"ec2:Describe*",
"ec2:CreateTags",
"sts:AssumeRole",
"kms:Decrypt",
"kms:GenerateDataKey",
"kms:DescribeKey",
"secretsmanager:GetSecretValue"
],
"Resource": "*"
},
{
"Sid": "AllowIAMPassRole",
"Effect": "Allow",
"Action": "iam:PassRole",
"Resource": "arn:aws:iam::*:role/app-*",
"Condition": {
"StringEquals": {
"iam:PassedToService": [
"lambda.amazonaws.com",
"states.amazonaws.com"
]
}
}
},
{
"Sid": "DenyBoundaryDeletion",
"Effect": "Deny",
"Action": [
"iam:DeletePolicy",
"iam:DeletePolicyVersion",
"iam:CreatePolicyVersion"
],
"Resource": "arn:aws:iam::*:policy/DeveloperBoundary"
},
{
"Sid": "DenyBoundaryRemoval",
"Effect": "Deny",
"Action": [
"iam:DeleteUserPermissionsBoundary",
"iam:DeleteRolePermissionsBoundary"
],
"Resource": "*"
}
]
}
ステップ 2:開発者への委任ポリシーを作成する
開発者に IAM ロールの作成を許可します。ただし、権限境界を必ずアタッチするようにします。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowCreateRoleWithBoundary",
"Effect": "Allow",
"Action": [
"iam:CreateRole",
"iam:AttachRolePolicy",
"iam:DetachRolePolicy",
"iam:PutRolePolicy",
"iam:DeleteRolePolicy"
],
"Resource": "arn:aws:iam::*:role/app-*",
"Condition": {
"StringEquals": {
"iam:PermissionsBoundary": "arn:aws:iam::*:policy/DeveloperBoundary"
}
}
},
{
"Sid": "AllowCreatePolicyScoped",
"Effect": "Allow",
"Action": [
"iam:CreatePolicy",
"iam:DeletePolicy",
"iam:CreatePolicyVersion",
"iam:DeletePolicyVersion"
],
"Resource": "arn:aws:iam::*:policy/app-*"
},
{
"Sid": "AllowViewIAM",
"Effect": "Allow",
"Action": [
"iam:Get*",
"iam:List*"
],
"Resource": "*"
}
]
}
ステップ 3:権限境界をアタッチする
# Create the boundary policy
aws iam create-policy \
--policy-name DeveloperBoundary \
--policy-document file://developer-boundary.json
# Attach boundary to an existing role
aws iam put-role-permissions-boundary \
--role-name developer-role \
--permissions-boundary arn:aws:iam::123456789012:policy/DeveloperBoundary
# Create a new role with boundary
aws iam create-role \
--role-name app-lambda-executor \
--assume-role-policy-document file://trust-policy.json \
--permissions-boundary arn:aws:iam::123456789012:policy/DeveloperBoundary
ステップ 4:特権昇格を防止する
開発者が次の操作を行えないよう、権限境界に拒否ステートメントを含める必要があります。
- 自分のロールから権限境界を削除する
- 権限境界ポリシー自体を変更する
- 権限境界をアタッチせずにロールを作成する
- 特権昇格につながる IAM サービスにアクセスする
ステップ 5:Terraform でデプロイする
resource "aws_iam_policy" "developer_boundary" {
name = "DeveloperBoundary"
path = "/"
policy = file("${path.module}/policies/developer-boundary.json")
}
resource "aws_iam_role" "app_role" {
name = "app-lambda-executor"
assume_role_policy = data.aws_iam_policy_document.lambda_trust.json
permissions_boundary = aws_iam_policy.developer_boundary.arn
}
検証チェックリスト
- 権限境界ポリシーを作成し、セキュリティチームがレビューした
- 自己変更を防止する拒否ステートメントが権限境界に含まれている
- 開発者への委任ポリシーで、新しいロールすべてに権限境界を必須としている
- ロールの命名規則(例:
app-*プレフィックス)を適用している - 開発者が権限境界あり/なしでロールを作成できるかテストした(権限境界なしでは失敗すること)
- 特権昇格の経路をテストし、遮断している
- IAM API 呼び出しに対する CloudTrail ロギングを有効にしている
- 権限境界ポリシーをソース管理でバージョン管理している
- 自動テストで権限境界の有効性を検証している
- 開発チームにドキュメントを提供している
参考資料
コメント
Markdown 対応