Skip to content

Latest commit

 

History

History
188 lines (155 loc) · 8.16 KB

File metadata and controls

188 lines (155 loc) · 8.16 KB

AWS

AWS IAM

AWS 命令行配置

以下三种方式选一即可:

  1. 命令行选项
$ aws configure
AWS Access Key ID [None]: Your AWS Access Key ID
AWS Secret Access Key [None]: Your AWS Access Secret Key
Default region name [None]: us-west-2
Default output format [None]: json
  1. 环境变量
$ export AWS_ACCESS_KEY_ID=Your AWS Access Key ID
$ export AWS_SECRET_ACCESS_KEY=Your AWS Access Secret Key
$ export AWS_DEFAULT_REGION=us-west-2
  1. 使用credentials文件:
[default]
aws_access_key_id=Your AWS Access Key ID
aws_secret_access_key=Your AWS Access Secret Key

AWS 编程

获取AWS的Client的工具类示例代码,该示例代码支持读取机器本地的credential文件以及AWS_ACCESS_KEY_ID两种方式进行认证。

EC2

  • 列出us-west-1中的所有EC2的名称和公有IP:
    aws ec2 describe-instances --query 'Reservations[*].Instances[*].[Tags[?Key==`Name`].Value,PublicIpAddress]' --region us-west-1 --output text
    
  • 列出us-west-1中的所有EC2的名称、公有IP、私有IP以及Access Key:
    $ aws ec2 describe-instances --query 'Reservations[*].Instances[*].[Tags[?Key==`Name`].Value,PublicIpAddress,PrivateIpAddress,KeyName]' --region us-west-1 --output table
    

使用aws cli命令行工具批量添加/删除安全组inbound列表

  • 使用的命令: aws ec2 describe-security-groups, authorize-security-group-ingress, revoke-security-group-ingress

  • 示例脚本

    #!/bin/bash
    
    case $1 in
    	"ap-southeast-1")
    		REGION="ap-southeast-1"
    		;;
    	*)
    		REGION="us-west-1"
    		;;
    esac
    
    echo "region:$REGION"
    
    SGLIST=$(aws ec2 describe-security-groups --query 'SecurityGroups[*].{ID:GroupId}' --region $REGION --output text)
    MYIP=$(curl -XGET "http://checkip.amazonaws.com")
    MYCIDR=${MYIP}/32
    echo "my CIDR: $MYCIDR"
    
    for SG in $SGLIST
    do
    	echo "add ssh for $SG,$MYCIDR,$REGION"
    	aws ec2 authorize-security-group-ingress --group-id $SG --protocol tcp --port 22 --cidr $MYCIDR --region $REGION
    # 	aws ec2 revoke-security-group-ingress --group-id $SG --protocol tcp --port 22 --cidr $MYCIDR --region $REGION
    done

使用ec2.py获取EC2列表

  • 1.下载ec2.py文件和ec2.ini文件,下载后将其放入同一个目录中

  • 2.配置aws,可以使用上面配置中的第一种方式

  • 3.安装python-pip

    wxd@wangxiaodong:~/main/hpbridge$ sudo apt install python-pip
    
  • 4.安装boto

    wxd@wangxiaodong:~/main/hpbridge$ pip install boto
    
  • 5.执行命令获取EC2列表,该命令可能需要等较长的时间才会返回,因为输出的内容较多

    wxd@wangxiaodong:/etc/ansible$ ./ec2.py --help
    usage: ec2.py [-h] [--list] [--host HOST] [--refresh-cache]
                  [--profile BOTO_PROFILE]
    
    Produce an Ansible Inventory file based on EC2
    
    optional arguments:
      -h, --help            show this help message and exit
      --list                List instances (default: True)
      --host HOST           Get all the variables about a specific instance
      --refresh-cache       Force refresh of cache by making API requests to EC2
                            (default: False - use cache files)
      --profile BOTO_PROFILE, --boto-profile BOTO_PROFILE
                            Use boto profile for connections to EC2
    wxd@wangxiaodong:/etc/ansible$ ./ec2.py --list
    
  • 6.可以编辑ec2.ini文件来过滤EC2,例如:

    # Retrieve only instances with (key=value) env=staging tag
    # instance_filters = tag:env=staging
    
    # Retrieve only instances with role=webservers OR role=dbservers tag
    # instance_filters = tag:role=webservers,tag:role=dbservers
    
    # Retrieve only t1.micro instances OR instances with tag env=staging
    # instance_filters = instance-type=t1.micro,tag:env=staging
    
    #instance_filters = key-name=dev-test-cfn
    #instance_filters = key-name=cloud-pie
    instance_filters = key-name=access-sgp
    
  • 7.编辑ec2.ini文件,过滤没有使用的region,否则ec2.py执行的时候会check所有的region,会导致执行时间特别长:

    #regions = all 
    regions = us-west-1,ap-southeast-1
    
    #rds = False
    #elasticache = False
    cache_max_age = 60
    

    以上修改将regions指定到us-west-1和ap-southeast-1两个region;注释掉rds和elasticache,表示不check这两种实例;另外将缓存时间设置为1分钟

  • 8.通过命令行添加ssh入站允许:

    aws ec2 describe-security-groups
    aws ec2 authorize-security-group-ingress --group-id sg-5da90d3b --protocol tcp --port 22 --cidr 106.87.20.57/32
    aws ec2 authorize-security-group-ingress --group-name wxd-sg-tky-1 --protocol all --port all --cidr 27.11.103.80/32 --region ap-northeast-1
    

    首先查看要修改的安全组ID,然后复制到authorize-security-group-ingress

VPC AZ Subnet CIDR

  • CIDR:前缀IP必须是子网的最小IP,否则就是一个无效CIDR
    有效: 10.0.0.0/24,无效:10.0.0.11/24 有效: 10.0.0.192/26,无效:10.0.0.196/26 计算的最小IP:2(8-x) * n;n为第n个子网,x是CIDR中落在网络段中的模
  • 10.0.1.0/23 包括 10.0.0.0/24 10.0.1.0/23 00001100.00000000.00000001.00000000 起始IP:10.0.1.0 11111111.11111111.11111110.00000000 子网掩码255.255.254.0 10.0.3.0/23 10.0.1.193/26 Must be a valid CIDR block. Did you mean 10.0.1.192/26?
  • 同一个AZ中的主机间的ping速率为0.4ms; 不同AZ中的主机间的ping速率为1.2ms
  • EC2之间无法ping通的原因通常是安全组中没有设置ICMP的入栈规则,因为ping命令使用的是ICMP协议
  • VPC相关笔记

AWS 一般参考

AWS 安全凭证

AWS代理主机迁移

  1. 创建新的AWS账户
  2. 登录老的AWS用户,进入EC2服务,选中需要迁移的主机,然后创建一个映像,创建好后将映像分享给新账户的ID
  3. 登录新的AWS账户,进入EC2服务,点击“启动”,创建一个新的云主机,启动时选择我的映像,选择老的AWS账户分享的映像
  4. 创建一个新的安全组,设置安全组名称为“sg_proxy”(使用该名称可以不用修改后续脚本),将新创建的EC2主机关联到该安全组(进入EC2列表,选中EC2, 然后操作/联网/安全组)
  5. 进入新账号的IAM服务,创建一个admin帐号,并赋予管理员权限,创建帐号时会选择所属组(直接在该步的页面中创建一个管理员组,选择AdministratorAccess权限策略),然后生成Access Key和Secret并下载csv文件
  6. 将新下载的Access Key文件中的Access ID更新到~/.aws目录下的credentials文件中
  7. 测试新账号是否已生效,在命令行中执行list_proxy(配置在~/.bash_profile中配置好的命令),查看输出结果是否正常