如何对联合用户使用 IAM 策略变量?

1 分钟阅读
0

当我使用 GetFederationToken API 生成临时凭证时,${aws:userName} 策略变量不起作用。

解决方法

Principal 元素是联合用户时,${aws:userName} AWS Identity and Access Management(IAM)策略变量不在请求中。相反,请在 GetFederationToken API 调用中使用 ${aws:userID} 策略变量。有关详细信息,请参阅您可以使用策略变量的位置

在以下 JSON 策略示例中,${aws:userName} 策略变量被替换为 ${aws:userID} 策略变量:

{   "Version":"2012-10-17",
   "Statement":[
      {
         "Sid":"AllowListingOfUserFolder",
         "Action":[
            "s3:ListBucket"
         ],

         "Effect":"Allow",

         "Resource":[
            "arn:aws:s3:::TESTBUCKET"
         ],
         "Condition":{
            "StringLike":{
               "s3:prefix":[
                  "TESTBUCKET/${aws:userid}/*"
               ]
            }
         }
      },
      {
         "Sid":"AllowAllS3ActionsInUserFolder",
         "Action":[
            "s3:PutObject",
            "s3:GetObject",
            "s3:GetObjectVersion",
            "s3:DeleteObject"
         ],
         "Effect":"Allow",
         "Resource":[
            "arn:aws:s3:::TESTBUCKET/${aws:userid}/*"
         ]
      }
   ]
}

aws:userid 变量的值必须为 ACCOUNTNUMBER:caller-specified-name

GetFederationToken API 调用的 Name 参数值必须遵循 GetFederationToken 指南。例如,如果指定友好名称 Bob,则正确的格式为 123456789102:Bob。这种格式会为您的会话命名,并允许访问具有匹配前缀的 Amazon Simple Storage Service(Amazon S3)存储桶。

**注意:**前面的示例假设 aws:userid 变量的调用方指定的友好名称唯一标识符。唯一友好名称不允许具有相同友好名称的其他用户访问 JSON 策略中指定的资源。

相关信息

GetFederationToken 的权限

IAM 策略元素:变量和标签

IAM 标识符

AWS 官方
AWS 官方已更新 1 年前