You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在EC2启动模板中通过PHP获取SecretsManager存储的密钥

解决方案:通过EC2实例角色自动访问AWS Secrets Manager

问题根源

你的PHP代码指定了'profile' => 'default',这会强制AWS SDK读取本地~/.aws/credentials文件,但使用EC2实例IAM角色时,SDK可以自动从实例元数据服务(IMDS)获取临时凭证,完全不需要手动创建credentials文件。

1. 修改PHP代码(核心修复)

删除profile参数,让SDK自动使用实例角色的凭证:

$client = new SecretsManagerClient([
    'version' => '2017-10-17',
    'region' => 'eu-central-1',
]);

try {
    $result = $client->getSecretValue([
        'SecretId' => $secret_name,
    ]);
} catch (AwsException $e) {
    $error = $e->getAwsErrorCode();
    if ($error == 'DecryptionFailureException') {
        throw $e;
    }
    if ($error == 'InternalServiceErrorException') {
        throw $e;
    }
    if ($error == 'InvalidParameterException') {
        throw $e;
    }
    if ($error == 'InvalidRequestException') {
        throw $e;
    }
    if ($error == 'ResourceNotFoundException') {
        throw $e;
    }
}

// 解密并返回密钥内容
if (isset($result['SecretString'])) {
    $secret = $result['SecretString'];
} else {
    $secret = base64_decode($result['SecretBinary']);
}   
return json_decode($secret, true);

2. 配置EC2启动模板的IAM角色

确保启动模板关联具备SecretsManager访问权限的IAM角色:

  • 创建或复用现有IAM角色,附加包含以下权限的策略:
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": "secretsmanager:GetSecretValue",
                "Resource": "arn:aws:secretsmanager:eu-central-1:你的AWS账号ID:secret:你的密钥名称-*"
            },
            {
                "Effect": "Allow",
                "Action": "kms:Decrypt",
                "Resource": "arn:aws:kms:eu-central-1:你的AWS账号ID:key/你的KMS密钥ID"
            }
        ]
    }
    

    注意:如果密钥使用AWS托管KMS密钥(默认创建的密钥),可省略KMS权限;若使用自定义KMS密钥,必须添加kms:Decrypt权限。

  • 在EC2启动模板的**"IAM实例配置文件"**选项中,选择该IAM角色对应的实例配置文件(实例配置文件是IAM角色的容器,用于绑定到EC2实例)。

3. 验证实例角色生效

实例启动后,可通过以下命令测试元数据服务是否返回临时凭证:

curl http://169.254.169.254/latest/meta-data/iam/security-credentials/你的IAM角色名称

若返回包含AccessKeyId、SecretAccessKey、Token的JSON,说明角色配置正常。

4. (可选)User Data预安装依赖

如果实例需要安装AWS PHP SDK,可在启动模板的User Data中添加安装命令(以Amazon Linux 2为例):

#!/bin/bash
yum install -y php php-cli php-curl
curl -sS https://getcomposer.org/installer | php
php composer.phar require aws/aws-sdk-php

内容的提问来源于stack exchange,提问作者FroddeB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 04:32:47