#背景
同じロールでSageMakerインスタンスを作成することは管理上で容易でありますが、CloudTrailログでは全部同じロールが見えます。
#実現方法
すべてのインスタンスが同じ IAM ロールを使用する場合、どの SageMaker ノートブックインスタンスが特定の API コールを行ったかを判断するにはどうすればよいですか?
上記のAWSブログによると実現すればOKです。
※20211111後の画面スナップショット
##実現ポイント:
1、SageMakerライフサイクルスクリプトで起動時にCLI認証情報を書き込む
#!/bin/bash
set -ex
# Obtain the name of the notebook instance
nbname=$(jq -r '.ResourceName' /opt/ml/metadata/resource-metadata.json)
echo "Notebook Name = $nbname"
# Use the AWS Command Line Interface (AWS CLI) to obtain the Amazon Resource Name (ARN) of the IAM execution role
nbinfo=$(aws sagemaker describe-notebook-instance --notebook-instance-name $nbname)
nbrole=$(jq -r '.RoleArn' <<< "$nbinfo")
echo "Notebook Role = $nbrole"
# Obtain the Region of the notebook instance
nbregion=$(aws configure get region)
echo "Notebook Region = $nbregion"
# Write Assume Role Provider Settings to a new config file
echo "Writing new config file"
cat > /home/ec2-user/.aws/config.new <<EOF1
[default]
region=$nbregion
role_arn = $nbrole
credential_source = Ec2InstanceMetadata
role_session_name = $nbname
sts_regional_endpoints = regional
EOF1
echo "Moving new config to config file"
sudo mv /home/ec2-user/.aws/config.new /home/ec2-user/.aws/config
2、EC2インスタンスプロファイルにアタッチされたIAMロールを使用する
role_arn = $nbrole
:SageMaker自分のロールを使用する
credential_source = Ec2InstanceMetadata
:当インスタンスの認証情報を使用する
role_session_name = $nbname
:インスタンス名をセッション名に指定する
参考:AWS CLI での IAM ロールの使用
#おまけ
2021年3月17日(すべてのインスタンスが同じ IAM ロールを使用する場合、どの SageMaker ノートブックインスタンスが特定の API 呼び出しを行ったかを判断するにはどうすればよいですか?)
2021年11月11日以前のAWSブログでの記事で、ロールの連鎖を起こすから、現在の記事になりました。
ロール連鎖現象:
SageMakerインスタンスで作成したClient
またはResource
を利用する場合、1時間後に使えなくなります、権限が足りないエラーです。
参考:ロール連鎖