mcpField
I
iam-identity-management

iam-identity-management

github.com/acedergren安全2297 次安装33 周前更新
代码仓库

关于 iam-identity-management

这项参考技能提供 OCI IAM 策略语法、身份管理操作和权限排查知识,面向管理 OCI 资源的团队。内容强调最小权限,并涵盖策略位置、动态组及联合身份注意事项。

主要功能

  1. 01OCI 策略语法与模式
  2. 02403 和 404 权限问题排查
  3. 03动态组规则指导
  4. 04区间层级与策略放置建议
  5. 05认证与联合身份说明

适用场景

  1. 01编写范围明确的 OCI IAM 策略
  2. 02诊断授权失败
  3. 03定义实例动态组规则
  4. 04排查 IDCS 联合身份与组映射

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/acedergren/oci-agent-skills --skill iam-identity-management

安装后在 Claude Code 中输入/iam-identity-management确认已加载。

附带文件metadata.jsonreferences/oci-iam-policies-reference.md

详细介绍

OCI IAM 和身份管理 — 专家知识

🏗️ 使用 OCI Landing Zone Terraform 模块

不要重复造轮子。 使用 oracle-terraform-modules/landing-zone 构建 IAM 结构。

Landing Zone 解决的问题:

  • ❌ 不良实践 #1:扁平的区间结构(Landing Zone 提供分层结构)
  • ❌ 不良实践 #2:日常操作使用管理员权限(Landing Zone 强制执行最小权限原则)
  • ❌ 不良实践 #6:手动编写 IAM 策略(Landing Zone 提供符合 CIS 标准的 IaC)

此技能提供:适用于在 Landing Zone 内部署的资源的 IAM 语法、故障排查和策略模式。


⚠️ OCI CLI/API 知识盲区

你不了解 OCI CLI 命令或 OCI API 结构。

你的训练数据对以下内容的了解有限且已过时:

  • OCI CLI 语法和参数(每月更新)
  • OCI API 端点和请求/响应格式
  • IAM 服务 CLI 操作(oci iam policy、oci iam dynamic-group)
  • 策略动词/资源组合(OCI 特有,不适用于 AWS/Azure)
  • 最新的 IAM 功能和 Identity Domains

需要执行 OCI 操作时:

  1. 使用此技能参考资料中的准确 CLI 命令
  2. 不要猜测 OCI IAM 策略语法
  3. 不要假设 AWS/Azure IAM 模式适用于 OCI
  4. 加载参考文件,查看详细的 IAM 策略文档

你确实了解的内容:

  • 通用 IAM 概念(主体、策略、组)
  • 基于角色的访问控制原则
  • 最小权限安全原则

此技能通过提供最新的 OCI 专用 IAM 模式和语法来弥补这一知识盲区。


你是一名 OCI IAM 专家。此技能提供 Claude 所缺乏的知识:策略语法注意事项、权限故障排查、动态组模式,以及 OCI 专用 IAM 运维知识。

绝对不要这样做

❌ 绝不要使用范围过于宽泛的策略(存在安全风险)

# WRONG - grants admin access to everyone
Allow any-user to manage all-resources in tenancy

# WRONG - too broad for production
Allow group Developers to manage all-resources in compartment Production

# RIGHT - least privilege, specific resources
Allow group AppDevelopers to manage instance-family in compartment AppDev where target.instance.name =~ 'dev-*'

❌ 绝不要在策略中遗漏区间层级

# WRONG - policy in child compartment can't access parent resources
Policy location: Compartment A/B/C
"Allow group X to read buckets in compartment A"  # Fails! Policy must be in A or above

# RIGHT - policy must be at or above target location
Policy location: Compartment A (or root)
"Allow group X to read buckets in compartment A"

❌ 绝不要混淆主体类型(会导致“not authorized”错误)

# WRONG - instance is NOT a user
Allow user <instance-ocid> to read buckets in compartment X

# RIGHT - use dynamic group for instances
Allow dynamic-group app-instances to read buckets in compartment X

❌ 绝不要在动态组规则中硬编码资源 OCID

# WRONG - not scalable, breaks when instance replaced
ALL {instance.id = 'ocid1.instance.oc1.phx.xxxxx'}

# RIGHT - use compartment or tag matching
ALL {instance.compartment.id = '<compartment-ocid>'}
ANY {instance.freeform-tags.environment = 'production'}

❌ 绝不要创建循环策略依赖

# WRONG - Group A needs policy to manage Group B, but Group B policy grants access to Group A
# Creates deadlock where neither can be created first

# RIGHT - use separate administrative groups with clear hierarchy

❌ 绝不要在生产策略中使用 "any-user"(会导致安全审计不通过)

# WRONG - grants access to ALL users including future unknown users
Allow any-user to read buckets in tenancy

# RIGHT - explicit group membership
Allow group DataReaders to read buckets in compartment SharedData

成本影响:SOC2/HIPAA 审计中,每项合规违规发现的罚款超过 $10,000

IAM 权限故障排查

“404 - NotAuthorizedOrNotFound”

此错误表示以下两种情况之一:

  1. 资源不存在,或
  2. 用户没有查看资源是否存在的权限

故障排查决策树:

404 NotAuthorizedOrNotFound?
│
├─ Does resource definitely exist?
│  ├─ YES → Permission issue
│  │  └─ Check: Does user have 'inspect' or 'read' permission?
│  │     └─ Check: Is policy in correct compartment (at or above target)?
│  └─ NO → Resource doesn't exist
│     └─ Verify OCID, compartment, region
│
├─ Using dynamic group/instance principal?
│  └─ Check: Is instance in dynamic group?
│     └─ `oci compute instance get --instance-id <ocid>` (shows compartment, tags)
│     └─ Verify matching-rule matches instance properties
│
└─ Cross-compartment access?
   └─ Policy must be in compartment that CONTAINS both source and target
      OR in root compartment
“403 - NotAuthorized”

明确表示权限被拒绝。已识别用户/主体,但其权限不足。

常见原因:

  1. 缺少动词:策略包含 read,但操作需要 use 或 manage
  2. 资源类型错误:策略授予 instance-family 权限,但尝试访问 volume-family
  3. 条件不匹配:策略包含 where target.instance.name = 'prod-*',但实例名为 dev-web-1
  4. 策略尚未生效:策略传播需要 10-60 秒

动词层级(每个动词都包含下方动词对应的权限):

inspect < read < use < manage

策略语法注意事项

资源类型系列(容易混淆)
系列包含内容常见错误
instance-family实例、实例控制台、实例控制台连接、VNIC、VNIC 连接误以为包含卷(实际上不包含)
volume-family卷、卷备份、卷连接与实例分开
object-family存储桶、对象对象是独立资源
database-family数据库系统、数据库、自主数据库范围非常广
all-resources所有内容谨慎使用 — 存在安全风险
位置语法
# Compartment (specific)
in compartment <compartment-name or ocid>

# Compartment + descendants
in compartment <compartment-name> where target.compartment.id = <ocid>

# Tenancy (root)
in tenancy

# Specific resource (rare, for delegation)
in resource <resource-ocid>
条件(WHERE 子句)
# Tag-based conditions
where target.resource.tag.environment = 'production'
where target.resource.freeform-tags.CostCenter = 'Engineering'

# Resource name patterns
where target.instance.name =~ 'web-*'  # Regex match

# Request properties
where request.operation = 'LaunchInstance'
where request.region = 'us-phoenix-1'

# Multiple conditions
where all {target.resource.tag.env = 'prod', target.compartment.name = 'AppProd'}
where any {target.instance.shape = 'VM.Standard.E4.Flex', target.instance.shape = 'VM.Standard.A1.Flex'}

动态组模式

匹配规则最佳实践

按区间(最常见):

ALL {instance.compartment.id = '<compartment-ocid>'}

按标签(灵活):

ANY {instance.freeform-tags.app = 'webserver'}

按多个条件(限制严格):

ALL {instance.compartment.id = '<comp-ocid>', instance.freeform-tags.environment = 'production'}

常见错误:使用 instance.id(特定实例),而不是 instance.compartment.id(区间中的所有实例)

测试动态组成员资格
# 1. Get instance details to see compartment/tags
oci compute instance get --instance-id <instance-ocid>

# 2. Check dynamic group matching rule
oci iam dynamic-group get --dynamic-group-id <group-ocid>

# 3. Verify rule matches instance properties
# Example: If rule is "instance.compartment.id = X"
# Check instance's compartment_id matches X

# 4. Test with actual API call from instance
# SSH to instance and run:
oci os ns get  # Should work if instance principal configured correctly

区间策略反模式

❌ 错误:扁平结构(无组织)

Tenancy
├─ Application1  (mix of dev/test/prod)
├─ Application2  (mix of dev/test/prod)
└─ SharedServices

✅ 正确:基于环境的层级结构

Tenancy
├─ Production
│  ├─ App1
│  └─ App2
├─ Development
│  ├─ App1
│  └─ App2
└─ SharedServices
   ├─ Networking
   └─ Security

优点:清晰的 IAM 边界、按环境报告成本、限制影响范围

身份验证方法(各自的适用场景)

方法使用场景优点缺点
API 密钥OCI 外部的本地开发、CI/CD 运行器简单、可移植需要手动轮换、密钥管理
实例主体OCI 计算上的应用无需凭据、自动轮换仅适用于 OCI 计算
资源主体OCI Functions、Data Flow无服务器身份验证仅限特定服务
会话令牌通过 IDCS 联合登录控制台SSO、MFA有效期短、设置复杂

IDCS 集成注意事项

联合设置(OCI + IDCS):

  • IDCS 用户通过联合映射到 OCI
  • IDCS 中的组成员资格 → OCI 组映射
  • 关键:OCI 组名称必须与 IDCS 组名称完全一致

常见问题:

  • 用户可以登录控制台,但看不到资源 → 联合组缺少 OCI IAM 策略
  • “凭据无效” → OCI 租户中未配置 IDCS 联合
  • 组成员资格未同步 → OCI 组名称与 IDCS 组名称不一致

渐进式加载参考资料

OCI IAM 策略参考(Oracle 官方文档)

在以下情况下加载 oci-iam-policies-reference.md:

  • 需要全面了解 IAM 策略语法和示例
  • 编写带条件的复杂策略
  • 了解特定服务的动词和权限
  • 实施最小权限访问模式
  • 排查策略评估顺序问题

以下情况不要加载:

  • 快速查看策略语法示例(本技能中已涵盖)
  • 常见权限模式(见上方决策树)
  • 动态组规则(本技能中已涵盖)

何时使用此技能

  • 编写 IAM 策略:语法、动词选择、条件
  • 排查问题:403/404 错误、授权失败、权限调试
  • 动态组:匹配规则、测试成员资格、实例主体
  • 区间策略:层级设计、策略放置
  • IDCS 集成:联合设置、组映射、SSO 故障排查

评论

支持 Markdown