[英]Can't access secret stored in Secrets Manager from Google Cloud Function
[英]Lambda function can't access Secrets Manager
我寫了一個 lambda function 來訪問數據庫,所以第一步是從 AWS Secrets Manager 獲取秘密。 我有一個私有 VPC 以及與 lambda function 關聯的 su.nets、NAT 網關和安全組。我還有secretsmanager.Secret.grantRead(lambda_exec_role)
,因此 lambda 應該可以訪問 Secrets Manager。
出於某種原因,當我在 API 網關中對其進行測試時,我在 CloudWatch 中得到了“errno”:“ETIMEDOUT”和“code”:“NetworkingError”。 從我在 API 中的打印日志來看,獲取機密失敗。
我還嘗試在此處為 Secrets Manager 添加 VPC 端點,但仍然出現相同的錯誤。
如果這里有人可以幫助我或提供一些提示,我將不勝感激。
非常感謝!
我也有類似的問題,對我有用的是將kms:Decrypt
添加到 IAM 策略。 因為根據 AWS 官方文檔:
如果密鑰是使用客戶管理的密鑰而不是 Amazon Web 服務管理的密鑰 aws/secretsmanager 加密的,那么您還需要該密鑰的 kms:Decrypt 權限。 https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/secretsmanager.html#SecretsManager.Client.get_secret_value
附加到 Lambda 的 IAM 策略應該類似於:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"kms:Decrypt",
"secretsmanager:GetSecretValue",
"secretsmanager:DescribeSecret",
"secretsmanager:ListSecrets"
],
"Resource": "*"
}
]
}
您可能希望根據您的要求將Resources
限制為更具體的內容。 希望它也適合你。
我也有一個 lambda 獲得秘密內容。
它們是您可以嘗試的幾件事:
#1 確保您有權獲取秘密值,我會給您我的工作配置:
#2 我的 VPC 和子網也有問題。 如果配置錯誤,您將無法調用 Secret Manager API。
希望有一天它可以幫助某人。 :)
如果其他人在解決Secrets Manager lambda 擴展的問題時遇到這個問題,我想分享我在使用 Nodejs18.x 運行時(此時是全新的)實施時的經驗。 我正在利用這個新運行時的新頂級等待,並希望在 init 時(在處理程序之外)從 SM 檢索我的秘密。 我所有的嘗試都失敗了,我收到了分機的回復
尚未准備好服務流量,請稍候
在我的處理程序 function 中移動 http 調用(到分機的端口)立即解決了這個問題。
下面是我如何讓它在serverless.yml
中工作。
AWS 參考: https://docs.aws.amazon.com/secretsmanager/latest/userguide/vpc-endpoint-overview.html#vpc-endpoint
以下 yml 出現在路徑resources.Resources.YourVPCEndpointNameHere
下:
# Provides access from the VPC to Secrets Manager
# See https://docs.aws.amazon.com/secretsmanager/latest/userguide/vpc-endpoint-overview.html#vpc-endpoint
Type: AWS::EC2::VPCEndpoint
Properties:
VpcEndpointType: Interface
ServiceName: com.amazonaws.#{AWS::Region}.secretsmanager
PrivateDnsEnabled: true
# Reference your VPC here
VpcId: !Ref EC2VPC
# Reference your subnet ids here
SubnetIds:
- !Ref EC2SubnetA
- !Ref EC2SubnetB
- !Ref EC2SubnetC
# Reference your security group(s) here
SecurityGroupIds:
- !Ref EC2SecurityGroup
提示:您需要插件serverless-pseudo-parameters
才能使#{AWS::Region}
工作。
根據錯誤的性質 -.network timeout - 我假設即使您擁有權限也無法獲取您的秘密。
由於您在 VPC 中處理 Lambda,請注意有兩種方法可以將您的 Lambda 放入 VPC 中:
0.0.0.0/0
流量路由到 NAT 網關,然后再到 Inte.net 網關(通過公共 su.net)。 這使您可以選擇通過其公共端點(即通過 inte.net)或再次通過 VPC 端點訪問 Secrets Manager。為了解決這個問題,我的解決方案需要兩個步驟
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.