确定 AWS CDK 所需的权限
determine required permissions for AWS CDK
我正在使用 AWS CDK,每次创建新资源(CodePipeline、VPC 等)时,我都会陷入相同的循环...
- 尝试部署
- "you are not authorized to foo:CreateBar"
- 更新 IAM 权限
- 尝试部署
- "you are not authorized to baz:CreateZzz"
- 更新 IAM 权限
...一遍又一遍。然后当我 cdk destroy
时相同,但对于 "foo:DeleteFoo"
是否有更有效的方法来确定策略执行特定 CDK 操作所需的权限?也许我可以参考文档中的某处?
谢谢
这是一个脚本,它会执行您传递给它的任何内容,但也会捕获您传递给它的内容与它完成执行之间的时间戳,并将打印所有由配置的默认值捕获的 AWS API 事件使用 cloudtrail 的 aws 用户。操作可能需要 20 分钟才能显示在 cloudtrail 中,但脚本会每分钟检查一次,直到获得该时间范围内的结果。如果在时间范围内没有调用 AWS api,则不会返回任何结果。这是一个简单的脚本,没有最大超时或任何东西。
#!/bin/bash -x
user_name=`aws sts get-caller-identity | jq -r '.Arn' | sed -e 's/user\// /g' | awk '{print }'`
sleep 5 # Sleep to avoid getting the sts call in our time range
start_time=`date`
sleep 1 # Sleep to avoid millisecond rounding issues
eval $@
sleep 1 # Sleep to avoid millisecond rounding issues
end_time=`date`
actions=""
while [ -z "$actions" ]; do
sleep 60
echo "Checking for events from $start_time to $end_time..."
actions=`aws cloudtrail lookup-events --lookup-attributes AttributeKey=Username,AttributeValue=${user_name} --start-time "${start_time}" --end-time "${end_time}" | jq -r '.Events[].CloudTrailEvent' | jq -s | jq -r '.[] | "\(.eventSource) \(.eventName)"' | sed -e 's/.amazonaws.com /:/g' | sed -e 's/[0-9]//g' | sort | uniq`
done
echo "AWS Actions Used:"
echo "$actions"
我称之为 get-aws-actions.sh,它需要安装 aws cli 以及 jq。对于 cdk,我会像这样使用它
./get-aws-actions.sh "cdk deploy && cdk destroy"
我会将我的管理员级别凭据配置为默认配置文件,这样我就知道部署不会因为权限问题而失败,然后我使用此脚本返回的结果为更具体的部署授予权限user/role 长期使用。您可以 运行 遇到的问题是第一次您可能只看到一堆 :Create* 或 :Add* 操作,但实际上您需要为您看到的操作添加所有生命周期操作。因此,如果您看到 dynamodb:CreateTable,则需要确保还添加了 UpdateTable 和 DeleteTable。如果你看到 s3:PutBucketPolicy 你也会想要 s3:DeleteBucketPolicy.
老实说,任何不处理允许访问数据的 API 调用的服务,我都会执行 :*。一个例子可能是 ECS。我无法使用 ECS API 调用来调用 API 对 CloudFormation 管理服务不需要执行的容器执行任何操作。因此,对于该服务,如果我知道我在做容器,我只会将 ecs:* on * 授予我的部署者角色。像 s3、lambda、sqs、sns 这样的服务,可以通过 API 进行数据访问和资源创建访问,我需要更加谨慎地授予权限。我的部署者角色不应有权读取所有存储桶中的所有数据或执行函数,但它确实需要创建存储桶和函数。
我正在使用 AWS CDK,每次创建新资源(CodePipeline、VPC 等)时,我都会陷入相同的循环...
- 尝试部署
- "you are not authorized to foo:CreateBar"
- 更新 IAM 权限
- 尝试部署
- "you are not authorized to baz:CreateZzz"
- 更新 IAM 权限
...一遍又一遍。然后当我 cdk destroy
时相同,但对于 "foo:DeleteFoo"
是否有更有效的方法来确定策略执行特定 CDK 操作所需的权限?也许我可以参考文档中的某处?
谢谢
这是一个脚本,它会执行您传递给它的任何内容,但也会捕获您传递给它的内容与它完成执行之间的时间戳,并将打印所有由配置的默认值捕获的 AWS API 事件使用 cloudtrail 的 aws 用户。操作可能需要 20 分钟才能显示在 cloudtrail 中,但脚本会每分钟检查一次,直到获得该时间范围内的结果。如果在时间范围内没有调用 AWS api,则不会返回任何结果。这是一个简单的脚本,没有最大超时或任何东西。
#!/bin/bash -x
user_name=`aws sts get-caller-identity | jq -r '.Arn' | sed -e 's/user\// /g' | awk '{print }'`
sleep 5 # Sleep to avoid getting the sts call in our time range
start_time=`date`
sleep 1 # Sleep to avoid millisecond rounding issues
eval $@
sleep 1 # Sleep to avoid millisecond rounding issues
end_time=`date`
actions=""
while [ -z "$actions" ]; do
sleep 60
echo "Checking for events from $start_time to $end_time..."
actions=`aws cloudtrail lookup-events --lookup-attributes AttributeKey=Username,AttributeValue=${user_name} --start-time "${start_time}" --end-time "${end_time}" | jq -r '.Events[].CloudTrailEvent' | jq -s | jq -r '.[] | "\(.eventSource) \(.eventName)"' | sed -e 's/.amazonaws.com /:/g' | sed -e 's/[0-9]//g' | sort | uniq`
done
echo "AWS Actions Used:"
echo "$actions"
我称之为 get-aws-actions.sh,它需要安装 aws cli 以及 jq。对于 cdk,我会像这样使用它
./get-aws-actions.sh "cdk deploy && cdk destroy"
我会将我的管理员级别凭据配置为默认配置文件,这样我就知道部署不会因为权限问题而失败,然后我使用此脚本返回的结果为更具体的部署授予权限user/role 长期使用。您可以 运行 遇到的问题是第一次您可能只看到一堆 :Create* 或 :Add* 操作,但实际上您需要为您看到的操作添加所有生命周期操作。因此,如果您看到 dynamodb:CreateTable,则需要确保还添加了 UpdateTable 和 DeleteTable。如果你看到 s3:PutBucketPolicy 你也会想要 s3:DeleteBucketPolicy.
老实说,任何不处理允许访问数据的 API 调用的服务,我都会执行