如何允许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.
1 Antwort
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
EXPERTE
beantwortet vor 6 Monaten

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen