AWS へのサポートアクセス
DoiT に問い合わせを開いた際、効果的に支援するために、お客様の AWS メンバーアカウントへのアクセスが必要になる場合があります。DoiT は、お客様の Amazon Web Services(AWS)アカウントへアクセスする際の完全な透明性を提供します。
重要なポイント
-
一時的な読み取り専用アクセスのために、AWS user federation broker mechanism を活用します。
-
契約上の義務に基づきテクニカルサポートを提供する目的でのみ、お客様の AWS アカウントにアクセスします。その他の理由でアクセスすることはありません。
-
サポートエンジニアはお客様の AWS アカウントに対する書き込み権限を持ちません。唯一の例外として、お客様に代わって AWS サポートケースの起票およびサービスクォータ引き上げのリクエストが可能です。
-
-
当社プラットフォーム上でのお客様環境へのアクセスログの保持期間は 30 日です。お客様のアカウント上で当社が実行したすべてのアクションの完全なログについては、AWS CloudTrail を利用できます。
-
暗号学的手法によりコードレベルでアクセスのトラストドメインの境界を確立し、既知で安全なエントリポイントから DoiT のみがお客様の環境にアクセスできるようにしています。
アクセスの付与
DoiT のサポートエンジニアにフェデレーティッドアクセスを付与するには、各 AWS メンバーアカウント に以下のリソースを設定してください。
- DoiT が管理するアイデンティティをフェデレーションするための 2 つの AWS IAM アイデンティティプロバイダ
- 上記アイデンティティからのアクセスを許可する、
DoiT-Support-Gatewayという名前の AWS IAM サポートロール 1 つ
これらのリソースはグローバルであるため、任意の AWS リージョンに作成できます。
必要な権限
上記の技術的前提条件を作成するには、以下の IAM ポリシーで定義された IAM 権限を 少なくとも 持つ IAM ユーザーでログインするか、または IAM ロールを引き受けてください。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iam:CreateRole",
"iam:DeleteRole",
"iam:GetRole",
"iam:ListRoles",
"iam:UpdateRole",
"iam:TagRole",
"iam:UntagRole",
"iam:CreateOpenIDConnectProvider",
"iam:UpdateOpenIDConnectProviderThumbprint",
"iam:GetOpenIDConnectProvider",
"iam:ListAttachedRolePolicies",
"iam:ListOpenIDConnectProviders",
"iam:AttachRolePolicy",
"iam:DetachRolePolicy",
"iam:PutRolePolicy",
"iam:GetRolePolicy",
"iam:ListRolePolicies",
"iam:DeleteRolePolicy",
"iam:UpdateAssumeRolePolicy"
],
"Resource": [
"arn:aws:iam::CUSTOMER_AWS_ACCOUNT_ID:role/*",
"arn:aws:iam::CUSTOMER_AWS_ACCOUNT_ID:oidc-provider/*"
]
}
]
}
リソースの作成
必要なリソースは 各 AWS メンバーアカウント に作成し、Management Account には作成しないでください。
当社が提供する AWS Cloud Formation のクイック作成リンク を使用して作成することを推奨します。
または、次のいずれかの方法で手動作成することもできます。
- AWS Cloud Formation Stack
- AWS Cloud Formation Stack Template
- Terraform
- AWS CLI
手順に従って AWS Cloud Formation Stack の作成手順 を実行し、最後の画面で Named IAM resources の警告を承認してください。
任意機能のためのパラメータ提供を除き、Optional Capabilities のセクションを確認してください。手順の途中で提供された値を変更しないでください。変更すると処理が失敗する可能性があります。
locals {
// Replace with your AWS account ID
aws_customer_account_id = "CUSTOMER_AWS_ACCOUNT_ID"
}
resource "aws_iam_openid_connect_provider" "doit1" {
client_id_list = [local.aws_customer_account_id]
thumbprint_list = ["15c2b40aa2f322798666a6b332aaa03a6773019b", "08745487e891c19e3078c1f2a07e452950ef36f6"]
url = "https://support.cre.doit-intl.com"
tags = {
"doit:support" = "true"
}
}
resource "aws_iam_openid_connect_provider" "doit2" {
client_id_list = ["doit-support"]
thumbprint_list = ["08745487e891c19e3078c1f2a07e452950ef36f6"]
url = "https://securetoken.google.com/doit-support"
tags = {
"doit:support" = "true"
}
}
resource "aws_iam_role" "doit_support_gateway" {
name = "DoiT-Support-Gateway"
inline_policy {
name = "inline"
policy = jsonencode(
{
Version= "2012-10-17"
Statement = [
{
Effect = "Allow"
Action = [
"airflow:GetEnvironment",
"airflow:List*",
"amplify:Get*",
"amplify:List*",
"backup:Describe*",
"backup:Get*",
"backup:List*",
"ce:Get*",
"ce:List*",
"ce:Describe*",
"compute-optimizer:Get*",
"compute-optimizer:Describe*",
"eks:AccessKubernetesApi",
"eks:List*",
"mobiletargeting:List*",
"redshift-serverless:List*",
"s3:GetStorageLens*",
"s3:ListStorageLens*",
"servicequotas:Get*",
"servicequotas:List*",
"servicequotas:RequestServiceQuotaIncrease",
"workspaces:List*"
]
Resource = "*"
}
]
})
}
managed_policy_arns = toset([
"arn:aws:iam::aws:policy/AmazonRDSPerformanceInsightsReadOnly",
"arn:aws:iam::aws:policy/AmazonWorkSpacesWebReadOnly",
"arn:aws:iam::aws:policy/AmazonSESReadOnlyAccess",
"arn:aws:iam::aws:policy/AWSCloudShellFullAccess",
"arn:aws:iam::aws:policy/AWSSupportAccess",
"arn:aws:iam::aws:policy/AWSBillingReadOnlyAccess",
"arn:aws:iam::aws:policy/CloudWatchReadOnlyAccess",
"arn:aws:iam::aws:policy/SecurityAudit",
"arn:aws:iam::aws:policy/job-function/ViewOnlyAccess",
])
max_session_duration = 21600
assume_role_policy = jsonencode(
{
Version = "2012-10-17"
Statement = [
{
Effect = "Allow",
Action = [
"sts:AssumeRoleWithWebIdentity",
"sts:TagSession"
]
Principal = {
Federated = [
"arn:aws:iam::${local.aws_customer_account_id}:oidc-provider/support.cre.doit-intl.com",
"arn:aws:iam::${local.aws_customer_account_id}:oidc-provider/securetoken.google.com/doit-support"
]
}
Condition = {
StringEqualsIfExists = {
"support.cre.doit-intl.com:aud" = local.aws_customer_account_id
"securetoken.google.com/doit-support:aud" = "doit-support"
}
StringEquals = {
"aws:RequestTag/DoitEnvironment" = local.aws_customer_account_id
}
"ForAllValues:StringEquals" = {
"sts:TransitiveTagKeys" = ["DoitEnvironment"]
}
Null = {
"sts:TransitiveTagKeys" = "false"
}
}
}
]
}
)
tags = {
"doit:support" = "true"
}
}
CUSTOMER_AWS_ACCOUNT_ID をお客様の AWS アカウント ID に置き換えてください。
aws iam create-open-id-connect-provider \
--tags '{"Key": "doit:support", "Value": "true"}' \
--client-id-list "CUSTOMER_AWS_ACCOUNT_ID" \
--url https://support.cre.doit-intl.com \
--thumbprint-list "15c2b40aa2f322798666a6b332aaa03a6773019b"
aws iam create-open-id-connect-provider \
--tags '{"Key": "doit:support", "Value": "true"}' \
--client-id-list "doit-support" \
--url https://securetoken.google.com/doit-support \
--thumbprint-list "08745487e891c19e3078c1f2a07e452950ef36f6"
aws iam create-role --role-name DoiT-Support-Gateway \
--max-session-duration 21600 \
--tags '{"Key": "doit:support", "Value": "true"}' \
--assume-role-policy-document '{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"sts:AssumeRoleWithWebIdentity",
"sts:TagSession"
],
"Principal": {
"Federated": [
"arn:aws:iam::CUSTOMER_AWS_ACCOUNT_ID:oidc-provider/support.cre.doit-intl.com",
"arn:aws:iam::CUSTOMER_AWS_ACCOUNT_ID:oidc-provider/securetoken.google.com/doit-support"
]
},
"Condition": {
"StringEqualsIfExists": {
"support.cre.doit-intl.com:aud": "CUSTOMER_AWS_ACCOUNT_ID",
"securetoken.google.com/doit-support:aud": "doit-support"
},
"StringEquals": {
"aws:RequestTag/DoitEnvironment": "CUSTOMER_AWS_ACCOUNT_ID"
},
"ForAllValues:StringEquals": {
"sts:TransitiveTagKeys": ["DoitEnvironment"]
},
"Null": {
"sts:TransitiveTagKeys": false
}
}
}
]
}'
aws iam put-role-policy --role-name DoiT-Support-Gateway \
--policy-name inline \
--policy-document '{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"airflow:GetEnvironment",
"airflow:List*",
"amplify:Get*",
"amplify:List*",
"backup:Describe*",
"backup:Get*",
"backup:List*",
"ce:Get*",
"ce:List*",
"ce:Describe*",
"compute-optimizer:Get*",
"compute-optimizer:Describe*",
"eks:AccessKubernetesApi",
"eks:List*",
"mobiletargeting:List*",
"redshift-serverless:List*",
"s3:GetStorageLens*",
"s3:ListStorageLens*",
"servicequotas:Get*",
"servicequotas:List*",
"servicequotas:RequestServiceQuotaIncrease",
"workspaces:List*"
],
"Resource": "*"
}]}'
aws iam attach-role-policy --role-name DoiT-Support-Gateway --policy-arn arn:aws:iam::aws:policy/AmazonRDSPerformanceInsightsReadOnly
aws iam attach-role-policy --role-name DoiT-Support-Gateway --policy-arn arn:aws:iam::aws:policy/AmazonWorkSpacesWebReadOnly
aws iam attach-role-policy --role-name DoiT-Support-Gateway --policy-arn arn:aws:iam::aws:policy/AWSCloudShellFullAccess
aws iam attach-role-policy --role-name DoiT-Support-Gateway --policy-arn arn:aws:iam::aws:policy/AmazonSESReadOnlyAccess
aws iam attach-role-policy --role-name DoiT-Support-Gateway --policy-arn arn:aws:iam::aws:policy/AWSBillingReadOnlyAccess
aws iam attach-role-policy --role-name DoiT-Support-Gateway --policy-arn arn:aws:iam::aws:policy/AWSSupportAccess
aws iam attach-role-policy --role-name DoiT-Support-Gateway --policy-arn arn:aws:iam::aws:policy/CloudWatchReadOnlyAccess
aws iam attach-role-policy --role-name DoiT-Support-Gateway --policy-arn arn:aws:iam::aws:policy/SecurityAudit
aws iam attach-role-policy --role-name DoiT-Support-Gateway --policy-arn arn:aws:iam::aws:policy/job-function/ViewOnlyAccess
CUSTOMER_AWS_ACCOUNT_ID をお客様の AWS アカウント ID に置き換えてください。
Optional Capabilities
AWS Premium Support
CloudFormation テンプレートには、既定値 false のパラメータ AllowSupportRunbooksExecutions が含まれます。このパラメータを true に設定すると、次のトラブルシューティング用 SSM ランブックを実行するために必要な権限が追加されます。
マルチアカウントへのデプロイ
DoiT のサポートエンジニアがケース作成と同時に自動で読み取り専用アクセスを得られるよう、すべてのメンバーアカウントに読み取り専用のサポートアクセスを事前デプロイしておくこともできます。
この目的には、CloudFormation StackSets を使用して、AWS Organization 内のすべてのメンバーアカウント、または限定した OU やメンバーアカウントに CloudFormation のサポートスタックを自動作成できます。
当社は管理アカウントでのサポートスタックを必要としません。また、AWS CloudFormation のドキュメントに記載のとおり、StackSets は組織の管理アカウントにスタックをデプロイしません。
以下は、最新のサポートテンプレートに基づいて StackSet を作成する CloudFormation テンプレートの例です。
AWSTemplateFormatVersion: 2010-09-09
Description: DoiT Support Role StackSet
Parameters:
OrganizationalUnitIds:
Type: CommaDelimitedList
Description: >-
Provide the organizational root OU ID (Prefix like: r-) to apply to all the accounts under this Organization.
Otherwise, provide a comma-separated list of OU ids (Prefix like: ou-).
AllowedPattern: "^(ou-|r-)[a-z0-9-]+(?:,( )*(ou-|r-)[a-z0-9-]+)*$"
Resources:
StackSetMember:
Type: "AWS::CloudFormation::StackSet"
Properties:
AutoDeployment:
RetainStacksOnAccountRemoval: false
Enabled: true
Capabilities:
- CAPABILITY_NAMED_IAM
OperationPreferences:
FailureTolerancePercentage: 0
RegionConcurrencyType: PARALLEL
PermissionModel: SERVICE_MANAGED
Parameters:
- ParameterKey: AllowSupportRunbooksExecutions
ParameterValue: "false"
- ParameterKey: GrantDiagnosticToolAccess
ParameterValue: "true"
StackInstancesGroup:
- DeploymentTargets:
OrganizationalUnitIds: !Ref OrganizationalUnitIds
Regions:
- us-east-1
StackSetName: doit-support-gateway-stackset
TemplateURL: https://doit-support.s3.amazonaws.com/doit-support.json
追加情報
-
DoiT-Support-GatewayIAM ロールには、任意の権限を付与できます。上記で提案している権限は、ほとんど、あるいはすべてのサポートユースケースをカバーするために推奨しているものです。お客様のアカウントに対して DoiT サポートにどの程度粒度の細かいアクセスを明示的に付与するかの最終判断はお客様に委ねられます。当社は、アプリケーションレベルで AWS セッションポリシー を適用し、付与された権限が_読み取り専用およびお客様に代わるサポートリクエストの起票に厳密に限定される_ようにしています。
-
servicequotas:Get*、servicequotas:List*、servicequotas:RequestServiceQuotaIncreaseの権限により、DoiT のサポートエンジニアはお客様の現在のサービスクォータを確認し、お客様に代わって引き上げをリクエストできます。これにより、追加のアクセスやお客様側での対応を必要とせずに、クォータ関連の問題をより効果的に支援できます。 -
お客様の Resource-based AWS IAM ポリシーの IAM 条件 内で、
DoiTEnvironmentAWS IAM Principal セッションタグを活用し、DoiT がアクセス可能なリソースをさらに制限できます。将来的にはカスタムの AWS IAM Session Principal Tags に対応し、既存の IAM のタグベースアクセス制御セキュリティ戦略と DoiT を統合できるようにする可能性があります。この機能の優先度引き上げをご希望の場合は、お問い合わせください。