我有一個Java程式,需要訪問Amazon S3,把一些檔案放在那里。請注意,這個Java程式是在我的桌面上運行的(不是在EC2中)。使用憑證訪問Amazon S3的最佳安全方式是什么?以下是我所知道的方法。
使用訪問令牌和秘密
a. 在sdk屬性檔案中
b. 作為環境變數
c.
c. 在命令列系統屬性中
d.
d. 直接在程式中進行硬編碼
當然,出于安全考慮,我更喜歡選項b和c。
這里是否有可能出現基于角色的權限?我的理解是,這是不可能的,因為我的 Java 程式是在外部機器上運行的,而 AWS 并不知道。
是否有其他可能的訪問方法?
提前感謝。
uj5u.com熱心網友回復:
- 最好的方法是使用default provider chain,這意味著[DefaultCredentialsProvider](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/auth/credentials/DefaultCredentialsProvider.html)類將根據特定層次決定從哪里獲取憑證:
1. Java 系統屬性 - aws.accessKeyId 和 aws.secretAccessKey
2. 環境變數 - AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY
3. 來自系統屬性或環境變數的網路身份令牌憑證
4. 所有AWS SDK和AWS CLI共享的默認位置(~/.aws/credentials)上的憑證檔案檔案
5. 如果設定了 "AWS_CONTAINER_CREDENTIALS_RELATIVE_URI "環境變數并且安全管理員有權限訪問該變數,則通過亞馬遜EC2容器服務交付的憑證。
6. 通過亞馬遜EC2元資料服務交付的實體組態檔憑證
對于本地開發,推薦的方法是使用aws configure命令設定您的憑據,并讓默認提供商鏈利用該憑據。
盡管環境變數已被設定,并且安全管理器有權限訪問該變數。
盡管環境變數在某些情況下可能是一個合理的選擇(并且默認鏈將能夠使用它們),但請永遠不要在你的代碼中硬編碼任何憑證!
- 是的,它是。我們可以使用AWS CLI承擔一個角色:
aws sts assume-role --role-arn "arn:aws:iam::123456789012:role/example-role" --role-session-name AWSCLI-Session
這將提供一個臨時的AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY和AWS_SESSION_TOKEN,可以提供給應用程式。應用程式將使用假定角色提供的權限與AWS服務進行通信。
- 是的,如果目標是訪問S3,還有另一種方法。我們可以使用presigned urls. 。
uj5u.com熱心網友回復:
在使用AWS SDK for Java V2時,請參考AWS SDK for Java 開發者指南 V2。該開發者指南包含了很多資訊,可以回答這樣的問題。
Github 中的所有 AWS 示例都假定憑證是從憑證檔案中加載的。正如檔案中所解釋的,憑證檔案位于
- Windows - C:Users<yourUserName> .awscredentials
- Linux、macOS、Unix - ~/.aws/credentials 。
請參閱本主題,它將向您展示如何使用 Amazon S3 API 啟動和運行--包括設定您的憑證。
Amazon S3 Java API 有一些方法,如pubObject,可讓您將物件放入 Amazon S3 桶中。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/330259.html
標籤:
上一篇:如何在表單提交后洗掉獲取的引數值
下一篇:在AWS中使用的服務串列
