😸

AWS CLIでAWSリソースを操作する手順

2022/10/07に公開

前提条件

  • IAMユーザーを作成済み
  • アクセスキーとシークレットキーを作成済み
  • MFA認証設定済み
  • AWS CLIをインストール済み

手順

  1. aws configure を使用したクイック設定
  2. credentials および config ファイル確認
  3. credentials および config ファイル編集
  4. IAMロール作成
  5. IAMユーザー(グループ)にアタッチ
  6. STSで一時クレデンシャルを発行
  7. credentials および config ファイル編集
  8. 実践

1.aws configure を使用したクイック設定

$ aws configure
AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE
AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
Default region name [None]: ap-northeast-1
Default output format [None]: json

2.credentials および config ファイル確認

.aws/credentialsファイル

[default]
aws_access_key_id = AKIAIOSFODNN7EXAMPLE
aws_secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

.aws/configファイル

[default]
region = ap-northeast-1
output = json

3.credentials および config ファイル編集

.aws/credentialsファイル

[default]
aws_access_key_id = AKIAIOSFODNN7EXAMPLE
aws_secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

[handsonrole]
aws_access_key_id = 
aws_secret_access_key = 
aws_session_token = 

.aws/configファイル

[default]
region = ap-northeast-1
output = json

[handsonrole]
region = ap-northeast-1
output = json

4.IAMロール作成

権限:(任意)AmazonS3FullAccess

信頼関係

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:root"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "BoolIfExists": {
                    "aws:MultiFactorAuthPresent": "true"
                }
            }
        }
    ]
}

※"arn:aws:iam::123456789012:root"
スイッチできるユーザーを限定的にするほうがよい

5.IAMユーザー(グループ)にアタッチ

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowIndividualUserToManageTheirOwnMFA",
            "Effect": "Allow",
            "Action": [
                "iam:CreateVirtualMFADevice",
                "iam:DeleteVirtualMFADevice",
                "iam:DeactivateMFADevice",
                "iam:EnableMFADevice",
                "iam:ResyncMFADevice",
                "iam:ListMFADevices"
            ],
            "Resource": [
                "arn:aws:iam::*:mfa/${aws:username}",
                "arn:aws:iam::*:user/${aws:username}",
                "arn:aws:iam::*:role/*"
            ]
        },
        {
            "Sid": "BlockMostAccessUnlessSignedInWithMFA",
            "Effect": "Deny",
            "NotAction": [
                "iam:CreateVirtualMFADevice",
                "iam:DeleteVirtualMFADevice",
                "iam:DeactivateMFADevice",
                "iam:EnableMFADevice",
                "iam:ResyncMFADevice",
                "iam:ListMFADevices"
            ],
            "Resource": "*",
            "Condition": {
                "BoolIfExists": {
                    "aws:MultiFactorAuthPresent": "false"
                }
            }
        },
        {
            "Sid": "AllowAssumeRole",
            "Effect": "Allow",
            "Action": [
                "sts:AssumeRole"
            ],
            "Resource": [
                "arn:aws:iam::*:role/*"
            ],
            "Condition": {
                "BoolIfExists": {
                    "aws:MultiFactorAuthPresent": "true"
                }
            }
        }
    ]
}

6.STSで一時クレデンシャルを発行

$ aws sts assume-role \
  --role-arn          arn:aws:iam::xxxxxxxxxxxx:role/xxxxxxxxxxxx \
  --role-session-name foo-bar-session \
  --duration-second   900 \
  --profile           foo-bar \
  --serial-number     arn:aws:iam::xxxxxxxxxxxx:mfa/xxxxxxxxxxxx \ # MFAデバイスのARN
  --token-code        123456 # MFAで発行される6桁のトークン
  
  
{
    "Credentials": {
        "AccessKeyId": "hogehogehogehoge",
        "SecretAccessKey": "fugafugafugafuga",
        "SessionToken": "aaaaaaaaaaaaaaaa.........aaaaaaaaaaaa",
        "Expiration": "2020-02-29T00:39:59Z"
    }
}

7.credentials および config ファイル編集

.aws/credentialsファイル

[default]
aws_access_key_id = AKIAIOSFODNN7EXAMPLE
aws_secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

[handsonrole]
aws_access_key_id = hogehogehogehoge
aws_secret_access_key = fugafugafugafuga
aws_session_token = aaaaaaaaaaaaaaaa.........aaaaaaaaaaaa

8.実践

$ aws s3 mb s3://<bucket-name> --profile handsonrole

参考

https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-configure-quickstart.html
https://dev.classmethod.jp/articles/forced_mfa/
https://dev.classmethod.jp/articles/sts-temporality-credential/
https://aws.amazon.com/jp/premiumsupport/knowledge-center/authenticate-mfa-cli/

Discussion