簡體   English   中英

AWS Secrets Manager 異常訪問被拒絕

[英]AWS Secrets Manager Exception AccessDenied

該問題簡要說明:

當我的 Web 應用程序對 AWS Secrets Manager 進行 API 調用以獲取密鑰/數據時,我收到此 AWSSecretsManagerException AccessDenied。

在此處輸入圖片說明

更詳細一點的問題:

我有一個部署到 AWS ElasticBeanstalk 的 Web 應用程序 war 文件。 我在 AWS Amplify 上有一個前端 React 應用程序,它向 WAR 文件發出 HTTPS 請求。

作為處理此請求的一部分,Web 應用程序與 PayPal 的 API 接口。 要成功請求使用 PayPal 的 API,我需要一個令牌 要獲取該令牌,我的 Web 應用程序需要向 PayPal 發出請求,以通過發送我的 PayPal Client IDSecret key來獲取該令牌

為了不將其硬編碼到應用程序中或使用純文本格式的客戶端 ID 和密鑰擁有本地配置文件,我決定使用 AWS Secrets Manager 將它們存儲在 AWS 中。 要訪問存儲在我的應用程序中的密鑰,我需要使用 AWS Secrets Manager SDK。 我通過在我的 Web 應用程序 pom 文件中包含這個依賴來做到這一點。

<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-java-sdk-secretsmanager</artifactId>
    <version>1.11.700</version>
</dependency>

然后,我添加了使用 AWS Secrets Manager SDK API 檢索客戶端 ID 和密鑰的代碼。

當我在 Payara 服務器上的機器上本地運行我的 Web 應用程序時,它可以工作。 這意味着我的機器上有一個本地 React 應用程序,該應用程序將 HTTP 請求發送到 Payara(而不是 AWS)上的本地 Web 應用程序,並且該 Web 應用程序成功地從 AWS Secrets Manager 中提取了客戶端 ID 和機密。

但是,當我將 Web 應用程序部署到 Elastic Beanstalk EC2 實例時,我從 AWS Amplify 上的前端 React 應用程序中收到了上述異常。

幾個小時后,我解決了問題。

首先,您必須注意 Exception 中列出的 Role(查看粗體文本):

com.amazonaws.services.secretsmanager.model.AWSSecretsManagerException:用戶:arn:aws:sts::<......>:assumed-role/ aws-elasticbeanstalk-ec2-role /<...>未授權執行:secretsmanager:GetSecretValue 資源:arn:aws:secretsmanager:us-east-1:<......>:secret:<.....>(服務:AWSSecretsManager;狀態代碼:400 ; 錯誤代碼: AccessDeniedException; 請求 ID: <......>)

當您在 AWS 控制台中時,轉到AWS->IAM 從那里單擊左側的角色鏈接。 請注意上面粗體文本中的角色在此處列出(文本以紅色圈出)。

在此處輸入圖片說明

雙擊那個。

在此屏幕截圖中,我已經這樣做了,但最初沒有SecretsManagerReadWrite策略(以紅色圈出)。

在此處輸入圖片說明

要獲得該政策,請單擊“附加政策”。 然后在下一頁搜索SecretsManagerReadWrite ,然后單擊復選框。 單擊“附加策略”按鈕,現在該角色已擁有!

現在,來自 AWS Amplify 上的 React 應用程序的 HTTPS 請求向 ElasticBeanstalk 上的 Web 應用程序發出請求,並且我不再收到AWSSecretsManagerException AccessDenied消息!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM