19
13

More than 3 years have passed since last update.

AWS STSを使ってみる

Last updated at Posted at 2020-02-29

STSとは...

AWS Security Token Serviceの略称で、一時的な認証情報を発行。
認証情報として、「アクセスキー」、「シークレットキー」、「セッショントークン」の3つが発行されるが、
あくまで期限付きで一時的に権限を付与する用途で用いられる。

STSで権限付与を行うためには、以下IAMユーザとIAMロールが必要になる。
これらはお互いに同じアカウントに所属していても、違うアカウントに所属していても良い。

  1. 権限を引き受けるIAMユーザ
  2. 付与する権限の塊であるIAMロール

また、それぞれが下記のポリシー/信頼関係を持つ必要がある。(ロールには、実際にユーザが使いたい権限(EC2操作など)も付与)

既存の下記ポリシーをAssume RoleするIAMユーザへ追加する

1.権限を引き受けるIAMユーザに付与するポリシー
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "sts:AssumeRole"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:iam::<アカウントID>:role/<Assume RoleするIAMロール名>"
            ]
        }
    ]
}

ロール作成時に「信頼関係」を編集。IAMユーザからのAssume Roleを引き受けるために信頼関係を定義

2.付与する権限の塊であるIAMロールに付与する信頼関係
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::<アカウントID>:user/<Assume Role実行するIAMユーザ名>"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

ロールがユーザに権限を付与する最大制限時間はロールの下記の部分から指定可能である。 (1時間〜12時間まで)。
後続の②のduration-secondではこの時間の範囲内で時間指定可能。
Screen Shot 2020-02-29 at 11.58.14.png

この状態でSTSが下記のユースケースで可能。

①IAMユーザでAWSコンソールログイン状態でスイッチロールが可能

Screen Shot 2020-02-29 at 12.35.21.png

②IAMユーザのクレデンシャル情報をセットしたEC2などでAsuume Roleを実行してAWS CLI/SDKで利用

AssumeRole実行前
# aws ec2 describe-instances

An error occurred (UnauthorizedOperation) when calling the DescribeInstances operation: You are not authorized to perform this operation.
AssumeRole実行
# aws sts assume-role \
>   --role-arn          arn:aws:iam::<アカウントID>:role/sts_role \
>   --role-session-name sts-session \
>   --duration-second   900 \
>   --profile          default

{
    "AssumedRoleUser": {
        "AssumedRoleId": "xxxxxxxxxxxxxx:sts-session", 
        "Arn": "arn:aws:sts::<アカウントID>:assumed-role/sts_role/sts-session"
    }, 
    "Credentials": {
        "SecretAccessKey": "xxxxxxxxxxxxxxxxxxxx", 
        "SessionToken": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 
        "Expiration": "2020-02-29T03:29:34Z", 
        "AccessKeyId": "xxxxxxxxxxxxxxxxxxxx"
    }
}

AssumeRole実行後

# export AWS_ACCESS_KEY_ID="xxxxxxxxxxxxxxxxxxxx"
# export AWS_SECRET_ACCESS_KEY="xxxxxxxxxxxxxxxxxxxx"
# export AWS_SESSION_TOKEN="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
# aws ec2 describe-instances
→duration-secondで指定した期間は実行可能

→duration-secondで指定した期間外は実行不可能
「An error occurred (RequestExpired) when calling the DescribeInstances operation: Request has expired.」

19
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
13