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 コンテナー インスタンスからはシークレットを取得できますが、マウントされたコンテナーからは取得できません。