我已经设置了一个带有 EC2 类型容器实例的 AWS ECS 集群。在任务定义中,有一个“SECRETS”环境变量,其值对应于特定的秘密名称。任务定义使用 awsvpc 网络模式。
为了从代码(.net)访问秘密值,使用以下代码(来自aws 片段):
IAmazonSecretsManager client = new AmazonSecretsManagerClient(region);
GetSecretValueRequest request = new GetSecretValueRequest
{
SecretId = secretName,
VersionStage = "AWSCURRENT" // VersionStage defaults to AWSCURRENT if unspecified.
};
GetSecretValueResponse response = Task.Run(async () => await client.GetSecretValueAsync(request)).Result;
这与Fargate实例类型完美配合。当切换到EC2容器实例 GetSecretValueAsync() 失败并出现 AggregateException : TaskCanceledException。
我尝试从容器内部成功获取 IAM 角色凭证:
curl 169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
我也尝试过直接指定检索到的凭据,但没有运气:
AmazonSecretsManagerClient(awsAccessKeyId, awsSecretAccessKey, region)
此外,我尝试在容器内烘焙 aws cli,并且从内部尝试过aws secretsmanager
,aws iam get-user
并且aws sts get-caller-identity
- 仍然挂起而没有响应。我已授予对任务执行角色的完全管理员访问权限 - 仍然没有成功。我能够从 EC2 容器实例中检索机密,但不能从已安装的容器中检索。