0

我在S3帳戶通過Web瀏覽器設置S3鬥政策在AWS網站中設置S3存儲桶策略時,我是否應該在我的Java代碼中再次執行該代碼,該代碼將在Ec2實例中運行?

https://i.stack.imgur.com/sppyr.png

我的問題是,當我在當地的筆記本電腦上運行我的web應用程序的Java代碼,它上傳圖像S3。

final AmazonS3 s3 = new AmazonS3Client(
        new AWSStaticCredentialsProvider(new BasicAWSCredentials("accessKey*", 
         "secretKey"))); 
       s3.setRegion(Region.US_West.toAWSRegion()); 
       s3.setEndpoint("s3-us-west-1.amazonaws.com"); 
versionId = s3.putObject(new PutObjectRequest("bucketName", name, convFile)).getVersionId(); 

但是當我部署我的web應用程序彈性魔豆,但沒有成功上傳圖片到S3對象。 所以我應該以編程方式在我的Java代碼中再次編寫S3存儲桶策略?

PS:其他詳細信息,可能是有用的:Why am I able to upload to AWS S3 from my localhost, but not from my AWS Elastic BeanStalk instance?

回答

1

你的S3鬥政策過於寬鬆。你應該儘快刪除它。

您應該創建Elastic Beanstalk應用程序將承擔的IAM角色,而不是在代碼中向Elastic Beanstalk應用程序顯式提供憑據。該IAM角色應具有附加的IAM策略,允許適當的訪問您的S3存儲桶以及存儲桶中的對象。

在筆記本電腦上測試時,您的應用無需在代碼中擁有憑據。相反,您的應用程序應該利用AWS SDK將從運行應用程序的環境中爲您檢索憑據的事實。您應該使用default credential provider chain

+0

感謝您的回答。我現在正在閱讀這些文檔。我有點觸動這篇文檔。這個文檔中提到的關鍵是什麼S3Object s3object = s3Client.getObject( new GetObjectRequest(bucketName,key)); http://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/java-dg-roles.html –

+0

你可以在這裏閱讀關於鍵:http://docs.aws.amazon。 COM/AmazonS3 /最新的/ dev/UsingMetadata.html#對象鍵。 – jarmod

+0

好的,退後一秒, 「相反,你的......正在運行。」 - 1)因此,無論是在筆記本電腦上運行webapp還是在AWS Ec2中運行webapp,我們都應該「使用默認的憑證提供程序鏈(推薦)」。 2)我創建了一個角色並創建了訪問策略並將其分配給我的Ec2實例。現在我感到我應該使用哪些方法a)DefaultAWSCredentialsProviderChain b)InstanceProfileCredentialsProvider 3)角色沒有accessKey&secKey? 4)如何在我的筆記本電腦之間使用AWS憑證並在Ec2中運行時保持一致? 請幫忙。 –

相關問題