缩小 IAM 动作
由Unix哲学构建,这是一个小工具,有两个目标:
- 缩小 IAM 动作列表,通过创建只匹配指定动作且没有其它动作的图案.
- 做一号,不会让你的同事讨厌你.
不推荐使用动作通关卡, 有时有 IAM 限制 你走不动的 这个工具可以帮助你保持这些极限.
留在圣所的同时获得小的
IAM Actions以骆驼为例被分成多个单词. 例如:
s3:GetObject- "得到" "对象"s3:GetObjectTagging- "得到" "对象" "拖曳"
行政会议 收缩只会一次替换一个单词,永远不会替换部分单词. 举个例子 s3:GetObject 永远不会被缩小到类似的东西 s3:*et*。这是为了平衡缩小规模和可读性.
已存在的通配符
如果您的输入中已经包含通配符, 它们将被保存 。 例如:
cat "s3:Get*Tagging" | iam-shrink
# Output
s3:Get*Tagging
现有的通配符将在三个条件下被去除:
- 如果通配符与任何实际动作不相匹配,并且有效无所作为. 例如,如果输入
s3:Get*NonExistentAction,它将被移除. - 如果通配符是多余的,或者可以用更通俗的通配符来取而代之. 例如,如果输入
s3:GetObject*财务报告和审定财务报表s3:Get*,仅限s3:Get*将保留. - 如果收缩过程找到一个更小的通配符来取代现有的通配符. 例如,如果输入
s3:GetObject*,但在收缩过程中 iam-shrink 发现是有效的s3:Get*, (中文(简体) ),s3:GetObject*将被删除.
删除已存在的通配符
如果您想要从策略中删除所有已有通配符, 您可以使用 缩放 在使用 iam-shrink 之前.
curl "https://government-secrets.s3.amazonaws.com/secret-policy.json" | iam-expand | iam-shrink
在浏览器中使用
https://iam.cloudcopilot.io/tools/iam-shrink 页面存档备份,存于互联网档案馆
用于 CLI
安装
你可以在全球安装 这在默认的 AWS CloudShell 中也是有效的!
npm install -g @cloud-copilot/iam-shrink
根据您的配置, 可能需要在全球安装 sudo .
帮助
iam-shrink --help
缩小 IAM 动作
在参数中通过
在命令名称之后你不可能通过 CLI 一些动作,但你可以。 需要大量动作才能实用,所以大多用于自动化.
Usage: iam-shrink s3:GetBucketTagging s3:GetJobTagging s3:GetObjectTagging s3:GetObjectVersionTagging s3:GetStorageLensConfigurationTagging
# Output
s3:Get*Tagging
从 stdin 读取
如果不通过任何行动作为论据,CLI将从stdin读取.
cat "s3:GetBucketTagging s3:GetJobTagging s3:GetObjectTagging s3:GetObjectVersionTagging s3:GetStorageLensConfigurationTagging" | iam-shrink
# Output
s3:Get*Tagging
收缩 JSON 输入
如果输入是有效的json文档,则CLI将找到每个实例 Action 财务报告和审定财务报表 NotAction 这是一系列的字符串并缩小它们.
鉴于 policy.json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"groundstation:GetAgentConfiguration",
"groundstation:GetConfig",
"groundstation:GetDataflowEndpointGroup",
"groundstation:GetMinuteUsage",
"groundstation:GetMissionProfile",
"groundstation:GetSatellite",
"groundstation:ListConfigs",
"groundstation:ListContacts",
"groundstation:ListDataflowEndpointGroups",
"groundstation:ListEphemerides",
"groundstation:ListGroundStations",
"groundstation:ListMissionProfiles",
"groundstation:ListSatellites",
"groundstation:ListTagsForResource",
"s3:GetBucketTagging",
"s3:GetJobTagging",
"s3:GetObjectTagging",
"s3:GetObjectVersionTagging",
"s3:GetStorageLensConfigurationTagging"
],
"Resource": "*"
},
{
"Effect": "Deny",
"NotAction": [
"organizations:DeleteOrganization",
"organizations:DeleteOrganizationalUnit",
"organizations:DeletePolicy",
"organizations:DeleteResourcePolicy",
"organizations:LeaveOrganization"
],
"Resource": "*"
}
]
}
cat policy.json | iam-shrink > smaller-policy.json
将此文件输入 smaller-policy.json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["groundstation:List*", "groundstation:Get*", "s3:Get*Tagging"],
"Resource": "*"
},
{
"Effect": "Deny",
"NotAction": ["organizations:Delete*", "organizations:Leave*"],
"Resource": "*"
}
]
}
配置重现
默认情况下,CLI会进行两次迭接收缩. 这一般在缩小体积和保持可读性之间起到良好的平衡. 这一点可以随同 --iterations 旗帜.
假设 AWS 只读策略 进入 readonly.json
You can change this with the `--iterations` flag.
```bash
# Default two iterations
cat readonly.json | iam-shrink | wc -m
# 61305 characters
# Increasing iterations
cat readonly.json | iam-shrink --iterations 3 | wc -m
# 45983 characters
cat readonly.json | iam-shrink --iterations 4 | wc -m
# 43654 characters
cat readonly.json | iam-shrink --iterations 5 | wc -m
# 43336 characters
# Unlimited iterations until the policy cannot be further reduced
cat readonly.json | iam-shrink --iterations 0 | wc -m
# 43281 characters
如果你想尽可能缩小保险单,你可以使用 --iterations 0这将持续缩小政策,直到不能进一步削减.
指定访问级别
AWS已经 访问级别 被分配到IAM中的所有权限。 它们是:
ListReadWriteTaggingPermissions management
默认 iam- shrink 将会缩小所有动作, 不管它们的访问级别。 您可以使用 --levels 仅仅缩小这些行动的论据.
# Shrink all actions
cat big-policy.json | iam-shrink
# Shrink only Read, List, and Tagging actions. Write, and Permissions management actions will be included without any wildcards
cat big-policy.json | iam-shrink --levels read list tagging
其他 CLI 选项
--remove-sids: 删除全部Sid字段.--remove-whitespace: 从输出中删除所有空白.
在类型脚本/节点中使用
你可以使用自己代码中的收缩功能.
import { shrink } from '@cloud-copilot/iam-shrink'
const actions = [
's3:GetBucketTagging',
's3:GetJobTagging',
's3:GetObjectTagging',
's3:GetObjectVersionTagging',
's3:GetStorageLensConfigurationTagging'
]
const shrunk = await shrink(actions)
console.log(shrunk)
// [ s3:Get*Tagging ]
您也可以指定重复次数 .
import { shrink } from '@cloud-copilot/iam-shrink'
const bigListOfActions = getBigListOfActions()
const smallerList = await shrink(bigListOfActions, { iterations: 3 })
console.log(shrunk)