如何限制KMS密钥仅被特定Cognito用户(联合身份ID)使用?
解决Cognito身份与IAM密钥策略关联的问题
Cognito身份确实没有IAM用户那样的直接ARN标识,要将密钥策略绑定到特定Cognito身份,核心是利用IAM策略的条件判断,通过Cognito专属的条件键来定位单个身份。
核心条件键说明
cognito-identity.amazonaws.com:sub:对应Cognito身份池里每个用户的唯一身份ID(sub属性),这是定位特定用户的关键。cognito-identity.amazonaws.com:aud:指定身份池ID,用于限定策略仅对目标身份池内的身份生效,避免范围过大。
具体策略示例
以下是一个绑定单个Cognito身份到S3资源的策略模板:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::your-target-bucket/*", "Condition": { "StringEquals": { "cognito-identity.amazonaws.com:sub": "xxx-xxxx-xxxx-xxxx-xxxxxxxx", "cognito-identity.amazonaws.com:aud": "us-east-1:xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" } } } ] }
注意事项
sub值可以在Cognito控制台的身份池 -> 身份浏览器中找到对应用户的详情信息。- 如果是第三方联合身份(如Facebook、Google登录的用户),这里的
sub是Cognito分配的唯一ID,而非第三方平台的用户ID。 - 若需授权多个Cognito身份,可使用
ForAnyValue:StringEquals来批量指定sub值:
"Condition": { "ForAnyValue:StringEquals": { "cognito-identity.amazonaws.com:sub": ["sub-id-1", "sub-id-2", "sub-id-3"] }, "StringEquals": { "cognito-identity.amazonaws.com:aud": "your-identity-pool-id" } }
内容的提问来源于stack exchange,提问作者Stavros K
相关产品推荐
相关产品推荐

