ユーザー、グループ、ロールをIAM アイデンティティと呼びます。
IAM アイデンティティ (ユーザー、グループ、またはロール) に埋め込まれたポリシーです。つまり、ポリシーは本質的にアイデンティティの一部です。
※ ARNを持つポリシーをスタンドアロンポリシー
と呼びます。
ref. https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/access_policies_managed-vs-inline.html
IAMロールは、AWSのサービスやアプリケーションに対して、一時的なAWSリソースの操作権限を与える仕組みです。
この操作権限はAWS Security Token System(AWS STS)を利用し、一時的認証情報(Temporary Security Credential)を発行するこにより実現しています。
一時的認証情報の実態は、有効期限が短いアクセスキーとシークレットキー、セッショントークンです。
AWSサービスやアプリケーションは、受け取った一時的認証情報を使いS3やKMSといった対象のAWSリソースを利用します。-- 要点整理から攻略する AWS認定セキュリティ・専門知識
AssumeRolePolicyDocument
のPricipal
に記載する MyBucketRole:
Type: "AWS::IAM::Role"
Properties:
RoleName: MySampleBucketRole
AssumeRolePolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: "Allow"
Principal:
Service:
- "codepipeline.amazonaws.com"
Action:
- "sts:AssumeRole"
Path: /
Policies:
- PolicyName: "CodePipelineS3AccessPolicy"
PolicyDocument:
Version: "2012-10-17"
Statement:
- Action:
- s3:ListAllMyBuckets
Resource:
- "arn:aws:s3:::*"
- Action:
- s3:GetObject
- s3:PutObject
- s3:DeleteObject
Resource:
- arn:aws:s3:::my-sample-bucket-unique-name
※ my-sample-bucket-unique-name
のオブジェクトを操作するには、バケットを一覧表示するs3:ListAllMyBuckets
アクションが必要
my-sample-bucket-unique-name
に読み書き権限を許可するcodepipeline.amazonaws.com
サービスを信頼する(ロールを引き受けることができる)信頼関係(信頼ポリシー)はロールを利用できる対象を表す。
AssumeRolePolicyDocument The trust policy that is associated with this role. Trust policies define which entities can assume the role. You can associate only one trust policy with a role. For an example of a policy that can be used to assume a role, see Template Examples. For more information about the elements that you can use in an IAM policy, see IAM Policy Elements Reference in the IAM User Guide.
信頼関係(信頼ポリシー)
についてクロスアカウントロール(ユーザーからのみスイッチできるIAMロール
)を例に説明する。
AWSの薄い本 IAMのマニアックな話 p39
クロスアカウントロールのスイッチ元の制限はCondition(条件)
ではなくPrincipal(信頼関係)
を利用する。
アカウントAAAAAAAAAAA
のfooロールからアカウントBBBBBBBBBBB
のbarロールにスイッチロールする例。
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"sts:AssumeRole"
],
"Resource": [
"arn:aws:iam::BBBBBBBBBBB:role/bar"
],
"Effect": "Allow"
}
]
}
信頼関係
の例(JSON)
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:iam::AAAAAAAAAAA:role/foo"
},
"Action": "sts:AssumeRole",
}
]
}
アクセス権限AdministratorAccess
の例
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "*",
"Resource": "*"
}
]
}
ECSアプリケーションの信頼関係の例です。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": [
"ecs-tasks.amazonaws.com"
]
},
"Action": "sts:AssumeRole"
}
]
}
上記の信頼関係をCloudFormationdeで定義すると以下のようになります。 参考に許可も設定しています(anagedPolicyArns)。
AppRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: "Allow"
Principal:
Service:
- "ecs-tasks.amazonaws.com"
Action:
- "sts:AssumeRole"
Path: "/"
ManagedPolicyArns:
- arn:aws:iam::aws:policy/AmazonSQSFullAccess
- arn:aws:iam::aws:policy/CloudWatchLogsFullAccess
https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/reference_policies_elements_principal.html
バウンダリーは、IAMユーザーまたはIAMロールに対するアクセス制限として動作します。 付与した権限とBoundaryで許可した権限と重なる部分のみ有効な権限として動作します。
AWS Security Token Service (AWS STS) を使用して、AWS リソースへのアクセスをコントロールできる一時的セキュリティ認証情報を持つ、信頼されたユーザーを作成および提供することができます。一時的セキュリティ認証情報の機能は、IAM ユーザーが使用できる長期的なアクセスキー認証情報とほとんど同じですが、次の相違点があります。
https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_credentials_temp.html
ECSコンテナ内のアプリケーションがSQSにアクセスする場合を考える。
TaskRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: "Allow"
Principal:
Service:
- "ecs-tasks.amazonaws.com"
Action:
- "sts:AssumeRole"
Path: "/"
ManagedPolicyArns:
- arn:aws:iam::aws:policy/AmazonSQSFullAccess
- arn:aws:iam::aws:policy/CloudWatchLogsFullAccess
CloudFormation
のAWS::IAM:Role
はJSONポリシーを使って記載される。
principal
:主要な、認証の対象、当事者assume
:引き受けるsts
:AWS Security Token Service (AWS STS)