事象
- オンプレのサーバから AWS CLI で IAM ユーザーのクレデンシャルで認証後、別AWSアカウントの IAM ロールにスイッチロールすると STS の --endpoint_url パラメータの指定が効かず、グローバルエンドポイントやリージョナルエンドポイントにアクセスし、接続タイムアウトする。
- オンプレのサーバから AWS へは Direct Connect -> Transit Gateway -> VPC へ接続し、STS や S3 には VPC エンドポイント(Interface型)経由でアクセスしている 。
実行コマンド
$ aws --version
aws-cli/2.15.30 Python/3.9.16 Linux/6.1.97-104.177.amzn2023.x86_64 source/x86_64.amzn.2023 prompt/off
$ aws sts get-caller-identity --endpoint-url https://vpce-********-********.sts.ap-northeast-1.vpce.amazonaws.com --region ap-northeast-1
2024-08-06 05:28:12,474 - MainThread - urllib3.connectionpool - DEBUG - Starting new HTTPS connection (1): vpce-********-********.sts.ap-northeast-1.vpce.amazonaws.com:443
スイッチロール元のAWSアカウントの設定
- IAM ユーザー
- IAM ポリシー: switch-role-policy
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"sts:AssumeRole"
],
"Resource": [
"arn:aws:iam::234567890123:role/s3-access-role"
]
}
]
}
スイッチロール先のAWSアカウントの設定
- IAMロール: s3-access-role
- 許可
- AmazonS3FullAccess(AWS管理)
- 信頼関係
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::123456789012:user/s3-access-user"
},
"Action": "sts:AssumeRole"
}
]
}
[profile s3_access]
region = ap-northeast-1
role_arn = arn:aws:iam::123456789012:role/s3-role
source_profile=s3_access
services = custom-endpoint
[services custom-endpoint]
s3 =
endpoint_url = https://bucket.vpce-********-********.s3.ap-northeast-1.vpce.amazonaws.com
sts =
endpoint_url = https://vpce-********-********.sts.ap-northeast-1.vpce.amazonaws.com
[s3_access]
aws_access_key_id = ********
aws_secret_access_key = ********