AWS Cloudformation - CodeCommit - 拒绝推送到主机
AWS Cloudformation - CodeCommit - Deny Push to Master
情况是这样的:
我有一个 Cloudformation,它创建 CodeCommit 存储库,其中包含一些额外的资源供其他 devops 进程运行。
我得到了阻止用户推送到特定分支的要求,在这种情况下,master,我找到了这样做的策略。来源:https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-conditional-branch.html
所以我写了一个角色和策略如下:
Resources:
CodeCommitRepository:
Type: AWS::CodeCommit::Repository
Properties:
RepositoryName: !Sub '${ProjectCode}-${ProjectName}-${ComponentName}'
RepositoryDescription: !Ref CodeCommitRepositoryDescription
Tags:
- Key: fdr:general:project-code
Value: !Ref ProjectCode
- Key: fdr:general:project-name
Value: !Ref ProjectName
DenyPushRole:
Type: AWS::IAM::Role
Properties:
RoleName: !Sub '${ProjectCode}-${ProjectName}-${ComponentName}-DenyPush-Role'
ManagedPolicyArns:
- !Ref DenyPushToMasterPolicy
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Action:
- sts:AssumeRole
Effect: Allow
Principal:
Service:
- codecommit.amazonaws.com
DenyPushToMasterPolicy:
Type: AWS::IAM::ManagedPolicy
Properties:
ManagedPolicyName: !Sub '${ProjectCode}-${ProjectName}-${ComponentName}-DenyPush-Policy'
Description: Policy to deny push to master
PolicyDocument:
Version: 2012-10-17
Statement:
- Action:
- codecommit:GitPush
- codecommit:PutFile
- codecommit:DeleteBranch
- codecommit:MergePullRequestByFastForward
Effect: Deny
Resource: !GetAtt CodeCommitRepository.Arn
Condition:
StringEqualsIfExists:
codecommit:References:
- refs/heads/master
'Null':
codecommit:References: 'false'
据我所知,我不会说太多,通过使用策略和 sts:AssumeRole 创建角色,我认为使用该存储库的任何用户都将担任该角色,拒绝他们推送的能力掌握但事实并非如此。
我想我们可能把事情搞得太复杂了,我们应该直接在 IAM 上为所有用户制定该政策,但我们的想法是让它做得非常精细。我做错了什么或者有可能吗?
此致
DenyPushRole
不适用于任何用户。您将其指定为仅适用于 codecommit.amazonaws.com
,这是 不正确的 。
用户不会自动承担任何角色。他们必须 明确地 假定你的 DenyPushRole
使用 AssumeRole API 调用。您的用户还必须具有 sts:AssumeRole
.
的权限
因此,一般来说,您的角色应该是:
DenyPushRole:
Type: AWS::IAM::Role
Properties:
RoleName: !Sub '${ProjectCode}-${ProjectName}-${ComponentName}-DenyPush-Role'
ManagedPolicyArns:
- !Ref DenyPushToMasterPolicy
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Action:
- sts:AssumeRole
Effect: Allow
Principal:
AWS:
- !Ref AWS::AccountId
一旦角色存在,并且用户有 sts:AssumeRole
担任角色,他们将使用 AssumeRole
命令实际担任角色。这将提供新的临时 AWS 凭证以执行该角色指定的任何操作。在你的情况下,该角色只会拒绝,因此他们无论如何都无法做任何事情。您需要向角色添加一些 allow
语句,以便您的用途真正能够做一些事情,而不仅仅是 deny
.
情况是这样的: 我有一个 Cloudformation,它创建 CodeCommit 存储库,其中包含一些额外的资源供其他 devops 进程运行。
我得到了阻止用户推送到特定分支的要求,在这种情况下,master,我找到了这样做的策略。来源:https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-conditional-branch.html
所以我写了一个角色和策略如下:
Resources:
CodeCommitRepository:
Type: AWS::CodeCommit::Repository
Properties:
RepositoryName: !Sub '${ProjectCode}-${ProjectName}-${ComponentName}'
RepositoryDescription: !Ref CodeCommitRepositoryDescription
Tags:
- Key: fdr:general:project-code
Value: !Ref ProjectCode
- Key: fdr:general:project-name
Value: !Ref ProjectName
DenyPushRole:
Type: AWS::IAM::Role
Properties:
RoleName: !Sub '${ProjectCode}-${ProjectName}-${ComponentName}-DenyPush-Role'
ManagedPolicyArns:
- !Ref DenyPushToMasterPolicy
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Action:
- sts:AssumeRole
Effect: Allow
Principal:
Service:
- codecommit.amazonaws.com
DenyPushToMasterPolicy:
Type: AWS::IAM::ManagedPolicy
Properties:
ManagedPolicyName: !Sub '${ProjectCode}-${ProjectName}-${ComponentName}-DenyPush-Policy'
Description: Policy to deny push to master
PolicyDocument:
Version: 2012-10-17
Statement:
- Action:
- codecommit:GitPush
- codecommit:PutFile
- codecommit:DeleteBranch
- codecommit:MergePullRequestByFastForward
Effect: Deny
Resource: !GetAtt CodeCommitRepository.Arn
Condition:
StringEqualsIfExists:
codecommit:References:
- refs/heads/master
'Null':
codecommit:References: 'false'
据我所知,我不会说太多,通过使用策略和 sts:AssumeRole 创建角色,我认为使用该存储库的任何用户都将担任该角色,拒绝他们推送的能力掌握但事实并非如此。
我想我们可能把事情搞得太复杂了,我们应该直接在 IAM 上为所有用户制定该政策,但我们的想法是让它做得非常精细。我做错了什么或者有可能吗?
此致
DenyPushRole
不适用于任何用户。您将其指定为仅适用于 codecommit.amazonaws.com
,这是 不正确的 。
用户不会自动承担任何角色。他们必须 明确地 假定你的 DenyPushRole
使用 AssumeRole API 调用。您的用户还必须具有 sts:AssumeRole
.
因此,一般来说,您的角色应该是:
DenyPushRole:
Type: AWS::IAM::Role
Properties:
RoleName: !Sub '${ProjectCode}-${ProjectName}-${ComponentName}-DenyPush-Role'
ManagedPolicyArns:
- !Ref DenyPushToMasterPolicy
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Action:
- sts:AssumeRole
Effect: Allow
Principal:
AWS:
- !Ref AWS::AccountId
一旦角色存在,并且用户有 sts:AssumeRole
担任角色,他们将使用 AssumeRole
命令实际担任角色。这将提供新的临时 AWS 凭证以执行该角色指定的任何操作。在你的情况下,该角色只会拒绝,因此他们无论如何都无法做任何事情。您需要向角色添加一些 allow
语句,以便您的用途真正能够做一些事情,而不仅仅是 deny
.