如何允许SSO用户使用其身份存储:UserId访问另一个帐户中的S3存储桶?

0

【以下的问题经过翻译处理】 需要允许特定的SSO用户访问另一个账户中的S3存储桶。

(最好只允许访问目标账户中的一个桶,而不是多个。)

使用这份文档,我认为我应该能够使用这个基于资源的策略:

{
   "Version":"2012-10-17",
   "Statement": [
      {
         "Effect":"Allow",
         "Principal":"*",
         "Action": [
            "s3:GetObject",
            "s3:GetObjectVersion"
         ],
         "Resource": [
            "arn:aws:s3:::mybucket/*"
         ],
         "Condition": {
            "StringEquals": {
               "identitystore:UserId": [
                  "<UserId>"
               ]
            }
         }
      }
   ]
}

直接在存储桶上,将希望添加的用户UserId添加到SSO控制台中可用。然而,当添加JSON时,总是出现以下错误:

Invalid Condition Key: The condition key identitystore:UserId does not exist. Use a valid condition key.

看了一些文档并发现这个条件关键字是全局的(是吗?),所以我也尝试了以下方法:

"Condition": {
    "StringEquals": {
        "aws:identitystore:UserId": [

然而,同样的错误发生了:

Invalid Global Condition Key: The condition key aws:identitystore:UserId does not exist. Use a valid condition key.

然后,我再次查看了文档,并发现S3的条件关键字列表中并不包括identitystore:UserId,虽然我认为作为全局条件它应该是可以使用的...

我还尝试在JSON中将Resource包括地区和账户ID。例如:“arn:aws:s3:us-east-1:111111111111:mybucket/*”,然而似乎没有效果。

在创建新的 SSO 权限集作为内联策略(没有主体)时,还尝试使用此策略 JSON,但再次出现类似问题。

Invalid Service Condition Key: The condition key identitystore:UserId does not exist in the service identitystore. Use a valid condition key.
profile picture
专家
已提问 10 个月前57 查看次数
1 回答
0

【以下的回答经过翻译处理】 我在自己的账户中测试了策略,与你一样收到了相同的错误,无论我是从同一组织的IAM Identity Store中提供了一个UserID,还是来自另一个组织。

我在自己的环境中进行了进一步的测试,找到了一个解决方法,你可以使用条件键“aws:userId” [1] 可能允许访问s3存储桶。条件键“aws:userId”允许您限制对Identity Center(IDC)用户名和它在其他账户中扮演的角色的访问,下面是示例策略:

{
   "Version": "2012-10-17",
   "Statement": [
       {
           "Sid": "UserID",
           "Effect":"Allow",
           "Principal": "*",
           "Action": [
               "s3:GetObject",
               "s3:GetObjectVersion"
           ],
           "Resource":"arn:aws:s3::: mybucket / *",
           "Condition": {
               "StringLike": {
                   "aws:userId": "AROAJI4AVV3EXAMPLEID:SSOUserName"
               }
           }
       }
   ]
}

在上述策略中,GetObject被限制为IDC用户所扮演的特定IAM角色。 aws:userID条件键值具有以下格式:UNIQUE-ROLE-ID:ROLE-SESSION-NAME。

要获得UNIQUE-ROLE-ID,可以使用get-role cli命令[2],需要从尝试访问您的帐户中的s3存储桶的帐户中运行此命令。角色名称可以在IAM控制台中找到,并且将是以下格式“AWSReservedSSO_PermissionSetID_RandomizedCharectors”:

 iam get-role –role-name ROLE-NAME.

从输出中,UNIQUE-ROLE-ID 将是以 AROA 开头的 RoleId 字符串。

ROLE-SESSION-NAME 将等于用户用于登录 AWS Identity Center 的用户名。 您还可以通过在其他账户的 IAM 身份中心查看用户来确认用户名。

profile picture
专家
已回答 10 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则