Serverless Stack 2-设置AWS账户
Create an AWS Account
https://serverless-stack.com/chapters/create-an-aws-account.html
首先,登录 AWS homepage 新建账户。
然后,配置账户以便使其用户本指南的其他部分。
# Create an IAM User
Amazon IAM (Identity and Access Management) 可以管理 AWS 的用户及其权限。可以在一个 AWS 账户下创建一个或多个 IAM 用户,我们可以为访问终端的人创建一个 IAM 用户,或者当您有一个需要 AWS 进行 API 调用的新应用程序时。这是为我们的 AWS 提供一个额外的安全层。
现在,我们来创建 IAM 账户。
Create User
- 登录 AWS Console ,从中选择 IAM 服务。
IAM -
选择用户 Users
choose users -
添加用户
add user - 输入用户名 scratch,并选中编程访问(Programmatic access),我们的 AWS CLI 和 Serverless Framework 将使用该账户。他们将直接连接到 AWS API,并且不会使用管理控制台。
scratch - 选择直接附加现有策略(Attach existing policies directly)
policies - 找到 AdministratorAccess 并选择它,然后点击“下一步:审核”。
我们可以在这里提供更加细化的策略,稍后我们将在 Customize the Serverless IAM Policy 章节中介绍。但现在,我们继续下一步。
AdministratorAccess - 选择创建用户。
add user - 选择显示按钮,以显示私有访问密钥
secret access key - 记录下访问密钥ID和私有访问密钥,我们稍后要用到它们。
note of the two ID
使用AWS服务时,IAM的概念非常频繁地出现。因此,我们应该更好地了解IAM是什么以及它如何帮助我们确保无服务器安装。
What is IAM
上一节,我们创建了 IAM 用户,使得我们不需要使用 AWS Console 来操作我们的 AWS CLI。但是,在处理 AWS 服务的安全性时,IAM 的概念是如此频繁地被提及,因此值得更详细的了解它。不幸的是,IAM 由很多不同部分组成,从而对首次使用者造成困扰。这一节,我们来详细了解以下 IAM。
官方是这样定义 IAM 的:
AWS Identity and Access Management(IAM)是一项Web服务,可帮助您安全地控制用户对AWS资源的访问。您使用IAM来控制谁可以使用您的AWS资源(身份验证)以及他们可以使用哪些资源以及以何种方式(授权)。
What is an IAM User
当您第一次创建 AWS 账户时,您是 root 用户。您用于创建帐户的电子邮件地址和密码称为您的根帐户凭据。您可以使用它们登录AWS管理控制台。当您这样做时,您可以完全无限制地访问您的AWS账户中的所有资源,包括访问您的账单信息以及更改密码的能力。
如果是自己在使用 AWS,那么没什么问题。但是如果其他人想访问和管理你的 AWS 账户时,你又不想公开跟证书。相反,你得创建一个 IAM 用户。
IAM 用户由名称,登录 AWS 管理控制台的密码以及最多两个可与 API 或 CLI 配合使用的访问密钥组成。
默认情况下,不能访问账户里的任何内容。您通过创建策略并将策略附加到用户来授予用户权限。您可以授予这些策略中的一个或多个来限制用户可以访问和无法访问的内容。
What is an IAM Policy?
IAM 策略是定义是否允许在 AWS 资源上执行操作的一个或者一组规则。
策略可以通过多种方式授予:
- 附加托管策略。AWS 提供预定义策略列表,如 AmazonS3ReadOnlyAccess。
- 附加内联策略。内联策略是手动创建的自定义策略。
- 将用户添加到具有相应权限策略的组。我们将在下面详细讨论组。
- 克隆现有IAM用户的权限。
作为一个例子,这是一个将所有操作授予所有S3存储桶(S3 buckets)的策略。
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Action": "s3:*",
"Resource": "*"
}
}
这是一个授予更细粒度访问权限的策略,只允许检索由Bobs-
名为字符串前缀的文件Hello-bucket
。
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Action": ["s3:GetObject"],
"Resource": "arn:aws:s3:::Hello-bucket/*",
"Condition": {"StringEquals": {"s3:prefix": "Bobs-"}}
}
在上面的例子中我们使用了 S3 资源。但是对于任何 AWS 服务,策略都很相似。它只取决于资源ARN的Resource
财产。ARN是AWS中资源的标识符,我们将在下一章详细介绍它。我们还添加相应的服务操作和条件上下文关键字Action
和Condition
属性。您可以在此处查找用于IAM策略的所有可用AWS服务操作和条件上下文密钥。除了将策略附加到用户之外,您可以将它们附加到角色或组。
What is an IAM Role
有时您的AWS资源需要访问您帐户中的其他资源。例如,您有一个Lambda函数,用于查询DynamoDB以检索某些数据,对其进行处理,然后向Bob发送包含结果的电子邮件。在这种情况下,我们希望Lambda只能够进行读取查询,因此它不会错误地更改数据库。我们还希望限制Lambda能够通过电子邮件发送电子邮件,使其不会向其他人发送垃圾邮件。这可以通过创建IAM用户并将用户的凭证放入Lambda函数或将凭证嵌入Lambda代码中来完成。但这只是不安全。如果有人要获得这些凭据,他们可以代表您发出这些电话。这就是IAM角色扮演的角色。
IAM角色与用户非常相似,因为它是具有权限策略的身份,用于确定身份在AWS中可以做什么和不可以做什么。但是,角色没有任何与其关联的凭证(密码或访问密钥)。任何需要它的人都可以承担一个角色,而不是与一个人有唯一的联系。在这种情况下,Lambda函数将被分配一个角色以临时接受权限。
角色也可以应用于用户。在这种情况下,用户正在采取为IAM角色设置的策略。这对于用户在组织中戴多个“帽子”的情况很有用。角色使这很容易,因为你只需要创建一次这些角色,他们可以重新用于任何其他人想要采取它。
role
您还可以将角色绑定到来自其他组织的用户的ARN。这允许外部用户将该角色假定为组织的一部分。当您拥有在您的AWS组织上运作的第三方服务时,通常会使用此功能。系统会要求您创建一个跨账户IAM角色并将该外部用户添加为信任关系。该信任关系被告知指定的外部用户可以承担这个角色AWS。
role2
What is an IAM Group
IAM组仅仅是IAM用户的集合。您可以使用组为用户集合指定权限,这可以使这些用户的权限更容易管理。例如,您可以拥有一个名为Admins的组,并为该组提供管理员通常需要的权限类型。该组中的任何用户都会自动拥有分配给该组的权限。如果新用户加入您的组织并且应具有管理员权限,则可以通过将该用户添加到该组来分配适当的权限。同样,如果某人更换了组织中的工作,而不是编辑该用户的权限,则可以将其从旧组中删除,并将其添加到适当的新组中。
group
这应该让你快速了解IAM及其一些概念。我们将在接下来的章节中提到其中的一些内容。接下来让我们快速查看另一个AWS概念; ARN。
What is an ARN
Amazon Resource Names (ARN)唯一标识AWS资源。当您需要在整个AWS中明确指定资源时(例如IAM策略,Amazon关系数据库服务(Amazon RDS)标记和API调用),我们需要ARN。
ARN实际上只是个别AWS资源的全球唯一标识符。它采用以下格式之一:
arn:partition:service:region:account-id:resource
arn:partition:service:region:account-id:resourcetype/resource
arn:partition:service:region:account-id:resourcetype:resource
我们来看看ARN的一些例子。请注意使用的不同格式。
<!-- Elastic Beanstalk application version -->
arn:aws:elasticbeanstalk:us-east-1:123456789012:environment/My App/MyEnvironment
<!-- IAM user name -->
arn:aws:iam::123456789012:user/David
<!-- Amazon RDS instance used for tagging -->
arn:aws:rds:eu-west-1:123456789012:db:mysql-db
<!-- Object in an Amazon S3 bucket -->
arn:aws:s3:::my_corporate_bucket/exampleobject.png
最后,我们来看一些最常见的例子:
- 通讯
当您编排涉及多个AWS资源的系统时,ARN用于引用特定资源。例如,您有一个API网关侦听RESTful API并根据API路径和请求方法调用相应的Lambda函数。路由如下所示。
GET /hello_world => arn:aws:lambda:us-east-1:123456789012:function:lambda-hello-world
- IAM政策
我们在上一章已经详细讨论了这一点,但这是一个政策定义的例子。
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Action": ["s3:GetObject"],
"Resource": "arn:aws:s3:::Hello-bucket/*"
}
ARN用于定义访问被授予的资源(本例中是S3存储桶)。*这里使用通配符来匹配Hello-bucket内的所有资源。
接下来让我们配置我们的AWS CLI。我们将使用之前创建的IAM用户帐户中的信息。
Configure the AWS CLI
为了简单起见,我们使用 AWS CLI
Install the AWS CLI
AWS CLI 需要 python2.6.5+ 或者 python3.3+,以及 pip。
使用以下命令安装 AWS CLI
sudo apt-get install python3.6-dev
sudo pip install awscli
或者在 MacOS 上这样安装:
brew install awscli
Add Your Access Key to AWS CLI
我们现在需要告诉AWS CLI使用之前提供的访问密钥。
它应该看起来像这样:
访问密钥ID AKIAIOSFODNN7EXAMPLE
秘密访问密钥 wJalrXUtnFEMI / K7MDENG / bPxRfiCYEXAMPLEKEY
aws configure
您可以保留默认区域名称和默认输出格式。
接下来让我们开始设置我们的后端。