独自の内部レポートのためにCloudwatchから多くのメトリクスを取得するスクリプトがあります。
スクリプトは、特定のリージョン内のすべてのEC2インスタンスを反復処理し、過去2週間の5つのクラウドウォッチメトリクス(利用可能なすべての統計)を要求します(毎回5分間隔で5日戻ります。これは正確に1440クォータです)。想定されるセッションを使用しています:
session = Session(aws_access_key_id=AWS_ACCESS_KEY_ID, aws_secret_access_key=AWS_SECRET_ACCESS_KEY, region_name=regionName)
sts = session.client('sts')
response = sts.assume_role(
RoleArn=arn, # External role arn
RoleSessionName='role-name',
ExternalId='<some-id-here>',
)
tempAccessKeyId = response['Credentials']['AccessKeyId']
tempSecretAccessKey = response['Credentials']['SecretAccessKey']
tempSessionToken = response['Credentials']['SessionToken']
assumedSession = Session(
aws_access_key_id=tempAccessKeyId,
aws_secret_access_key=tempSecretAccessKey,
aws_session_token=tempSessionToken,
region_name=regionName)
スクリプトの実行中に、次の例外が発生しました。
botocore.exceptions.ClientError: An error occurred (ExpiredToken) when calling the GetMetricStatistics operation: The security token included in the request is expired
スクリプトの実行中にトークンの有効期限が切れないようにする方法はありますか? boto3を使用しています。
使用しているassume_roleメソッドは、temporaryセキュリティ資格情報を返します。以下は 公式ドキュメント から抜粋したものです。
一時的なセキュリティ資格情報は、AssumeRoleを呼び出すときに指定した期間(900秒(15分)から3600秒(1時間))有効です。デフォルトは1時間です。
DurationSeconds
キーワード引数を使用していないため、返される資格情報はデフォルトの1時間有効です。 1時間後にリクエストを行うには、必ず新しい認証情報を取得する必要があります。 Temporary Security Credentialsの公式ドキュメント から次を参照してください。
一時的なセキュリティ資格情報の有効期限が切れるとき(またはその前でも)、ユーザーは、新しい資格情報を要求するユーザーがまだそうする権限を持っている限り、新しい資格情報を要求できます。