😸
AWS CLIでAWSリソースを操作する手順
前提条件
- IAMユーザーを作成済み
- アクセスキーとシークレットキーを作成済み
- MFA認証設定済み
- AWS CLIをインストール済み
手順
- aws configure を使用したクイック設定
- credentials および config ファイル確認
- credentials および config ファイル編集
- IAMロール作成
- IAMユーザー(グループ)にアタッチ
- STSで一時クレデンシャルを発行
- credentials および config ファイル編集
- 実践
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
参考
Discussion