やりたいこと
アクセスキーなどで直接リソースにアクセスできない環境から、JavaScript で AWS のリソースを操作したい。 AWS CLI であればassume-roleを使うが、簡単なラッパーがないかを調べた。
やり方
aws-sdk-js には credential-provider があり認証が簡単に行える。
sts:AssumeRole
するには fromTemporaryCredentials
で、他にもEC2インスタンスメタデータを使う fromInstanceMetadata
や、Lambda 実行時に自動でセットされる AWS_ACCESS_KEY_ID
などを使う fromEnv
といったものもある。
export * as ecr from "npm:@aws-sdk/client-ecr@3.511.0";
export { fromTemporaryCredentials } from "npm:@aws-sdk/credential-providers@3.511.0";
import { ecr, fromTemporaryCredentials } from "./deps.ts";
function getStsCredentialProvider(
account: string,
region: string,
role: string,
sessionName: string,
) {
return fromTemporaryCredentials({
params: {
RoleArn: `arn:aws:iam::${account}:role/${role}`,
RoleSessionName: sessionName,
DurationSeconds: 600,
},
clientConfig: {
region,
},
});
}
export function createClients(
account: string,
region: string,
role: string,
sessionName: string,
) {
const credProvider = getStsCredentialProvider(
account,
region,
role,
sessionName,
);
const ecrClient = new ecr.ECRClient({
region,
credentials: credProvider,
});
return {
ecrClient,
};
}