1

私は、私が想定しているIAMロールに次のポリシーを持っています:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetObject"
            ],
            "Resource": "arn:aws:s3:::mybucket/${aws:RequestTag/personalid}/*"
        }
    ]
}

役割を引き受ける際に、次のタグを渡します。

response = sts_client.assume_role(
       RoleArn=arn,
       RoleSessionName=role_session_name,
       Tags=[
          {
             'Key': 'personalid',
             'Value':'a'
          },
       ])

しかし、フォルダー「a」の下のオブジェクトを読み取ろうとすると、アクセスが拒否されます。

    s3 = boto3.resource(
      's3',
      aws_access_key_id=response['Credentials']['AccessKeyId'],
      aws_secret_access_key=response['Credentials']['SecretAccessKey'],
      aws_session_token=response['Credentials']['SessionToken'],
      region_name=client_main_region
   )
    obj = s3.Object('mybucket', f'a/file.txt')
    print(obj.get()['Body'].read().decode('utf-8'))

ロールにタグを追加する際に、ポリシーを「principalTag」に置き換えましたが、機能します。何が間違っていますか?

=====

私が試したもう1つのことは、s3オブジェクトにそのIDと次のポリシーでタグ付けすることです:

{
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetObject"
            ],
            "Condition": {
                "StringEqualsIfExists": {
                    "aws:RequestTag/personalid": "${s3:ExistingObjectTag/personalid}"
                }
            },
            "Resource": "arn:aws:s3:::mybucket/*"
        }

動作していません

4

1 に答える 1

1

誰かがこれを探している場合 - どうやら信頼関係はこれらのタグを宣言する必要がある - そのため、それらは利用可能になります:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::123:role/lambda_role"
      },
      "Action": "sts:AssumeRole"
    },
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::123:role/lambda_role"
      },
      "Action": "sts:TagSession",
      "Condition": {
        "StringLike": {
          "aws:RequestTag/personalid": "*"
        }
      }
    }
  ]
}

次に、このタグを想定された役割のプリンシパル タグとして使用できます。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject"
            ],
            "Resource": "arn:aws:s3:::mybucket/${aws:PrincipalTag/personalid}/*"
        }
    ]
}
于 2020-07-02T07:32:00.960 に答える