AWS 资源 ARN 基本概念
- 引言
- [什么是 ARN](#什么是 ARN)
-
- [ARN 格式](#ARN 格式)
- [ARN 示例](#ARN 示例)
-
- [S3 存储桶](#S3 存储桶)
- [EC2 实例](#EC2 实例)
- [IAM 角色](#IAM 角色)
- [Lambda 函数](#Lambda 函数)
- [ARN 用途](#ARN 用途)
- [ARN 权限管理](#ARN 权限管理)
-
- [IAM 策略结构](#IAM 策略结构)
- [IAM 策略示例](#IAM 策略示例)
-
- [允许访问特定 S3 存储桶](#允许访问特定 S3 存储桶)
- [允许启动和停止特定 EC2 实例](#允许启动和停止特定 EC2 实例)
- [允许访问特定 DynamoDB 表](#允许访问特定 DynamoDB 表)
- 通配符
- [ARN 资源引用](#ARN 资源引用)
-
- [IAM 策略中的资源引用](#IAM 策略中的资源引用)
- [AWS CLI 和 SDK 中的资源引用](#AWS CLI 和 SDK 中的资源引用)
- [CloudFormation 模板中的资源引用](#CloudFormation 模板中的资源引用)
- [Lambda 函数中的资源引用](#Lambda 函数中的资源引用)
- [CloudWatch 事件中的资源引用](#CloudWatch 事件中的资源引用)
引言
前面 《AWS IAM 基本概念》了解了 AWS 身份和访问管理,是该了解 AWS 资源了,AWS 怎么控制访问资源
什么是 ARN
AWS ARN(Amazon Resource Name)是用于唯一标识 AWS 资源的字符串。ARN 在 AWS 中广泛使用,用于指定资源的权限、配置和管理。每个 ARN 都遵循特定的格式,包含有关资源类型、区域、账户和资源名称的信息。
ARN 格式
ARN 的通用格式如下:
arn:partition:service:region:account-id:resource
- arn:固定的前缀,表示这是一个 ARN。
- partition:AWS 的分区,例如 aws(用于大多数 AWS 区域)、aws-cn(用于中国区域)、aws-us-gov(用于美国政府区域)。
- service:资源所属的 AWS 服务,例如 s3、ec2、iam。
- region:资源所在的区域,例如 us-west-2、eu-central-1。某些全球性资源(如 IAM 资源)没有区域部分。
- account-id:AWS 账户 ID,通常是 12 位数字。
- resource:资源标识符,格式因服务而异。
ARN 示例
以下是一些常见的 ARN 示例:
S3 存储桶
arn:aws:s3:::my-bucket
partition:aws
service:s3
region:无(S3 是全球服务)
account-id:无
resource:my-bucket
EC2 实例
arn:aws:ec2:us-west-2:123456789012:instance/i-0abcd1234efgh5678
partition:aws
service:ec2
region:us-west-2
account-id:123456789012
resource:instance/i-0abcd1234efgh5678
IAM 角色
arn:aws:iam::123456789012:role/MyRole
partition:aws
service:iam
region:无(IAM 是全球服务)
account-id:123456789012
resource:role/MyRole
Lambda 函数
arn:aws:lambda:us-east-1:123456789012:function:MyFunction
partition:aws
service:lambda
region:us-east-1
account-id:123456789012
resource:function:MyFunction
ARN 用途
ARN 在 AWS 中有多种用途,包括但不限于:
- 权限管理:在 IAM 策略中指定资源的权限。
- 资源引用:在 CloudFormation 模板、CLI 命令和 API 调用中引用特定资源。
- 日志和监控:在 CloudTrail 日志和 CloudWatch 事件中标识资源。
通过使用 ARN,AWS 可以确保每个资源在全球范围内都是唯一的,并且可以被精确地引用和管理。
ARN 权限管理
在 AWS 中,ARN(Amazon Resource Name)在权限管理中起着关键作用。通过使用 ARN,可以在 IAM 策略中精确地指定哪些资源可以被访问,以及可以执行哪些操作。以下是关于如何使用 ARN 进行权限管理的详细说明。
IAM 策略结构
IAM 策略是一个 JSON 文档,定义了允许或拒绝的操作。其基本结构如下:
json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow" | "Deny",
"Action": "service:operation",
"Resource": "arn:aws:service:region:account-id:resource"
}
]
}
关键字段
- Version:指定策略语言的版本。常用版本是 2012-10-17。
- Statement:包含一个或多个权限声明。
- Effect:指定是允许(Allow)还是拒绝(Deny)操作。
- Action:指定允许或拒绝的操作,例如 s3:ListBucket、ec2:StartInstances。
- Resource:指定操作作用的资源,使用 ARN 格式。
IAM 策略示例
以下是一些使用 ARN 进行权限管理的示例:
允许访问特定 S3 存储桶
- Action:允许 s3:GetObject 和 s3:PutObject 操作。
- Resource:指定 my-bucket 存储桶中的所有对象。
json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject"
],
"Resource": "arn:aws:s3:::my-bucket/*"
}
]
}
允许启动和停止特定 EC2 实例
- Action:允许 ec2:StartInstances 和 ec2:StopInstances 操作。
- Resource:指定特定的 EC2 实例。
json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:StartInstances",
"ec2:StopInstances"
],
"Resource": "arn:aws:ec2:us-west-2:123456789012:instance/i-0abcd1234efgh5678"
}
]
}
允许访问特定 DynamoDB 表
- Action:允许 dynamodb:PutItem 和 dynamodb:GetItem 操作。
- Resource:指定特定的 DynamoDB 表。
json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"dynamodb:PutItem",
"dynamodb:GetItem"
],
"Resource": "arn:aws:dynamodb:us-east-1:123456789012:table/MyTable"
}
]
}
在 AWS 中,ARN(Amazon Resource Name)在权限管理中起着关键作用。通过使用 ARN,可以在 IAM 策略中精确地指定哪些资源可以被访问,以及可以执行哪些操作。以下是关于如何使用 ARN 进行权限管理的详细说明。
通配符
在 ARN 中,可以使用通配符 *
来匹配多个资源。例如:
arn:aws:s3:::my-bucket/*
:匹配my-bucket
存储桶中的所有对象。arn:aws:ec2:us-west-2:123456789012:instance/*
:匹配特定账户和区域中的所有 EC2 实例。
ARN 资源引用
在 AWS 中,ARN(Amazon Resource Name)用于唯一标识资源,并在各种服务和操作中引用这些资源。以下是一些常见的 ARN 资源引用场景和示例。
IAM 策略中的资源引用
在 IAM 策略中,可以使用 ARN 来指定哪些资源可以被访问。如上面 ARN 权限管理中的示例
AWS CLI 和 SDK 中的资源引用
在使用 AWS CLI 或 SDK 时,可以使用 ARN 来指定操作的目标资源。
示例:使用 AWS CLI 启动 EC2 实例
bash
aws ec2 start-instances --instance-ids arn:aws:ec2:us-west-2:123456789012:instance/i-0abcd1234efgh5678
CloudFormation 模板中的资源引用
在 AWS CloudFormation 模板中,可以使用 ARN 来引用资源。
示例:引用 IAM 角色
json
Resources:
MyInstanceProfile:
Type: "AWS::IAM::InstanceProfile"
Properties:
Roles:
- arn:aws:iam::123456789012:role/MyRole
Lambda 函数中的资源引用
在 AWS Lambda 函数中,可以使用 ARN 来指定触发器或目标资源。
示例:Lambda 函数触发 S3 事件
json
{
"Type": "AWS::Lambda::Permission",
"Properties": {
"Action": "lambda:InvokeFunction",
"FunctionName": "arn:aws:lambda:us-east-1:123456789012:function:MyFunction",
"Principal": "s3.amazonaws.com",
"SourceArn": "arn:aws:s3:::my-bucket"
}
}
CloudWatch 事件中的资源引用
在 Amazon CloudWatch 事件中,可以使用 ARN 来指定事件目标。
示例:CloudWatch 事件触发 Lambda 函数
json
{
"Type": "AWS::Events::Rule",
"Properties": {
"EventPattern": {
"source": [
"aws.ec2"
],
"detail-type": [
"EC2 Instance State-change Notification"
],
"detail": {
"state": [
"running"
]
}
},
"Targets": [
{
"Arn": "arn:aws:lambda:us-east-1:123456789012:function:MyFunction",
"Id": "MyFunctionTarget"
}
]
}
}