我正在使用AWS CDK,每次去创建新资源(CodePipeline,VPC等)时,我都会遇到相同的...
...一遍又一遍。然后当我cdk destroy
时也是一样,但对于“ foo:DeleteFoo”
是否有更有效的方法来确定策略执行特定CDK操作所需的权限?也许我可以参考文档中的某处?
谢谢
答案 0 :(得分:2)
这是一个脚本,它将执行您传递给它的所有内容,但还将捕获传递给它的消息与完成执行之间的时间戳,并将使用cloudtrail打印配置的默认aws用户捕获的所有AWS API事件。动作可能需要20分钟才能显示在cloudtrail中,但是脚本将每分钟检查一次,直到获得该时间范围的结果为止。如果在此时间段内未进行任何AWS api调用,则将不会返回任何结果。这是一个简单的脚本,没有最大超时时间。
#!/bin/bash -x
user_name=`aws sts get-caller-identity | jq -r '.Arn' | sed -e 's/user\// /g' | awk '{print $2}'`
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"
我会将管理员级别的凭据配置为默认配置文件,所以我知道部署不会因为权限问题而失败,然后我使用此脚本返回的结果将权限长期授予更特定的部署用户/角色长期使用。您可能遇到的问题是,您第一次只能看到一堆:Create *或:Add *操作,但实际上您需要为看到的操作添加所有生命周期操作。因此,如果看到dynamodb:CreateTable,则需要确保同时添加UpdateTable和DeleteTable。如果看到s3:PutBucketPolicy,则还需要s3:DeleteBucketPolicy。
说实话,任何不处理允许访问数据的API调用的服务,我都会做