确定AWS CDK的必需权限

时间:2020-03-28 06:58:55

标签: amazon-cloudformation aws-cdk

我正在使用AWS CDK,每次去创建新资源(CodePipeline,VPC等)时,我都会遇到相同的...

  • 尝试部署
  • “您无权使用foo:CreateBar”
  • 更新IAM权限
  • 尝试部署
  • “您无权使用baz:CreateZzz”
  • 更新IAM权限

...一遍又一遍。然后当我cdk destroy时也是一样,但对于“ foo:DeleteFoo”

是否有更有效的方法来确定策略执行特定CDK操作所需的权限?也许我可以参考文档中的某处?

谢谢

1 个答案:

答案 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调用的服务,我都会做:*。例如ECS。我无法使用ECS API调用来调用API对CloudFormation不需要进行管理服务的容器执行任何操作。因此,对于该服务,如果我知道自己在做容器,则只需将ecs:*授予*部署者角色即可。像s3,lambda,sqs,sns之类的服务,其中通过API进行数据访问和资源创建访问,我需要更加仔细地考虑授予的权限。我的部署者角色无权读取所有存储桶中的所有数据或执行功能,但确实需要创建存储桶和功能。