1. ホーム
  2. amazon-web-services

[解決済み] AWSでロールを引き受ける際のRoleSessionNameのユースケースとパフォーマンスへの影響について

2022-02-14 12:38:52

質問内容

私は、あるアカウント内のリソースに、AWSの別のアカウントからコードでアクセスしたい(クロスアカウントアクセス)というシナリオがあります。そして、私はこのアクセスをNodeJsを使用して、ラムダ関数として実装され、またEC2上で長時間実行されるコードとして実装したいと思います。

この方法をネットで読んでみると、以下の方法で生成された一時的なクレデンシャルが必要であることがわかります。 aws.STS こんな感じです。

const AWS = require('aws-sdk');

const sts = new AWS.STS();
const stsResults = await sts.assumeRole({
    RoleArn: 'arn:aws:iam::111111111111:role/role_name',
    RoleSessionName: 'STRING_VALUE',
}).promise();

const dynamodb = new AWS.DynamoDB({
    region: 'us-east-1', 
    accessKeyId: stsResults.Credentials.AccessKeyId, 
    secretAccessKey:stsResults.Credentials.SecretAccessKey, 
    sessionToken: stsResults.Credentials.SessionToken
});

について質問です。 RoleSessionName 属性は必須です。この属性が何をするのか、どのように使用すればよいのか、理解するのに苦労しています。以下はその例です。 AWSのドキュメント には、それについて書かれています。

<ブロッククオート

RoleSessionName - (String) 想定されるロールセッションの識別子です。

ロールセッション名を使用することで、同じ ロールが異なるプリンシパルによって、あるいは異なる理由で引き受けられた場合。での クロスアカウントシナリオでは、ロールセッション名は可視化され ロールを所有するアカウントによってログに記録されます。ロールセッション名は また、想定されるロールプリンシパルのARNにも使用される。つまり その後の一時的なセキュリティを使用したクロスアカウントAPIリクエストでは の認証情報は、外部アカウントにロールセッション名を公開することになります。 をAWS CloudTrailのログに記録する。

このパラメータを検証するために使用される正規表現は、以下の文字列です。 大文字と小文字の英数字で構成され、文字数は0です。 スペース。また、アンダースコアや次のいずれかを含めることができます。 文字: =,.@-

個人的には、両方のアカウントが同じ会社の所有であり、複数のアカウントを持つ理由はリソースを論理的に分離するためだけなので、セキュリティについては心配はしていません。私が知りたいのは、この属性が assumeRole 関数を呼び出すことができます。同じ RoleSessionName は、すべてのラムダ関数に使用できますか?新しいセッションを作成するたびに、ランダムなIDを作成する必要がありますか?

どのように解決するのですか?

引用したドキュメントの通りです。

<ブロッククオート

同じロールを異なるプリンシパルや異なる理由で引き受けた場合、セッションを一意に識別するためにロールセッション名を使用します。

IAM Roleがあり、それがあるプログラムによって引き受けられるとします。これは、AWSのサービスにアクセスするために使用できる一時的な資格情報のセットを返します。

監査証跡では、Roleによって行われたことはすべて、(Roleを引き受けたエンティティではなく)Roleによって行われたこととして追跡されることになります。このため、APIコールの発信元を追跡することは困難です。なぜなら、Roleは「異なる主体または異なる理由」によって引き受けられる可能性があるからです。例えば、複数のプログラムがそのロールを使用する可能性があります。

このようなリクエストの「起源」をたどるのを支援するために RoleSessionName は、特定の仮定を識別するために提供されます。これは、どのアプリがクレデンシャルを使用しているかを特定するのに役立ちます。