Je suis en train de tenter de réaliser le scénario suivant:
1) Le compte A télécharge un fichier dans un bucket S3 appartenant au compte B. Lors du téléchargement, je spécifie un contrôle total pour le propriétaire du compte B
s3_client.upload_file(
local_file,
bucket,
remote_file_name,
ExtraArgs={'GrantFullControl': 'id='}
)
2) Le compte B définit une stratégie de bucket qui limite l'accès aux objets par IP (voir ci-dessous)
{
"Version": "2008-10-17",
"Statement": [
{
"Sid": "AllowIPs",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::bucketB/*",
"Condition": {
"IpAddress": {
"aws:SourceIp": [
,
]
}
}
}
]
}
J'obtiens un accès refusé si j'essaie de télécharger le fichier en tant qu'utilisateur anonyme, même de la plage IP spécifique. Si lors du téléchargement je rajoute une permission de lecture publique pour tout le monde, alors je peux télécharger le fichier depuis n'importe quelle IP.
s3_client.upload_file(
local_file,
bucket,
remote_file_name,
ExtraArgs={
'GrantFullControl': 'id=AccountB_CanonicalID', 'GrantRead':'uri="http://acs.amazonaws.com/groups/global/AllUsers"'
}
)
Question : est-il possible de télécharger le fichier du compte A vers le compte B tout en restreignant l'accès public par une plage IP.