ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

如何用 Privileged Access Manager 创建 entitlement 并申请临时特权访问

如何用 Privileged Access Manager 创建 entitlement 并申请临时特权访问 如何用 Privileged Access Manager 创建 entitlement 并申请临时特权访问【免费下载链接】skillsAgent Skills for Google products and technologies项目地址: https://gitcode.com/GitHub_Trending/skills29/skills当需要给某些人临时开通 Google Cloud 特权例如临时执行compute.instances.start这类操作时直接追加永久 IAM 角色绑定会带来长期权限残留。Google Cloud 的 Privileged Access ManagerPAM用按需、限时、可审计的访问提升来替代这种做法管理员先创建entitlement定义访问范围、可申请人和审批人申请人再基于 entitlement 提交grant请求审批通过后角色在请求时长内生效到期自动收回。本文基于 iam-helper-for-privileged-access-management skill 中的文档走通「管理员创建 entitlement → 申请人发起临时访问请求 → 查看状态确认生效」这条路径全程使用gcloudCLI。准备条件两类角色的权限要求这条路径涉及两个角色权限要求不同。创建 entitlement 的管理员需要roles/privilegedaccessmanager.admin创建、更新、删除 entitlement 配置目标层级范围上的 IAM 管理权限因为创建 entitlement 会在该范围上授权未来的角色评估与绑定组织范围roles/iam.securityAdminFolder 范围roles/resourcemanager.folderAdmin项目范围roles/resourcemanager.projectIamAdminroles/privilegedaccessmanager.viewer用于跨范围列出和查看 entitlement。申请临时访问的申请人不需要显式 IAM 角色——只需要被加入目标 entitlement 的eligibleUsers列表。申请人可以直接用gcloud pam entitlements search --caller-access-typegrant-requester发现自己有资格申请的 entitlement无需roles/privilegedaccessmanager.viewer但如果要用list/describe跨范围搜索全部 entitlement或检查角色定义gcloud iam roles describe则需要roles/privilegedaccessmanager.viewer和roles/iam.roleViewer。另外注意一条贯穿所有命令的规则scope 标志--projectPROJECT_ID、--folderFOLDER_ID、--organizationORGANIZATION_ID必须与 entitlement 实际定义所在的范围一致。创建 entitlement先确认目标 ID 不存在entitlement ID 约定为小写加连字符、由角色名派生例如roles/compute.admin对应compute-admin。创建前先检查ENTITLEMENT_ID下文以compute-admin为例是否已存在gcloud pam entitlements describe compute-admin \ --locationglobal \ --projectPROJECT_ID如果返回已存在的 entitlement停止创建流程改为查看详情或更新它只有返回 NOT_FOUND 才继续。编写 entitlement.yaml以 skill 内置的模板 entitlement_template.yaml 为基础生成配置文件模板原文如下privilegedAccess: gcpIamAccess: resourceType: cloudresourcemanager.googleapis.com/Project resource: //cloudresourcemanager.googleapis.com/projects/PROJECT_ID # Examples for other resources: # resourceType: cloudresourcemanager.googleapis.com/Folder # resource: //cloudresourcemanager.googleapis.com/folders/FOLDER_ID # resourceType: cloudresourcemanager.googleapis.com/Organization # resource: //cloudresourcemanager.googleapis.com/organizations/ORG_ID roleBindings: - role: ROLE_NAME # conditionExpression: request.time timestamp(2027-01-01T00:00:00Z) maxRequestDuration: 14400s requesterJustificationConfig: unstructured: {} eligibleUsers: - principals: - user:userexample.com # Optional: Manual Approval Workflow Configuration # approvalWorkflow: # manualApprovals: # requireApproverJustification: true # steps: # - approvalsNeeded: 1 # approverEmailRecipients: # - approverexample.com # approvers: # - principals: # - user:approverexample.com需要替换和决策的位置PROJECT_ID/ROLE_NAME/userexample.com替换为实际的目标项目 ID、要授予的 IAM 角色、申请人的真实邮箱eligibleUsers下可以有多个 principal。resourceType与resource模板默认是 Project 资源注释里给出了 Folder 和 Organization 的写法按目标资源类型替换。roleBindings可以指定多个 IAM 角色每个绑定还可附带可选的 IAMconditionExpression。遗留基础角色roles/viewer、roles/editor、roles/owner不被支持必须改用 v2 基础角色roles/basic.viewer、roles/basic.editor、roles/basic.owner或使用其他有效的前置定义/自定义/v2 基础角色。maxRequestDuration申请人单次可申请的最长时长必须写成秒数字符串。未指定时默认14400s4 小时也可按需配置如3600s1 小时、28800s8 小时。requesterJustificationConfig: {unstructured: {}}保留不要删。approvalWorkflow可选如果策略要求人工审批取消注释并填入审批人。审批人可以是user:db-leadmy-company.com这样的用户或group:sre-leadsmy-company.com这样的组requireApproverJustification: true表示要求审批人填写理由。配置了该块的 entitlementgrant 请求会进入APPROVAL_AWAITED状态等待审批人处理见后文可选分支。执行创建gcloud pam entitlements create compute-admin \ --locationglobal \ --entitlement-fileentitlement.yaml \ --projectPROJECT_ID如果 entitlement 定义在 Folder 或组织上把--projectPROJECT_ID换成--folderFOLDER_ID或--organizationORGANIZATION_ID。验证创建结果用只读命令确认 entitlement 已可查询gcloud pam entitlements list \ --locationglobal \ --projectPROJECT_ID gcloud pam entitlements describe compute-admin \ --locationglobal \ --projectPROJECT_IDlist能看到该范围内的全部 entitlementdescribe返回目标 entitlement 的配置详情。申请人发起临时访问请求Grant申请人侧的操作顺序是准备输入 → 沿资源层级搜索可用 entitlement → 提交 grant → 根据状态判断结果。第一步收集并校验四个输入Principal 邮箱申请访问的身份例如user:userexample.com权限名需要的 IAM 权限例如compute.instances.start请求时长未指定时默认3600s60 分钟目标资源接受短名如my-project内部格式化为完整 URI如//cloudresourcemanager.googleapis.com/projects/my-project。第二步沿层级搜索有资格的 entitlement这里有一个容易踩的坑单条gcloud pam entitlements search只查询指定的精确范围不会自动遍历父 Folder 和组织。而授予某个项目访问权的 entitlement 完全可能定义在祖先 Folder 或组织层级上所以要用 skill 自带的层级搜索脚本 search_eligible_entitlements.shbash skills/cloud/iam-helper-for-privileged-access-management/scripts/search_eligible_entitlements.sh --projectPROJECT_ID也可以传--folderFOLDER_ID或--organizationORGANIZATION_ID。脚本只执行gcloud pam entitlements search等只读查询从指定范围逐级向上搜索祖先 Folder 和组织。如果没有本地脚本文档给出的等价直接命令是projectPROJECT_ID echo Searching Project Scope gcloud pam entitlements search --caller-access-typegrant-requester \ --locationglobal --project$project --formatjson echo Searching Ancestor Folders Organization while read -r id type; do if [[ $type folder ]]; then gcloud pam entitlements search --caller-access-typegrant-requester \ --locationglobal --folder$id --formatjson elif [[ $type organization ]]; then gcloud pam entitlements search --caller-access-typegrant-requester \ --locationglobal --organization$id --formatjson fi done (gcloud projects get-ancestors $project --formatvalue(id,type) 2/dev/null || true)project变量替换为目标项目 ID。拿到结果后从各 entitlement 的roleBindings中确认哪一个授予了所需的权限或角色找到匹配记下ENTITLEMENT_ID以及它被发现的范围层级。如果多个层级都有合格 entitlement优先选范围最窄的Project 优于 FolderFolder 优于 Organization。没有匹配终止流程说明当前请求不存在可用的 entitlement——需要先请管理员创建。第三步提交 grant 请求# Example using an organization-level entitlement for a project resource: gcloud pam grants create \ --entitlementENTITLEMENT_ID \ --locationglobal \ --requested-durationDURATION \ --justificationAutomated temporary access request \ --organizationORGANIZATION_ID \ --requested-resourcesprojects/PROJECT_ID各参数说明--entitlementENTITLEMENT_ID第二步找到的 entitlement--requested-duration必须精确对应用户要的时长例如要求 2 小时就传--requested-duration7200s未指定时传默认3600sscope 标志--project/--folder/--organization必须与 entitlement 定义所在范围一致上例文档用的是「组织级 entitlement 访问某个项目资源」的场景--requested-resources实际需要访问的目标资源格式为projects/PROJECT_ID、folders/FOLDER_ID或organizations/ORGANIZATION_ID。第四步按状态判断结果请求返回的 grant 状态决定下一步APPROVAL_AWAITED请求已提交记下GRANT_ID访问在审批通过后才激活。到此为止等待审批人处理见下文可选分支SCHEDULED或ACTIVATINGgrant 已批准但开通仍在进行。等约 30 秒后重试检查状态 2–3 次ACTIVE访问已激活确认后即可开始操作。注意任务完成后不要主动撤销 grant让它到期自动结束即可。文档也说明了边界存在ACTIVE或SCHEDULEDgrant 时对应的 entitlement 无法删除因此临时访问的生命周期以自动过期收尾。可选分支审批人处理待批准请求只有当 entitlement 配置了approvalWorkflow时才会走到这一步。审批人同样不需要显式 IAM 角色只需被加入该 entitlementapprovalWorkflow的approvers列表。审批人可以直接搜索自己有权审批的 pending grantgcloud pam grants search \ --caller-relationshipcan-approve \ --locationglobal \ --projectPROJECT_ID或按目标层级传--folderFOLDER_ID、--organizationORGANIZATION_ID。如果已知 entitlement ID也可以直接列出它的全部 grantgcloud pam grants list \ --entitlementENTITLEMENT_ID \ --locationglobal \ --projectPROJECT_ID批准一个 grant 前先用gcloud pam grants describe或search确认 grant 存在及其状态并准备一句审批理由然后执行gcloud pam grants approve GRANT_ID \ --entitlementENTITLEMENT_ID \ --locationglobal \ --projectPROJECT_ID \ --reasonUSER_PROVIDED_REASON拒绝请求时把approve换成deny同样需要--reason。审批完成后申请人侧的 grant 状态会按前面第四步的逻辑变为ACTIVE可能先经过SCHEDULED/ACTIVATING。相关文档SKILL.mdPAM entitlement CRUD、审批流与安全确认策略的完整说明含 entitlement 更新export导出当前配置、勿改etag后update和删除先检查并撤销 open grant流程requester.md申请人工作流原文approver.md审批人工作流原文list_entitlements_hierarchy.sh管理员沿整个资源层级列出已定义 entitlement 的脚本。【免费下载链接】skillsAgent Skills for Google products and technologies项目地址: https://gitcode.com/GitHub_Trending/skills29/skills创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表