具有多个 Actions 的 FederatedPrincipal
FederatedPrincipal with multiples Actions
我正在尝试在 aws-cdk 中使用多个 Action
创建一个 FederatedPrincipal
,如下所示:
目前,我正在用 c#
执行此操作(如下所示)
new FederatedPrincipal("cognito-identity.amazonaws.com", new Dictionary<string, object>
{
{ "ForAnyValue:StringLike", new Dictionary<string,string> { ["cognito-identity.amazonaws.com:amr"] = "authenticated" } },
{ "StringEquals", new Dictionary<string,string> { ["cognito-identity.amazonaws.com:aud"] = cfn_identitypool.Ref } }
}, "sts:AssumeRoleWithWebIdentity");
如何添加第二个操作 - sts:TagSession
?
目前使用高级构造无法做到这一点。查看这个仍然未解决的问题:https://github.com/aws/aws-cdk/issues/6699
TL;DR
IPrincipal
要求 assumeRoleAction
是一个字符串。但是你需要的是一个数组。看起来它已被搁置,因为这意味着团队不想引入的 BC-breaking 更改。
我最终得到的是使用低级构造 CfnRole
。我使用 TypeScript,但将其移植到 C# 应该很简单。
const authenticatedRole = new iam.CfnRole(this, 'AuthenticatedRole', {
assumeRolePolicyDocument: {
'Statement': [{
'Effect': iam.Effect.ALLOW,
'Action': ['sts:AssumeRoleWithWebIdentity', 'sts:TagSession'],
'Condition': {
'StringEquals': {
'cognito-identity.amazonaws.com:aud': identityPool.getAtt('Ref')
},
'ForAnyValue:StringLike': {
'cognito-identity.amazonaws.com:amr': 'authenticated'
}
},
'Principal': {
'Federated': 'cognito-identity.amazonaws.com'
}
}]
}
});
const roleAttachment = new cognito.CfnIdentityPoolRoleAttachment(this, 'RoleAttachment', {
identityPoolId: identityPool.getAtt('Ref').toString(),
roles: {
'authenticated': authenticatedRole.getAtt('Arn'),
}
});
我正在尝试在 aws-cdk 中使用多个 Action
创建一个 FederatedPrincipal
,如下所示:
目前,我正在用 c#
执行此操作(如下所示)new FederatedPrincipal("cognito-identity.amazonaws.com", new Dictionary<string, object>
{
{ "ForAnyValue:StringLike", new Dictionary<string,string> { ["cognito-identity.amazonaws.com:amr"] = "authenticated" } },
{ "StringEquals", new Dictionary<string,string> { ["cognito-identity.amazonaws.com:aud"] = cfn_identitypool.Ref } }
}, "sts:AssumeRoleWithWebIdentity");
如何添加第二个操作 - sts:TagSession
?
目前使用高级构造无法做到这一点。查看这个仍然未解决的问题:https://github.com/aws/aws-cdk/issues/6699
TL;DR
IPrincipal
要求 assumeRoleAction
是一个字符串。但是你需要的是一个数组。看起来它已被搁置,因为这意味着团队不想引入的 BC-breaking 更改。
我最终得到的是使用低级构造 CfnRole
。我使用 TypeScript,但将其移植到 C# 应该很简单。
const authenticatedRole = new iam.CfnRole(this, 'AuthenticatedRole', {
assumeRolePolicyDocument: {
'Statement': [{
'Effect': iam.Effect.ALLOW,
'Action': ['sts:AssumeRoleWithWebIdentity', 'sts:TagSession'],
'Condition': {
'StringEquals': {
'cognito-identity.amazonaws.com:aud': identityPool.getAtt('Ref')
},
'ForAnyValue:StringLike': {
'cognito-identity.amazonaws.com:amr': 'authenticated'
}
},
'Principal': {
'Federated': 'cognito-identity.amazonaws.com'
}
}]
}
});
const roleAttachment = new cognito.CfnIdentityPoolRoleAttachment(this, 'RoleAttachment', {
identityPoolId: identityPool.getAtt('Ref').toString(),
roles: {
'authenticated': authenticatedRole.getAtt('Arn'),
}
});