ユーザ用ツール

サイト用ツール


aws:iam:sts

AWS STS(Security Token Service)で、一時的セキュリティ認証情報

AWS STSとは

STS は、AWS リソースへのアクセスを制御できる一時的なセキュリティ認証情報を使用して、信頼できるユーザーを作成および提供するために使用されます。

一時的な認証情報の一般的なシナリオ

シナリオとしては以下がある。

  • 所有している別の AWS アカウントへのアクセスを IAM ユーザーに許可
  • 第三者が所有する AWS アカウントへのアクセス権を付与する
  • AWS サービスへのアクセスの提供
  • 外部で認証されたユーザー(ID フェデレーション)へのアクセスの許可

AWS STS リージョンとエンドポイント

リージョン名 エンドポイント
グローバル st.amazonaws.com
アジアパシフィック(東京) sts.ap-northeast-1.amazonaws.com
アジアパシフィック (大阪) sts.ap-northeast-3.amazonaws.com
米国東部(バージニア北部) sts.us-east-1.amazonaws.com
トラブルの例

AWS CLI で VPC エンドポイント経由でアクセスする - ablog
AWS CLI でうまく行かない場合は、--debugオプションをつけてデバッグログを出力する。
以下はグローバルエンドポイントにアクセスしてタイムアウトしている。('client_region': 'us-east-1')

aws s3 cp test.txt s3://arn:aws:s3:ap-northeast-1:123456789012:accesspoint/foo/bar/ --acl bucket-owner-full-control --profile account1 --debug

(中略)

2021-07-29 17:29:45,221 - Thread-3 - botocore.endpoint - DEBUG - Making request for OperationModel(name=PutObject) with params: {'body': <s3transfer.utils.ReadFileChunk object at 0x7f3a4777f110>, 'url': u'https://s3.amazonaws.com/foo/bar/test.txt', 'headers': {'Expect': '100-continue', u'Content-Type': 'text/plain', u'x-amz-acl': 'bucket-owner-full-control', 'User-Agent': 'aws-cli/1.18.147 Python/2.7.18 Linux/4.14.232-177.418.amzn2.x86_64 botocore/1.18.6'}, 'context': {'auth_type': None, 'client_region': 'us-east-1★', 'signing': {'bucket': u'arn:aws:s3:ap-northeast-1:123456789012:accesspoint/foo'}, 'has_streaming_input': True, 'client_config': <botocore.config.Config object at 0x7f3a47896410>, 's3_accesspoint': {'region': u'ap-northeast-1', 'account': u'123456789012', 'partition': u'aws', 'name': u'foo'}}, 'query_string': {}, 'url_path': u'/foo/bar/test.txt', 'method': u'PUT'}


AWS CLI操作

##APIの呼び出しに使用されるIAMの情報を確認。
$ aws sts get-caller-identity --region ap-northeast-1 --endpoint https://sts.ap-northeast-1.amazonaws.com
{
    "Account": "<アカウントBのAWSアカウントID>",
    "UserId": "XXXXXXXXXXXXXXXXXXXX:i-xxxxxxxxxxxxxxxx",
    "Arn": "arn:aws:sts::<アカウントBのAWSアカウントID>:assumed-role/demo-Role-B/i-xxxxxxxxxxxxxxxx"
}
#別アカウントの権限を借り受ける
$ aws sts assume-role --role-arn "arn:aws:iam::<アカウントAのAWSアカウントID>:role/demo-Role-A" --role-session-name "demo-session" --endpoint https://sts.ap-northeast-1.amazonaws.com --region ap-northeast-1
{
    "AssumedRoleUser": {
        "AssumedRoleId": "XXXXXXXXXXXXXXXXXXXXX:demo-session",
        "Arn": "arn:aws:sts::<アカウントAのAWSアカウントID>:assumed-role/demo-Role-A/demo-session"
    },
    "Credentials": {
        "SecretAccessKey": "<シークレットアクセスキー>",
        "SessionToken": "<セッショントークン>",
        "Expiration": "2019-07-09T01:53:10Z",
        "AccessKeyId": "<アクセスキー>"
    }
}

#出力された内容を環境変数に設定
$export AWS_ACCESS_KEY_ID="<アクセスキー>"
$export AWS_SECRET_ACCESS_KEY="<シークレットアクセスキー>"
$export AWS_SESSION_TOKEN="<セッショントークン>"

#APIの呼び出しに使用されるIAMの情報がdemo-Role-Aになっていることを確認
$ aws sts get-caller-identity --region ap-northeast-1 --endpoint https://sts.ap-northeast-1.amazonaws.com
{
    "Account": "<アカウントAのAWSアカウントID>",
    "UserId": "XXXXXXXXXXXXXXXXXXXXX:demo-session",
    "Arn": "arn:aws:sts::<アカウントAのAWSアカウントID>:assumed-role/demo-Role-A/demo-session"
}


参考

aws/iam/sts.txt · 最終更新: 2024/01/11 01:23 by kurihara

ページ用ツール