「Awscli」:修訂間差異
(未顯示同一使用者於中間所作的 16 次修訂) | |||
第4行: | 第4行: | ||
== 安裝 == | == 安裝 == | ||
可以透過pipx安裝,避免影響到目前環境內的套件: | 可以透過pipx安裝,避免影響到目前環境內的套件,目前官方建議用v2,但沒有上到[[PyPI]]: | ||
<syntaxhighlight lang="bash"> | |||
pipx install git+https://github.com/aws/aws-cli.git@v2 | |||
</syntaxhighlight> | |||
或是裝舊的v1: | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
第11行: | 第17行: | ||
== 常用指令 == | == 常用指令 == | ||
=== EC2 === | |||
分成兩段,先是設定的部分,可以針對不同的AWS帳號放到不同的檔案裡面用<code>source</code>拉出來執行: | |||
<syntaxhighlight lang="bash"> | |||
export AWS_PROFILE=default IMAGE_ID=ami-xxxxxxxxxxxxxxxxx INSTANCE_TYPE=t4g.small KEY_NAME=key-ed25519 NAME=test-100 PRIVATE_IP_ADDRESS=10.1.0.100 REGION=us-east-1 SECURITY_GROUP_IDS=sg-xxxxxxxxxxxxxxxxx SUBNET_ID=subnet-xxxxxxxxxxxxxxxxx | |||
</syntaxhighlight> | |||
以及實際執行的部分: | |||
<syntaxhighlight lang="bash"> | |||
aws ec2 run-instances \ | |||
--block-device-mappings "DeviceName=/dev/sda1,Ebs={VolumeType=gp3}" \ | |||
--credit-specification CpuCredits=standard \ | |||
--image-id "${IMAGE_ID}" \ | |||
--instance-type "${INSTANCE_TYPE}" \ | |||
--key-name "${KEY_NAME}" \ | |||
--network-interfaces "AssociatePublicIpAddress=true,DeviceIndex=0" \ | |||
--private-ip-address "${PRIVATE_IP_ADDRESS}" \ | |||
--region "${REGION}" \ | |||
--security-group-ids "${SECURITY_GROUP_IDS}" \ | |||
--subnet-id "${SUBNET_ID}" \ | |||
--tag-specifications "ResourceType=instance,Tags=[{Key=Name,Value=${NAME}}]" | |||
</syntaxhighlight> | |||
=== IAM === | === IAM === | ||
第43行: | 第74行: | ||
* 建立一個S3 bucket, | * 建立一個S3 bucket, | ||
* 建立對應的使用者(IAM), | * 建立對應的使用者(IAM), | ||
* 掛上權限, | * 掛上完整的權限, | ||
* 產生對應的key: | * 產生對應的key: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
BUCKET_NAME=gslin-test; aws s3 mb s3://${BUCKET_NAME}; aws iam create-user --user-name s3.${BUCKET_NAME}.full; aws iam put-user-policy --user-name s3.${BUCKET_NAME}.full --policy-name Policy-s3-${BUCKET_NAME}-full --policy-document '{"Version":"2012-10-17","Statement":[{"Action":["s3:*"],"Resource":"arn:aws:s3:::'${BUCKET_NAME}'/*","Effect":"Allow"}]}'; aws iam create-access-key --user-name s3.${BUCKET_NAME}.full | BUCKET_NAME=gslin-test; aws s3 mb s3://${BUCKET_NAME}; aws iam create-user --user-name s3.${BUCKET_NAME}.full; aws iam put-user-policy --user-name s3.${BUCKET_NAME}.full --policy-name Policy-s3-${BUCKET_NAME}-full --policy-document '{"Version":"2012-10-17","Statement":[{"Action":["s3:*"],"Resource":"arn:aws:s3:::'${BUCKET_NAME}'/*","Effect":"Allow"}]}'; aws iam create-access-key --user-name s3.${BUCKET_NAME}.full | ||
</syntaxhighlight> | |||
如果是只能讀取的話,這邊列出比較常見的操作(<code>"s3:GetObject","s3:HeadObject","s3:ListObjects","s3:ListObjectsV2"</code>這段): | |||
<syntaxhighlight lang="bash"> | |||
BUCKET_NAME=gslin-test; aws s3 mb s3://${BUCKET_NAME}; aws iam create-user --user-name s3.${BUCKET_NAME}.readonly; aws iam put-user-policy --user-name s3.${BUCKET_NAME}.readonly --policy-name Policy-s3-${BUCKET_NAME}-readonly --policy-document '{"Version":"2012-10-17","Statement":[{"Action":["s3:GetObject","s3:HeadObject","s3:ListObjects","s3:ListObjectsV2"],"Resource":"arn:aws:s3:::'${BUCKET_NAME}'/*","Effect":"Allow"}]}'; aws iam create-access-key --user-name s3.${BUCKET_NAME}.readonly | |||
</syntaxhighlight> | </syntaxhighlight> | ||
第53行: | 第90行: | ||
* {{Official|https://aws.amazon.com/cli/}} | * {{Official|https://aws.amazon.com/cli/}} | ||
[[Category:指令]] | |||
[[Category:軟體]] | [[Category:軟體]] |
於 2024年6月11日 (二) 21:08 的最新修訂
awscli是AWS官方提供的Command Line Interface(CLI)軟體。
安裝
可以透過pipx安裝,避免影響到目前環境內的套件,目前官方建議用v2,但沒有上到PyPI:
pipx install git+https://github.com/aws/aws-cli.git@v2
或是裝舊的v1:
pipx install awscli
常用指令
EC2
分成兩段,先是設定的部分,可以針對不同的AWS帳號放到不同的檔案裡面用source
拉出來執行:
export AWS_PROFILE=default IMAGE_ID=ami-xxxxxxxxxxxxxxxxx INSTANCE_TYPE=t4g.small KEY_NAME=key-ed25519 NAME=test-100 PRIVATE_IP_ADDRESS=10.1.0.100 REGION=us-east-1 SECURITY_GROUP_IDS=sg-xxxxxxxxxxxxxxxxx SUBNET_ID=subnet-xxxxxxxxxxxxxxxxx
以及實際執行的部分:
aws ec2 run-instances \
--block-device-mappings "DeviceName=/dev/sda1,Ebs={VolumeType=gp3}" \
--credit-specification CpuCredits=standard \
--image-id "${IMAGE_ID}" \
--instance-type "${INSTANCE_TYPE}" \
--key-name "${KEY_NAME}" \
--network-interfaces "AssociatePublicIpAddress=true,DeviceIndex=0" \
--private-ip-address "${PRIVATE_IP_ADDRESS}" \
--region "${REGION}" \
--security-group-ids "${SECURITY_GROUP_IDS}" \
--subnet-id "${SUBNET_ID}" \
--tag-specifications "ResourceType=instance,Tags=[{Key=Name,Value=${NAME}}]"
IAM
開管理員帳號(這邊是使用AWS內已經有的AdministratorAccess
):
aws iam create-user --user-name ${MY_AWS_USERNAME}
aws iam attach-user-policy --policy-arn arn:aws:iam::aws:policy/AdministratorAccess --user-name ${MY_AWS_USERNAME}
生出access key,一個帳號最多兩把。其中的AccessKeyId
與SecretAccessKey
就是需要的設定,要注意SecretAccessKey
之後不會再出現:
aws iam create-access-key --user-name ${MY_AWS_USERNAME}
超過兩把再呼叫會出現錯誤訊息:
An error occurred (LimitExceeded) when calling the CreateAccessKey operation: Cannot exceed quota for AccessKeysPerUser: 2
列出這個帳號所有的access key(只會有AccessKeyId
,不會有SecretAccessKey
):
aws iam list-access-keys --user-name ${MY_AWS_USERNAME}
S3
- 建立一個S3 bucket,
- 建立對應的使用者(IAM),
- 掛上完整的權限,
- 產生對應的key:
BUCKET_NAME=gslin-test; aws s3 mb s3://${BUCKET_NAME}; aws iam create-user --user-name s3.${BUCKET_NAME}.full; aws iam put-user-policy --user-name s3.${BUCKET_NAME}.full --policy-name Policy-s3-${BUCKET_NAME}-full --policy-document '{"Version":"2012-10-17","Statement":[{"Action":["s3:*"],"Resource":"arn:aws:s3:::'${BUCKET_NAME}'/*","Effect":"Allow"}]}'; aws iam create-access-key --user-name s3.${BUCKET_NAME}.full
如果是只能讀取的話,這邊列出比較常見的操作("s3:GetObject","s3:HeadObject","s3:ListObjects","s3:ListObjectsV2"
這段):
BUCKET_NAME=gslin-test; aws s3 mb s3://${BUCKET_NAME}; aws iam create-user --user-name s3.${BUCKET_NAME}.readonly; aws iam put-user-policy --user-name s3.${BUCKET_NAME}.readonly --policy-name Policy-s3-${BUCKET_NAME}-readonly --policy-document '{"Version":"2012-10-17","Statement":[{"Action":["s3:GetObject","s3:HeadObject","s3:ListObjects","s3:ListObjectsV2"],"Resource":"arn:aws:s3:::'${BUCKET_NAME}'/*","Effect":"Allow"}]}'; aws iam create-access-key --user-name s3.${BUCKET_NAME}.readonly