gpt4 book ai didi

amazon-web-services - AWS Cloudformation - CodeCommit - 拒绝推送到 Master

转载 作者:行者123 更新时间:2023-12-03 07:22:41 25 4
gpt4 key购买 nike

所以情况是这样的:我有一个 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 创建角色,我认为任何使用该存储库的用户都会假设该角色拒绝他们推送到 master 的能力,但是事实并非如此。

我想我们可能会让事情变得过于复杂,我们应该将该策略直接应用于 IAM 上的所有用户,但我们的想法是让它做得非常精细。我做错了什么或者有可能吗?

致以诚挚的问候

最佳答案

DenyPushRole 不适用于任何用户。您将其指定为仅适用于 codecommit.amazonaws.com,这是不正确

用户不会自动承担任何角色。他们必须使用AssumeRole明确承担您的DenyPushRole 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

关于amazon-web-services - AWS Cloudformation - CodeCommit - 拒绝推送到 Master,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71594662/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com