2016-05-10 5 views
1

Je souhaite accorder à mon instance ec2 l'accès à un compartiment s3.Accorder l'accès d'instance EC2 au compartiment S3

Sur cette instance ec2, un conteneur avec mon application est lancé. Maintenant, je n'ai pas la permission sur le seau s3.

Ceci est ma politique seau

{ 
"Version": "2012-10-17", 
"Id": "Policy1462808223348", 
"Statement": [ 
    { 
     "Sid": "Stmt1462808220978", 
     "Effect": "Allow", 
     "Principal": { 
      "AWS": "arn:aws:iam::714656454815:role/ecsInstanceRole" 
     }, 
     "Action": "s3:GetObject", 
     "Resource": "arn:aws:s3:::bucket-name/*", 
     "Condition": { 
      "IpAddress": { 
       "aws:SourceIp": "private-ip/32" 
      } 
     } 
    } 
] 
} 

Mais cela ne fonctionne pas jusqu'à ce que je donne le seau la permission pour tout le monde pour y accéder.

J'essaie de faire rouler le fichier dans le compartiment s3 à l'intérieur de l'instance ec2 mais cela ne fonctionne pas non plus.

Répondre

1

Il n'existe aucun moyen direct d'accorder l'accès d'instance "EC2" au serveur AWS, mais vous pouvez essayer ce qui suit.

  1. Créer un nouvel utilisateur dans AWS IAM et télécharger le fichier d'informations d'identification.
  2. Cet utilisateur représentera votre serveur EC2.
  3. Fournissez à l'utilisateur des autorisations sur votre compartiment S3.
  4. Ensuite, placez les informations d'identification dans un fichier dans l'emplacement suivant: -
    EC2 - Windows Instance:
    a. Placez le fichier d'informations d'identification où vous le souhaitez. (par exemple C:/credentials)
    b. Créer un environnement variable de AWS_CREDENTIAL_PROFILES_FILE et mettre la valeur comme le chemin où vous mettez vos informations d'identification fichier (par exemple C:/références)
    EC2 - Linux instance
    a. Suivez les étapes de l'instance de Windows
    b. Créez un dossier .aws dans le dossier racine de votre serveur d'applications (par exemple, /usr/share/tomcat6).
    c. Créer un symmlink entre votre variable d'environnement et vos .AWS dossier sudo ln -s $AWS_CREDENTIAL_PROFILES_FILE /usr/share/tomcat6/.aws/credentials

  5. Maintenant que votre fichier d'informations d'identification est placé, vous pouvez utiliser le code Java pour accéder au seau.
    NOTE: bibliothèques AWS SDK sont requises pour cette



    AWSCredentials credentials = null; 
      try { 
       credentials = new ProfileCredentialsProvider().getCredentials(); 
      } catch (Exception e) { 
       LOG.error("Unable to load credentials " + e); 
       failureMsg = "Cannot connect to file server."; 
       throw new AmazonClientException(
         "Cannot load the credentials from the credential profiles file. " + 
         "Please make sure that your credentials file is at the correct " + 
         "location (environment variable : AWS_CREDENTIAL_PROFILES_FILE), and is in valid format.", 
         e); 
      } 

      AmazonS3 s3 = new AmazonS3Client(credentials); 
      Region usWest2 = Region.getRegion(Regions.US_WEST_2); 
      s3.setRegion(usWest2); 
    ObjectListing objectListing = s3.listObjects(new ListObjectsRequest().withBucketName(bucketName).withPrefix(prefix)); 

bucketName = [Votre nom Bucket]
et préfixe = [votre structure de dossier dans votre seau , où votre fichier (s) sont contenus]

Espérons que cela aide. En outre, si vous n'utilisez pas Java, vous pouvez également extraire des kits SDK AWS dans d'autres langages de programmation.

0

Essayez ceci:

{ 
"Version": "2012-10-17", 
"Id": "Policy1462808223348", 
"Statement": [ 
    { 
     "Sid": "Stmt1462808220978", 
     "Effect": "Allow", 
     "Principal": { 
      "AWS": "*" 
     }, 
     "Action": "s3:*", 
     "Resource": "arn:aws:s3:::bucket-name/*", 
     "Condition": { 
      "IpAddress": { 
       "aws:SourceIp": "yourIp/24" 
      } 
     } 
    } 
] 
} 
+0

ne fonctionnait pas. C'est tellement déroutant. Comme je l'ai dit, je ne peux même pas faire une boucle de l'intérieur de l'instance ec2 pour mon fichier. Seulement quand je mets la permission à tout le monde et je ne veux pas faire ça. – DK1990

0

je l'ai trouvé sur ....

Il fonctionne uniquement avec l'adresse IP publique de l'instance EC2.