我有一個角色,我想根據部署到的階段授予 AssumeRole 權限。這 90% 有效,但我正在嘗試對一個部分進行通配符,但它并沒有按照我的需要作業。
在我的映射中,我有這樣的東西:
Mappings:
TestRoleMapping:
us-east-1:
beta: ['arn:aws:iam::11111111111:role/somePrefix-blah-TestInvocationRole', 'arn:aws:iam::2222222222:role/TestInvocationRole']
prod: ..... etc
然后我在這里使用映射:
Resources:
SomeReadRole:
Type: AWS::IAM::Role
Properties:
RoleName: { Fn::Sub: "${ApplicationName}-read-role" }
AssumeRolePolicyDocument:
Statement:
- Action: [ 'sts:AssumeRole' ]
Effect: Allow
Principal:
AWS: !FindInMap
- TestRoleMapping
- !Ref 'AWS::Region'
- !Ref Stage
Version: '2012-10-17'
Policies:
- PolicyDocument:
Statement:
- Action: [ 's3:Get*' ]
Effect: Allow
Resource: '*'
Version: '2012-10-17'
PolicyName: "lambdaPolicy"
當我部署它時,它作業正常,因為我使用了所有硬編碼的角色。但是,我想允許帳戶11111111111中的任何角色擁有權限,或者(甚至更好)任何以“TestInvocationRole”結尾的角色。我嘗試用'arn:aws:iam::11111111111:role/*-TestInvocationRole'or替換映射中的字串,'arn:aws:iam::11111111111:role/*'但它說主體無效。我讀過我們可以在 ARN 的任何部分中放置通配符,但我猜我在這種情況下誤用了它。
如何讓角色同時授予硬編碼角色和通配符角色的權限?
uj5u.com熱心網友回復:
因為,顯然,校長本身不能有任何通配符,我最終嘗試了這樣的事情:
AssumeRolePolicyDocument:
Statement:
- Action: [ 'sts:AssumeRole' ]
Effect: Allow
Principal:
AWS: '*'
Condition:
StringLike: { "aws:PrincipalArn" : !FindInMap [ TestRoleMapping, !Ref 'AWS::Region', !Ref Stage ] }
并將通配符包含在我最初打算的角色映射中:
Mappings:
TestRoleMapping:
us-east-1:
beta: ['arn:aws:iam::11111111111:role/somePrefix-*-TestInvocationRole', 'arn:aws:iam::2222222222:role/TestInvocationRole']
prod: ....
它似乎作業。但是,我在 IAM 控制臺中收到有關 Principal 為“*”的警告,我不確定這是否是最佳做法。仍然對更好的想法持開放態度。
uj5u.com熱心網友回復:
來自AWS JSON 策略元素:委托人
您不能使用通配符來匹配主體名稱或 ARN 的一部分。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/421536.html
標籤:
