ablog

不器用で落着きのない技術者のメモ

AWS CLI で IAM ユーザーで認証して IAM ロールにスイッチすると --endpoint_url の指定が効かない

事象

  • オンプレのサーバから AWS CLI で IAM ユーザーのクレデンシャルで認証後、別AWSアカウントの IAM ロールにスイッチロールすると STS の --endpoint_url パラメータの指定が効かず、グローバルエンドポイントやリージョナルエンドポイントにアクセスし、接続タイムアウトする。
  • オンプレのサーバから AWS へは Direct Connect -> Transit Gateway -> VPC へ接続し、STS や S3 には VPC エンドポイント(Interface型)経由でアクセスしている 。

実行コマンド

  • EC2 から実行した場合、成功する
$ 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"
        }
    ]
}

AWS CLI 設定

  • ~/.aws/config
[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
  • ~/.aws/crednential
[s3_access]
aws_access_key_id = ********
aws_secret_access_key =  ********