首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有可能创建信任,允许来自认知的联邦用户根据自定义属性承担角色?

是否有可能创建信任,允许来自认知的联邦用户根据自定义属性承担角色?
EN

Stack Overflow用户
提问于 2021-04-06 15:33:56
回答 1查看 435关注 0票数 1

是否有可能创建信任,允许来自认知的联邦用户根据自定义属性承担角色?

例如,使用tenant属性:

代码语言:javascript
复制
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Federated": "cognito-identity.amazonaws.com"
      },
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": {
        "StringEquals": {
          "cognito-identity.amazonaws.com:aud": "us-east-1:12345678-corner-cafe-123456790ab"
        },
        "ForAnyValue:StringLike": {
          "cognito-identity.amazonaws.com:amr": "unauthenticated"
        },
        "ForAnyValue:StringLike": {
          "cognito-identity.amazonaws.com:custom:tenant": "tenant-name"
        }
      }
    }
  ]
}

我正在使用身份 api和认知令牌来承担这个角色。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-08 13:26:18

是的,对于访问控制的属性,这是绝对可能的。这只适用于经过身份验证的用户(您需要ID令牌来将声明映射到主体标记)。

  1. 您的信任策略需要如下所示:
代码语言:javascript
复制
{
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "sts:AssumeRoleWithWebIdentity",
                "sts:TagSession"
            ],
            "Condition": {
                "StringEquals": {
                    "cognito-identity.amazonaws.com:aud": "us-east-1:12345678-corner-cafe-123456790ab"
                },
                "ForAnyValue:StringLike": {
                    "cognito-identity.amazonaws.com:amr": "authenticated"
                }
            },
            "Principal": {
                "Federated": "cognito-identity.amazonaws.com"
            }
        }
    ]
}

区别在于sts:TagSession动作和amr必须是authenticated这一事实。

  1. 承担角色的策略如下所示:
代码语言:javascript
复制
{
    "PolicyDocument": {
        "Statement": [
            {
                "Action": "s3:GetObject",
                "Effect": "Allow",
                "Resource": "arn:aws:s3:::your-bucket-name/cognito/attributes/by_family_name/${aws:PrincipalTag/family_name}/*"
            },
            {
                "Action": "s3:GetObject",
                "Condition": {
                    "StringEquals": {
                        "s3:ExistingObjectTag/given_name": "${aws:PrincipalTag/given_name}"
                    }
                },
                "Effect": "Allow",
                "Resource": "arn:aws:s3:::your-bucket-name/cognito/attributes/by_tag/*"
            }
        ],
        "Version": "2012-10-17"
    },
    "PolicyName": "attributes-policy"
}
  1. 您需要在Identity Pool中配置configure (或任何其他)提供程序,以完成从令牌到标记的声明之间的映射。您可以在Attributes for access control下的控制台中执行此操作。或者像这样对待CLI:
代码语言:javascript
复制
aws cognito-identity set-principal-tag-attribute-map --cli-input-json file://set-principal-tag-attribute-map.json

如果set-principal-tag-attribute-map.json看起来像这样(对于科尼托来说是IDP):

代码语言:javascript
复制
{
    "IdentityPoolId": "here-is-your-identity-pool-id",
    "IdentityProviderName": "cognito-idp.<region>.amazonaws.com/<user_pool_id>",
    "UseDefaults": false,
    "PrincipalTags": {
        "given_name": "given_name",
        "family_name": "family_name"
    }
}

您可以在以下文档中找到更多详细信息:https://docs.aws.amazon.com/cognito/latest/developerguide/attributes-for-access-control.html

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66971754

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档