1

Durch Googeln fand ich this tutorial on accessing S3 from EC2 instance without credential file. Ich folgte seinen Anweisungen und bekam die gewünschte Instanz. Die aws-Webkonsolenseite sieht wie folgt aus: enter image description hereSo geben Sie ec2-Instanz Zugriff auf s3 mit boto3

Allerdings möchte ich es nicht jedes Mal manuell über die Webkonsole machen. Wie kann ich solche EC2-Instanzen mit boto3 erstellen?

Ich versuchte

s = boto3.Session(profile_name='dev', region_name='us-east-1') 
ec2 = s.resource('ec2') 
rc = ec2.create_instances(ImageId='ami-0e297018', 
          InstanceType='t2.nano', 
          MinCount=1, 
          MaxCount=1, 
          KeyName='my-key', 
          IamInstanceProfile={'Name': 'harness-worker'}, 
         ) 

wo harness-worker mit Zugang zu S3 die IAM-Rolle ist, aber sonst nichts. Es wird auch in der ersten Annäherung mit der aws Webkonsole Tutorial verwendet.

Dann bekam ich Fehler sagen

ClientError: An error occurred (UnauthorizedOperation) when calling the RunInstances operation: You are not authorized to perform this operation.

Habe ich etwas offensichtlich falsch gemacht?

Das Profil dev hat AmazonEC2FullAccess. Ohne die Zeile IamInstanceProfile={'Name': 'harness-worker'}, kann create_instances Instanz erstellen.

Antwort

2

Um einer Instanz ein IAMProfile zuzuweisen, reicht AmazonEC2FullAccess nicht aus. Darüber hinaus benötigen Sie die folgende Berechtigung, um die Rolle an die Instanz zu übergeben.

See: Granting an IAM User Permission to Pass an IAM Role to an Instance

{ 
    "Effect": "Allow", 
    "Action": "iam:PassRole", 
    "Resource": "*" 
} 

Zuerst können Sie die vollständigen IAM Zugriff auf Ihre dev Profil geben und sehen, es funktioniert. Entfernen Sie dann den vollen IAM-Zugang und geben Sie nur iam:PassRole ein und versuchen Sie es erneut.

0

Dies hat nichts mit der Rolle zu tun, der Sie die neue EC2-Instanz zuweisen möchten. Das Python-Skript, das Sie ausführen, verfügt nicht über die Berechtigung RunInstances.

+0

Entschuldigung, ich bin neu bei Boto3 und AWS. Könntest du ein bisschen mehr darüber erklären, wie man es beheben kann? Vielen Dank. – nos

+0

Sie haben eine Sortierung, wenn die IAM-Anmeldeinformationen von Ihrem Python-Skript als Schnittstelle zur AWS-API verwendet werden. Diese Anmeldeinformationen sind nicht berechtigt, neue EC2-Instanzen zu erstellen. Dies ist kein Problem mit Ihrem Code. Es handelt sich um ein Problem mit dem IAM-Konto oder -Profil, das Sie verwenden. –

+0

Das Entwicklerprofil hat AmazonEC2FullAccess. Ohne die Zeile IamInstanceProfile = {'Name': 'harness-worker'} kann create_instances eine Instanz erstellen. – nos

Verwandte Themen