Access Advisor と Access Analyzer
最小権限の原則に関連する、名称が似た機能です。
Access Advisor
IAM 権限について、使用状況を確認できます。
Viewing last accessed information for IAM
Access Analyzer
アカウントまたは組織の外部に共有されているリソースを調査できます。CloudTrail ログから policy を生成したり、IAM Policy の文法エラーをチェックする機能も提供します。
NotAction と Deny
Effect: Deny
に指定した Action を、後から Allow し直すことはできません。
このような場合は、Effect: Allow
と NotAction
を組み合わせます。まず、NotAction に指定されていない Action すべてに Allow が適用されます。次に、Effect: Allow
と Action
を指定することで、NotAction に含まれる Action の一部に Allow を適用できます。
注意: iam:*
以外の Action も Allow されています。
Policies Conditions
- 複数の value を返す key に対しては ForAllValues または ForAnyValue を適用します。
aws:TagKeys
で tag の存在確認。aws:RequestTag
で tag の値を確認。
- Null Condition や Bool Condition について。
- XxxIfExists で指定された key が存在しない場合、その key に関する評価は true となります。
Permissions boundaries
IAM role または IAM user に設定します。IAM group には設定できません。
IAM role または IAM user が持つことができる権限に制限を設けるための仕組みです。
Permissions boundaries for IAM entities
AdministratorAccess
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "*",
"Resource": "*"
}
]
}
Permissions boundary として、mytest20220710 IAM policy を設定してみます。S3 の API 以外を Allow しています。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"NotAction": [
"s3:*"
],
"Resource": "*"
}
]
}
S3 API は Access Denied で失敗します。
vagrant@debian11:~$ aws s3 ls
An error occurred (AccessDenied) when calling the ListBuckets operation: Access Denied
vagrant@debian11:~$ aws s3 ls s3://mytest20220710
An error occurred (AccessDenied) when calling the ListObjectsV2 operation: Access Denied
ただし Resource Based policy を設定すると、一部の API は成功するようになります。
S3 バケットポリシー
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::123412341234:user/test20220710"
},
"Action": "*",
"Resource": [
"arn:aws:s3:::mytest20220710",
"arn:aws:s3:::mytest20220710/*"
]
}
]
}
実行例
vagrant@debian11:~$ aws s3 ls s3://mytest20220710 && echo ok
ok
上記ベン図は、以下の評価ルールが適用された結果です。
- Resource-based policy は permissions boundaries よりも先に評価されるため、Resource-based policy で Allow されている場合は、permissions boundaries によらず Allow 判定となります。
- Resource-based policy は Organization SCP よりも後に評価されるため、Organization SCP で Allow されていないと Resource-based policy によらず Deny 判定となります。
注意: 別の AWS アカウントからのアクセスが Allow されるためには、別の AWS アカウント側でも Allow 判定となる必要があります。Cross-account policy evaluation logic
STS (Security Token Service)
API エンドポイント
https://sts.amazonaws.com
得られた情報は以下のように利用できます。
export AWS_ACCESS_KEY_ID=ASIAIOSFODNN7EXAMPLE
export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
export AWS_SESSION_TOKEN=AQoDYXdzEJr...<remainder of session token>
GetSessionToken API
IAM user の session を作成します。主な用途は、AWS API 実行時に MFA が必須となる場合です。session 発行時に MFA の情報を与えることで、MFA 認証が完了した session を作成できます。
aws sts get-session-token \
--serial-number "YourMFADeviceSerialNumber" \
--token-code 123456
- How do I use an MFA token to authenticate access to my AWS resources through the AWS CLI?
- How can I require MFA authentication for IAM users that use the AWS CLI?
MFA を持つ session の例
MFA が完了していないと sts:GetSessionToken
以外すべて Deny される policy を IAM user に設定する例です。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "*",
"Resource": "*"
},
{
"Effect": "Deny",
"NotAction": [
"sts:GetSessionToken"
],
"Resource": "*",
"Condition": {
"BoolIfExists": {
"aws:MultiFactorAuthPresent": "false",
"aws:ViaAWSService": "false"
}
}
}
]
}
AssumeRole API
IAM role の session を作成します。session 発行時に MFA の情報を与えることで、MFA 認証が完了した session を作成できます。
MFA を持つ session の例
MFA が完了していないと Assume できない Trust relationships を持つ role を作成する例です。
また、AssumeRole の合言葉のように機能する sts:ExternalId
を設定する例です。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::123412341234:root"
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"sts:ExternalId": "testtest"
},
"Bool": {
"aws:MultiFactorAuthPresent": "true"
}
}
}
]
}
注意: 上記 root は authenticated and authorized principals in the account を意味します。
AssumeRole で STS トークンを発行する例
aws sts assume-role \
--role-arn arn:aws:iam::123412341234:role/myrole20220712 \
--role-session-name mysession \
--external-id testtest \
--serial-number arn:aws:iam::123412341234:mfa/myuser \
--token-code 123456
STS トークンを利用する例
AWS_ACCESS_KEY_ID="ASIA3JUBRISFQ67ZBL5Y" \
AWS_SECRET_ACCESS_KEY="lV6JbMYBGqb3PFnbWmrh+GV1P5QkK4k9fWtBifC1" \
AWS_SESSION_TOKEN="xxxxxx" \
aws sts get-caller-identity
{
"UserId": "AROA3JUBRISFXZSIQ7UZB:mysession",
"Account": "123412341234",
"Arn": "arn:aws:sts::123412341234:assumed-role/myrole20220712/mysession"
}
AWS Organizations
AWS Organizations terminology and concepts
- management account は payer account ともよばれます。
- member account の請求がすべて集約されます。Volume discounts による割引を受けやすくなります。
- SCP は member account の IAM user と IAM role だけでなく root user の権限も制限します。
- root user の権限を剥奪しておくことで、root user の credential 漏洩に備えることができます。Block service access for root user
- management account は SCP の影響を受けません。
- service-linked role は SCP の影響を受けません。
- AWS サービスの初回利用時に自動で作成されるロールです。
- CloudFormation や Terraform が初回実行時にだけ失敗する原因となり得ります。
- 上記評価ルールに記載のとおり、SCP では明示的な Allow が存在しなければ Deny 判定となります。
- member account に対して
organizations:LeaveOrganization
Action を Deny する SCP を設定できます。Best Practices for AWS Organizations Service Control Policies in a Multi-Account Environment OrganizationAccountAccessRole
は AWS Organizations で member account を新規作成した際に自動で作成されるロールです。- 外部の account を invite して member account にした場合は、自動では作成されません。
SCP を含め、Organization 内の policy は CLI または以下のコンソール画面から設定します。
- Backup policies
- AWS Backup を組織内の account に提供するための policy です。
- AI services opt-out policies
- AI サービス (例: Amazon Comprehend) を利用する際のデータが訓練データとして利用されることを optout できます。
- Tag policies
- 組織内 tag を標準化するための policy です。
Active Directory (AD) Connector
- AWS Managed Microsoft AD
- Simple Active Directory
- AD 互換の AWS 管理 directory です。
- オンプレミスの AD 接続はできません。
- Active Directory Connector
- オンプレミスの AD にプロキシするためのサービスです。
AWS SSO
AWS IAM Identity Center
2022/7/26 頃から、AWS SSO の正式名称が AWS IAM Identity Center に変更されました。基本的な機能に変更はありません。
AWS Single Sign-On (AWS SSO) is now AWS IAM Identity Center
AssumeRoleWithSAML API
例: Google Cloud Identity は SAML に対応した IdP の一つです。STS の AssumeRoleWithSAML
API を利用した認証が可能です。
How to set up IAM federation using Google Workspace
AWS SSO による SAML 認証の隠蔽
例: Google Cloud Identity は SAML に対応した IdP の一つです。SSO User ポータルを登場させることで、AssumeRoleWithSAML API の処理を AWS 内に隠蔽することができます。可能な限り、AssumeRoleWithSAML ではなく、後継の AWS SSO を利用します。
How to use G Suite as an external identity provider for AWS SSO
AWS SSO は Organization と併用する必要があり、management account で有効化します。
リージョンは一つだけ選択できます。
AssumeRoleWithWebIdentity API
OpenID Connect (OIDC) は Security Assertion Markup Language (SAML) と似た仕組みですが、OAuth2.0 を拡張しており、ユーザ自身が自分でユーザ登録が可能な、Web ベースの IdP で利用されているプロトコルです。AssumeRoleWithSAML は組織内の従業員が利用するのに対して、AssumeRoleWithWebIdentity は不特定多数の利用者がインターネット経由で利用することを想定します。
accounts.google.com:sub
といった変数を IAM policy で利用できます。IAM and AWS STS condition context keys
Amazon Cognito
OIDC と SAML の両方に対応しており、可能な限り、AssumeRoleWithWebIdentity ではなく、後継の Cognito を利用するようにします。Amazon Cognito は、不特定多数のユーザに対する Web 認証機能を実装するためのマネージドサービスです。Google Cloud における Identity Platform に対応します。
cognito-identity.amazonaws.com:sub
といった変数を IAM policy で利用できます。IAM and AWS STS condition context keys
GetFederationToken API
SAML に対応していない、オンプレミス上の ID 基盤を利用する際に利用します。STS GetFederationToken API を直接実行する custom identity broker を用意します。
Control Tower
- AWS Organization による複数アカウント管理のベストプラクティスを適用するための仕組みです。
- Account Factory
- 新規アカウント作成時に AWS Service Catalog を利用してプロビジョニングします。
- Guardrails
- 内部的に SCP を適用してポリシーを強制します。(Preventive 予防的)
- AWS Config によって、不正なイベントを検知します。(Detective 発見的)
- SNS でアカウント管理者に通知。
- Lambda を起動してイベントで検知された状態を修復。(Remediation)
Resource Access Manager
- 組織内外の別の AWS Account とリソースを共有する機能です。
- 冗長なリソース作成を回避できます。
- 例: VPC Subnet、Transit Gateway、Route53、Aurora DB
- 注意: VPC 自体ではなく subnet を共有します。Share your VPC with other accounts
- 例: VPC Subnet、Transit Gateway、Route53、Aurora DB
- 例えば、複数アカウントの VPC を一つの Transit Gateway にアタッチする際に利用されます。
- IAM resource based policy レベルで共有するのではなく、上位の Account レベルで共有します。
関連記事
- AWS EC2 インスタンスの選定方法準仮想化と完全仮想化 AWS のインスタンスタイプが準仮想化と完全仮想化のどちらの仮想化技術を採用したハードウェアであるかによって、使用できる AMI (OS) が異なるのは以下の理由によります。 準仮想化 ParaVirtualization (PV) において OS は自分が仮想化用のハードウェア上で動作していることを知っています。つまり仮想化用にカスタマイズされた専用の OS が必要になりま...
- OpenVPN で二つの VPC をつなぐための設定インターネット VPN (Virtual Private Network) には二拠点間の通信を暗号化する方式によって IPsec-VPN や SSL-VPN などがあります。OpenVPN は SSL-VPN の実装のひとつです。AWS VPC を二つ用意してそれらを OpenVPN で接続してみます。 VPC の構成 myvpc-1 (10.1.0.0/16) mysubnet-1-1 (10...
- Windows Server EC2 インスタンスへの CAL インストールWindows サーバを AWS EC2 インスタンスとして起動した後は、RDP 接続が必要となります。RDP 接続を行なうためには Remote Desktop Services (RDS) ライセンスが必要となります。 Windows Server のライセンスは、管理用途の RDS 接続を許可しています。その際に RDS ライセンスは不要です。ただし、[同時接続数が 2 という制限があります...
- AWS Lambda の基本的な使い方AWS Lambda はイベントドリブンな「関数」を登録できるサービスです。例えば S3 に画像がアップロードされたときにサムネイル用のサイズに加工する処理が記述された関数を登録できます。基本的な使い方をまとめます。 事前準備 関数の登録はブラウザで AWS コンソールにログインして行うこともできますが、本ページでは AWS C
- AWS 落穂拾い (Data Engineering)Kinesis Kinesis Streams データは 3 AZ にレプリケーションされます。Amazon Kinesis Data Streams FAQs 24 時間 (既定値) から 1 年までデータ保持できます。[Changing the Data Retention Period](https://docs.aws.amazon